selenium 显示等待、隐式等待、强制等待
如今大部分web程序使用Ajax技术,当浏览器加载页面时,页面元素可能不是同时加载完成,如果因为加载某个元素超时导致ElementNotVisibleException的情况出现,自动化脚本的稳定性就会降低。
WebDriver 提供了两种类型的等待:显示等待、隐式等待、强制等待
- 隐式等待(页面加载)
隐式等待是在创建driver时,为浏览器对象创建的一个等待时间。
是在尝试得到某个元素时,得不到就等待固定长度的时间加载全部页面元素。默认设置是0秒。一旦设置了隐式等待时间,它的作用范围就是Webdriver对象实例的整个生命周期。
隐式等待设置是全局等待,分为:
- 页面加载超时等待;
- 页面元素加载超时;
- 异步脚本超时
from selenium import webdriver driver = webdriver.Chrome()
# 定位对象时,给10s时间,如果10s内还没有定位到,则抛出异常
driver.implicitly_wait(10)
# 设置页面加载超时为10s
driver.set_page_load_timeout(10)
# 异步脚本的超时时间为3s
driver.set_script_timeout(10) driver.get("http://yunpan.360.cn") driver.find_element_by_id("XXX")
- 显式等待(元素加载)
用于一段代码内,只要等到条件满足,就继续执行,否则就一直等,直到规定时间内都没有达到条件,就抛出异常
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By driver = webdriver.Chrome()
driver.get("http://www.xxx.com")
# 显示等待
element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'element_id')))
element.click() driver.quit()
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())方法配合使用,下面是 until()和 until_not()方法的说明。
- until(method, message=' ') 调用该方法提供的驱动程序作为一个参数,直到返回值为 Ture。
- until_not(method, message=' ') 调用该方法提供的驱动程序作为一个参数,直到返回值为 False。
Expected Conditions
expected_conditions 类提供一些预期条件的实现。
- presence_of_element_located()判断元素是否存在。
- title_is 用于判断标题是否 xx。
- title_contains 用于判断标题是否包含 xx 信息。
- presence_of_element_located 元素是否存在。
- visibility_of_element_located 元素是否可见。
- visibility_of 是否可见
- presence_of_all_elements_located判断一组元素是否存在
- text_to_be_present_in_element 判断元素是否有 xx 文本信息
- text_to_be_present_in_element_value 判断元素值是否有 xx 文本信息
- frame_to_be_available_and_switch_to_it 表单是否可用,并切换到该表单。
- invisibility_of_element_located 判断元素是否隐藏
- element_to_be_clickable 判断元素是否点击,它处于可见和启动状态
- staleness_of等到一个元素不再是依附于 DOM。
- element_to_be_selected 被选中的元素
- element_located_to_be_selected 一个期望的元素位于被选中。
- element_selection_state_to_be一个期望检查如果给定的元素被选中。
- element_located_selection_state_to_be期望找到一个元素并检查是否选择状态
- alert_is_present 预期一个警告信息
除了 expected_conditions 所提供的预期方法,我们也可以使用 is_displayed()方法来判断元素是否可见。
#coding=utf-8 from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Firefox()
driver.get("http://www.baidu.com") input_ = driver.find_element_by_id("kw")
element = WebDriverWait(driver,5,0.5).until( lambda driver :input_.is_displayed())
input_.send_keys('selenium')
driver.quit()
- 强制等待
固定休眠
time.sleep(5)
selenium 显示等待、隐式等待、强制等待的更多相关文章
- python+selenium基础篇,三种等待方式,显示、隐式、强制等待
1.显示等待: from selenium import webdriver from time import sleep from selenium.webdriver.support.ui imp ...
- python+selenium六:隐式等待
python+selenium六:隐式等待 # 隐式等待 # 全局生效,只写一次即可(仅当前页面)# 若有页面切换,需sleep等待新页面出现后,再使用此方法 # 如:在35秒内,等待操作完成,完 ...
- [Effective JavaScript笔记]第3条:当心隐式的强制转换
js对类型错误出奇的宽容 3+true; //4 3*””; //0 3+[]; //3 3+[3]; //33 以上表达式在许多语言早就变红了.而js不但不报错还给你个结果. 极少情况会产生即时 ...
- Intent 显示意图 隐式意图
//显式意图 :必须指定要激活的组件的完整包名和类名 (应用程序之间耦合在一起) // 一般激活自己应用的组件的时候 采用显示意图 //隐式意图: 只需要指定要动作和数据就可以 ( 好处应用程序之 ...
- 转 Python selenium 强制等待显示等待隐式等待
1. 1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间. 看代码: # -*- codi ...
- 【Selenium】显示、隐式等待
显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...
- 2.8 (显示、隐式、线程休眠) selenium 等待方式 ❀
http://blog.csdn.net/pf20050904/article/details/20052485 http://www.cnblogs.com/hellokitty1/p/629584 ...
- [selenium webdriver Java]隐式的等待同步
Selenium WebDriver提供了隐式等待来同步测试.当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后,抛出找不到元素异常 即,当元素没 ...
- C#接口的显示和隐式实现
早上骑车上班走到半路发现手机忘带了,这年代兜里没装一分现金,吃饭都要刷手机,上班时间无聊了不能玩手机更是大问题,所以果断掉头拿手机.取完手机刚出门看这天阴沉沉的貌似要下雨,没雨衣,骑车又不能打伞,上次 ...
- JS当心隐式的强制转换
JavaScript对类型错误出奇的宽容 3 + true; // 4 null + 3; // 3 运算符+(加号)的重载 运算符+既重载了数字相加,又重载了字符串连接操作.具体是数字相加还是字符串 ...
随机推荐
- 获取min-max之间的随机数
private static String getRandom(int min, int max){ Integer random =(int)(min+Math.random()*(max-min+ ...
- 【Linux】windows下编写的脚本文件,放到Linux中无法识别格式
注意:我启动的时候遇到脚本错误 » sh startup.sh -m standalone tanghuang@bogon : command not found : command not foun ...
- Yii2高级模板的安装
1.通过composer 安装高级版 C:wampwwwyii>composer create-project --prefer-dist yiisoft/yii2-app-advanced a ...
- DELPHI常用类型及定义单元
Controls Application (the variable not a type) Forms Beep SysUtils or Windows (different functions) ...
- C语言变长参数实现
#include<stdio.h> #include<string.h> #include<stdarg.h> /***编写可变长参数列表的函数案例*/ /* vo ...
- nteract 使用教程
安装 直接去官网下载 一路回车 官网 建立python虚拟环境 和我们平时一样 不同的是在建立完之后 要安装一个kernel Using Python3 with pip and a virtual ...
- 如何获取监听iframe src属性的变化进行后续操作
应用场景,当iframe内发生点击事件内容改变时,如果我们想获取变化后的iframe的 src 属性值,就可以使用如下方式去获取 <iframe id="taobaoOrder&quo ...
- json类型的相互转化
package com.test.jsontest; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...
- PAT_A1112#Stucked Keyboard
Source: PAT A1112 Stucked Keyboard (20 分) Description: On a broken keyboard, some of the keys are al ...
- HTML中改变列表的序号类型
HTML中,<ol>标签表示有序列表,每一个表项的编号默认从数字开始.比如 <html> <head> <title>test</title> ...