显示等待

显示等待,对指定元素进行等待的一种等待方式。通过设置最大等待时间、检查频率,对页面的元素来进行等待,一旦找到元素,则停止等待,进入后续步骤。
它主要的意思就是:程序每隔x秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常。
缺点:
1、使用相对比较复杂;
2、和强制等待类似,每一行等待只执行一次,如果要进行多个元素的等待,则需要多次写入。
优点:
等待判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率。

WebDriverWait类

显示等待使用思路:
1、导包:from selenium.webdriver.support.wait import WebDriverWait
2、对WebDriverWait类进行实例对象操作
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:浏览器驱动
timeout:最大等待时间
poll_frequency:检测的间隔时间,默认0.5
ignored_exceptions:超时后的异常信息,默认抛出NoSuchElementException

3、调用until()和until_not方法来等待元素
def until(self,method,message=’’)
含义:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常。
参数:
1、method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False,一般使用lambda匿名函数;
2、message:提示信息,出现异常时会将这个信息输出在控制台
def until_not(self,method,message=’’)
含义:与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

示例:打开百度,输入北京,点击搜索,点击第一个查询结果。使用显示等待

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

# 打开chrome浏览器
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 打开百度首页
driver.get('https://www.baidu.com/')
# 输入北京
driver.find_element_by_id('kw').send_keys('北京')
# 点击百度一下
driver.find_element_by_id('su').click()
# 点击第一个查询结果
# 定位到第一个查询结果的元素
ele = driver.find_element_by_xpath('//*[@id="1"]/div/div/h3/a')
# 实例WebDriverWait对象
wait = WebDriverWait(driver, 20)
# 调用until()方法, 判断某个元素是否存在页面上,结果为True,则结束等待,反之继续等待
wait.until(lambda x:ele.is_displayed())
# 对找到的元素执行点击操作
ele.click()
time.sleep(2)
# 关闭浏览器
driver.quit()
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐