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 运算符+(加号)的重载 运算符+既重载了数字相加,又重载了字符串连接操作.具体是数字相加还是字符串 ...
随机推荐
- BZOJ-3495 前缀优化建图2-SAT
题意:有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. 解法:以前没学过,参考https://blog.csdn.net/linkf ...
- github fork代码后提交
点击他人github上的fork 在自己的Github上将代码拷贝下来 git clone 在本地修改代码后创建分支 git checkout -b work master(work为新建的特性分支, ...
- Jmeter-【JSON Extractor】-响应结果中数组多个相同key取值
一.请求返回样式 二.取所有option的值 三.查看结果
- Vue学习笔记【25】——Vue组件(组件间传值)
父组件向子组件传值 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据 <script> // 创建 Vue 实例,得到 ViewModel var ...
- go声明和初始化
go声明和初始化 当我们第一次看见变量和声明时,我们仅仅看见一些内置的类型,比如整型和字符串.现在我们将学习结构体,并且我们会深入学习包括指针的内容. 通过一种最简单的方式去创建一个结构体值类型: g ...
- 区间dp(二维)——cf1199F
复杂度是O(N^5),枚举所有小矩形,转移时再按每列,每行进行转移 #include<bits/stdc++.h> using namespace std; #define N 55 in ...
- pandas中读取文件报错
import pandas as pd fileName = "路径中带有中文/xxx.csv" tf_train = pd.read_csv(fileName) 会提示报错 OS ...
- unittest框架学习笔记三之testsuite
# coding=utf-8 '''created :2018/3/29 author:star project: testsuite'''import unittest,time,osfrom ba ...
- CSS:百科
ylbtech-CSS:百科 1.返回顶部 CSS (层叠样式表) 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标 ...
- jeecg接口开发及权限实现原理
接口开发使用的框架 jeecg本身是基于 Spring MVC 框架搭建的,因此,使用 Spring MVC 框架的 RESTful API 功能来进行接口开发就是顺理成章的事了. 接口的拦截与鉴权 ...