在使用selenium python进行web自动化测试时,时常需要等待页面元素的出现,特别是页面加载的过程,需要用到等待
以下是三种selenium python的等待方式:
1.sleep()
sleep(),强制等待,设置休眠时间,通过导入time包来使用
from time import sleep
sleep(5) # 强制等待5秒钟
缺点:sleep只能选择一个固定的时间进行等待
2.implicitly_wait()
implicitly_wait(),隐性等待,是 webdirver 提供的一个超时等待,智能等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。通过导入selenium包就可使用。
from selenium import webdriver
wd=webdriver.Chrome(r'D:\webdrivers\chromedriver.exe')
wd.implicitly_wait(10) # 设置最长等待时间,每隔半秒寻找一次,最长等待时间为10秒
3.WebDriverWait()
WebDriverWait(),显性等待,是 webdirver 提供的方法,在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException
其语法格式如下:
WebDriverWait语法格式:
driver:webdriver的驱动程序
timeout:超时时间,默认以秒为单位
poll_frequency:休眠时间(步长)的间隔,默认为0.5秒,即检测元素是否存在的频率
WebDriverWait一般由until或until_not配合使用:
until(method,message=")调用该方法提供的驱动程序做为一个参数,直到返回值不为False
until_not(method,message=")调用该方法提供的驱动程序做为一个参数,直到返回值为False
eg.
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from time import sleep
wd=webdriver.Chrome(r'D:\webdrivers\chromedriver.exe')
# 谷歌驱动,超时时间为10,每个0.5秒监测一次
wait=WebDriverWait(driver=wd,timeout=10,poll_frequency=0.5)
# 也可直接写为wait=WebDriverWait(wd,10,0.5)
# 可与until配合使用
wait.until(lambda wd:wd.find_element_by_css_selector("h5中元素的定位"))
sleep(1) # 个人认为最好休眠一秒,方便下面进行断言
# 断言(我判断的是在新增弹窗中新增XX后点击确定,弹窗消失,页面加载完成后会跳出“新增成功”的提示)
self.assertEqual(u'新增成功!',wd.find_element_by_css_selector("h5中元素的定位").text)
PS:lambda表达式
lambda 表达式可以用来声明匿名函数。lambda 函数是一种简单的、在同一行中定义函数的方法。lambda 函数实际生成了一个函数对象lambda 表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。