selenium2 webdriver 设置等待时间
2016-08-11 18:53
337 查看
受页面加载速度的影响,经常报“Unable to locate element”的错误。
为了保证脚本运行的稳定性,需要脚本中添加等待时间。
####1.sleep()-----固定休眠
sleep():设置固定休眠时间。
python的time包提供了休眠方法sleep() ,导入time包后就可以使用sleep()进行脚本的执行过程进行休眠。
####2.implicitly_wait()-----隐式等待
implicitly_wait():是 webdirver 提供的一个超时等待。隐式等待一个元素被发现,或一个命令完成。 如果超出了设置时间的则抛出异常。
####
这10秒并非一个固定的等待时间,且不针对页面上的某个元素进行等待。当脚本指定到某个元素定位时,如元素可定位,则继续执行;如果元素定位不到,则将以轮询的方式不断地判断元素是否被定位到。假设在第5秒定位到了某元素则继续执行,如超出了设置的10秒,则抛出异常NoSuchElementException。
####3.WebDriverWait()-----显式等待
WebDriverWait():也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前 页面元素是否存在,如果超过设置时间检测不到则抛出异常。
driver - WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程),浏览器驱动
timeout - 最长超时时间,默认以秒为单位
poll_frequency - 休眠时间的间隔(步长)时间,默认为 0.5 秒
ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。
比如:
为了保证脚本运行的稳定性,需要脚本中添加等待时间。
####1.sleep()-----固定休眠
sleep():设置固定休眠时间。
python的time包提供了休眠方法sleep() ,导入time包后就可以使用sleep()进行脚本的执行过程进行休眠。
#import time time.sleep(3) #休眠3秒
####2.implicitly_wait()-----隐式等待
implicitly_wait():是 webdirver 提供的一个超时等待。隐式等待一个元素被发现,或一个命令完成。 如果超出了设置时间的则抛出异常。
####
举个栗子:implicitly_wait(10)
这10秒并非一个固定的等待时间,且不针对页面上的某个元素进行等待。当脚本指定到某个元素定位时,如元素可定位,则继续执行;如果元素定位不到,则将以轮询的方式不断地判断元素是否被定位到。假设在第5秒定位到了某元素则继续执行,如超出了设置的10秒,则抛出异常NoSuchElementException。
from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import NoSuchElementException driver.implicitly_wait(20) #等待20秒
####3.WebDriverWait()-----显式等待
WebDriverWait():也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前 页面元素是否存在,如果超过设置时间检测不到则抛出异常。
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程),浏览器驱动
timeout - 最长超时时间,默认以秒为单位
poll_frequency - 休眠时间的间隔(步长)时间,默认为 0.5 秒
ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。
WebDriverWait方法一般要和until或until_not()方法配合使用
比如:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions #等到该元素显示后才执行下一步 element = WebDriverWait(self.driver,10)\ .until(expected_conditions.element_to_be_clickable((By.LINK_TEXT,u'拒绝')))
相关文章推荐
- HDU 5823 color II
- 服务端编程中多线程的应用
- 队列的基本操作
- java.lang.UnsupportedClassVersionError
- java 做外挂 内联汇编
- 错误: 无法导入 wsdl:portType详细信息: 在运行 WSDL 导入扩展时引发异常:
- 安卓drawable标签详解
- Caffe 不同版本之间layer移植方法
- shiro介绍 【让Apache Shiro保护你的应用】
- C# 使用foreach语句遍历指定文件夹中的所有文件或文件夹
- jquery 判断div滚动条是否滚动到底部
- Caffe 不同版本之间layer移植方法
- zynq-7000学习笔记(二)——编译uboot
- HttpURLConnection 注意导入包和这个英文的拼写
- WPF TextBox 聚焦
- TI-RTOS 之 PWM
- jQuery翻页yunm.pager.js,涉及div局部刷新
- android调试中怎样使用gcc提供的工具
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- JAVA中的并发工具类(二)---同步屏障类CyclicBarrier