首页 > 其他分享 >22.Selenium【元素等待】三种元素等待方式

22.Selenium【元素等待】三种元素等待方式

时间:2023-01-17 10:13:38浏览次数:53  
标签:webdriver 22 text 元素 driver element path 等待

一、前言

我们在定位元素的时候往往会碰到元素加载慢的情况,如果元素没有加载出来而进行点击操作的话,是无法点击的。我们前面一直用time.sleep()方法进行页面等待的,其中这种方法就是元素等待的一种,这节课我们主要讲一下所有元素等待的方式,这也是面试中常问的知识点。

二、学习目标

1.强制等待

2.隐性等待

3.显性等待

三、知识点

地址示例:http://sahitest.com/demo/waitFor.htm

1.【强制等待】

第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),不管是元素加没加载出来,都必须等xx时间。不过不建议总用这种等待方式,太死板,严重影响程序执行速度。

  • 语法:

    time.sleep(3)
    
  • 代码示例:

    # 导入webdriver
    import time
    from selenium import webdriver
    #获取驱动路径
    driver_path = './chromedriver.exe'
    #创建一个浏览器对象
    driver = webdriver.Chrome(executable_path=driver_path)
    #设置全屏
    driver.maximize_window()
    #请求
    driver.get('http://sahitest.com/demo/waitFor.htm')
    
    #点击Click me按钮
    driver.find_element("xpath",".//input[@value='Click me']").click()
    #强制等待3秒
    time.sleep(3)
    #获取输出文本
    text = driver.find_element("id","id2").text
    print(text)
    

2.【隐性等待】

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢。

  • 语法:

    driver.implicitly_wait(5)
    
  • 代码示例:

    # 导入webdriver
    import time
    from selenium import webdriver
    #获取驱动路径
    driver_path = './chromedriver.exe'
    #创建一个浏览器对象
    driver = webdriver.Chrome(executable_path=driver_path)
    #设置全屏
    driver.maximize_window()
    #请求
    driver.get('http://sahitest.com/demo/waitFor.htm')
    
    #点击Click me按钮
    driver.find_element("xpath",".//input[@value='Click me']").click()
    #隐式等待
    driver.implicitly_wait(5)
    #获取输出文本
    text = driver.find_element("id","id2").text
    print(text)
    

3.【显性等待】

显性等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常。

  • 语法:

    WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locator))
    
  • 代码示例:

    # 导入webdriver
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    #获取驱动路径
    driver_path = './chromedriver.exe'
    #创建一个浏览器对象
    driver = webdriver.Chrome(executable_path=driver_path)
    #设置全屏
    driver.maximize_window()
    #请求
    driver.get('http://sahitest.com/demo/waitFor.htm')
    
    #点击Click me按钮
    driver.find_element("xpath",".//input[@value='Click me']").click()
    #隐式等待
    locator = ("id","id2")
    WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locator))
    #获取输出文本
    text = driver.find_element("id","id2").text
    print(text)
    

标签:webdriver,22,text,元素,driver,element,path,等待
From: https://www.cnblogs.com/ckxingchen/p/17057070.html

相关文章

  • 9.Selenium【元素的定位】部分链接文本定位
    一、前言有时候我们可以使用链接文本进行定位,因为是文本,一般是说明性的文字,所以会存在文本太长的情况,其实我们也可以通过部分文本匹配元素。二、学习目标1.通过部分链接......
  • Visual Studio 2022密钥
    Visual Studio 2022ProfessionalTD244-P4NB7-YQ6XK-Y8MMM-YWV2JVisualStudio2022EnterpriseVHF9H-NXBBB-638P6-6JHCY-88JWH......
  • 10.Selenium【元素的定位】css选择器定位
    一、前言了解前端的同学应该知道,css是一种语言,它用来描述THML和XML的元素显示样式,在css语言中有css选择器,在Selenium中也可以使用这种选择器来定位元素。二、学习目标1.......
  • 11.Selenium【元素的定位】xpath表达式定位
    一、前言我们上节课讲了css选择器定位元素,其实他和xpath定位类似,只是写法有所区别。selenium定位元素的方法有很多种,像是通过id、name、class_name、tag_name、link_text......
  • 12.Selenium【元素操作】模拟操作页面元素
    一、前言前面的课程我们已经学习了定位元素的八大方法,其实在实际工作中只需掌握xpath定位即可满足工作需求。定位元素后,我们得到一个元素对象,从这节课开始我们开始针对这......
  • 13.Selenium【鼠标和键盘操作】模拟鼠标操作页面元素(了解)
    一、前言actionchains是selenium里面专门处理鼠标和键盘相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。这对于做更复杂的动作非常有用,比如悬停和拖放。......
  • 4.Selenium【元素的定位】id属性定位
    一、前言前面的小节中我们学习了如何针对页面进行自动化操作,从这节课开始,我们学习如何操作页面中的元素(按钮,输入框等)。如果有操作一个元素,必须分为两步:(1)定位元素信息,返回......
  • 5.Selenium【元素的定位】name属性定位
    一、前言上节课介绍了如何通过标签的id属性来定位,同样,如果标签中有name属性,我们也可以通过name属性来定位元素。二、学习目标1.通过name属性定位元素三、知识点1.【通......
  • 6.Selenium【元素的定位】class属性定位
    一、前言除了id和name以外,class通常也会存在于标签属性中,我们同样可以通过标签的class属性来定位元素。但是要注意的是,class属性的值一般在页面中不是唯一的,我们如果要定......
  • 7.Selenium【元素的定位】标签名定位
    一、前言与class属性一样,标签名同样不是唯一的,我们在使用标签名定位时,前提是已经知道当前页面中只有这一个该名字的标签,不能用重名的。二、学习目标1.通过标签名定位元......