Selenium显式、隐式等待
显式等待:
显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。简单的说就是在指定时间内,一直等待某个条件成立,条件成立后立即执行定位元素的操作;如果超过这个时间条件仍然没有成立,则会抛出异常!显式等待需要使用 selenium.webdriver.support.excepted_conditions 期望条件和 selenium.webdriver.support.ui.WebDriverWait 类来配合完成。
隐式等待:
隐式等待实际是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。如果某些元素不是立即可用的,隐式等待是告诉 WebDriver 去等待一定的时间后去查找元素。默认等待时间是0秒,一旦设置该值,隐式等待是设置该 WebDriver 的实例的生命周期。这样的隐式等待会有个坑,有些页面的JS是放在body的最后进行加载,实际这是页面上的元素都已经加载完毕,我们却还在等待全部页面加载结束。
需要特别说明的是:隐性等待对整个 driver 的周期都起作用,所以只要设置一次即可(在最开始设置一次就可以了),切不要当作固定等待使用。 熟悉了什么是显式等待和隐式等待,下面就让我们来看看怎么使用这两种等待吧。
1、显式等待
显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。
1 from selenium import webdriver
2 from selenium.webdriver.common.by import By
3 from selenium.webdriver.support.ui import WebDriverWait
4 from selenium.webdriver.support import expected_conditions
5
6 driver = webdriver.Chrome()
7 driver.get("url")
8
9 locator = (By.ID, "你的标签ID")
10
11 # 显式等待:条件成立,立即执行;超过指定时间则报错
12 WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located(locator))
13 driver.find_element_by_id("你的标签ID").click()
14 # 或
15 element = WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.ID, "你的标签ID")))
16 element.click()
注意:传入的定位条件必须是元组形式。
代码说明:
WebDriverWait(driver, 10):设置了一个10秒上限的等待时间。在指定时间内,一直等待某个条件成立,条件成立后立即执行定位元素的操作;如果超过这个时间条件仍然没有成立,则会抛出 TimeoutException 异常!
expected_conditions:后面是自动化的Web浏览器中一些常用的预期条件。请参考 https://blog.csdn.net/kelanmomo/article/details/82886718
WebDriverWait参数:
- driver:传入WebDriver实例,即我们上例中的driver
- timeout:超时时间,等待的最长时间
- poll_frequency:调用until或until_not中的方法的间隔时间,默认是0.5秒
- ignored_exceptions:忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。
这个模块中,一共只有两种方法 until 与 until_not:
- until:当某元素出现或什么条件成立则继续执行
- until_not:当某元素消失或什么条件不成立则继续执行
until 与 until_not 参数如下:
- method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
- message:如果超时,抛出TimeoutException,将message传入异常
2、隐式等待
如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。
1 from selenium import webdriver
2
3 driver = webdriver.Chrome()
4 # 隐式等待:最长等待10秒钟往下执行
5 driver.implicitly_wait(10)
6 driver.get("url")
7 # 执行定位元素操作
8 element = driver.find_element_by_id("标签ID")
注意:隐式等待和显示等待都存在时,超时时间取二者中较大的。
原文链接:https://blog.csdn.net/xhaimail/article/details/104891037
Selenium显式、隐式等待的更多相关文章
- python+selenium六:隐式等待
python+selenium六:隐式等待 # 隐式等待 # 全局生效,只写一次即可(仅当前页面)# 若有页面切换,需sleep等待新页面出现后,再使用此方法 # 如:在35秒内,等待操作完成,完 ...
- [selenium webdriver Java]隐式的等待同步
Selenium WebDriver提供了隐式等待来同步测试.当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后,抛出找不到元素异常 即,当元素没 ...
- Android开发:显式/隐式Intent
显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...
- C++显式隐式构造函数
https://blog.csdn.net/starlee/article/details/1331268#comments
- (转载)Android理解:显式和隐式Intent
Intent分两种:显式(Explicit intent)和隐式(Implicit intent). 一.显式(设置Component) 显式,即直接指定需要打开的activity对应的类. 以下多种 ...
- 【转】Android理解:显式和隐式Intent---- try catch
原文网址:http://blog.csdn.net/xiao__gui/article/details/11392987 Intent是Android初学者比较难理解的一个东西.我这里以通俗易懂的语言 ...
- js 五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解
壹 ❀ 引 可以说this与闭包.原型链一样,属于JavaScript开发中老生常谈的问题了,百度一搜,this相关的文章铺天盖地.可开发好几年,被几道this题安排明明白白的人应该不在少数(我就是 ...
- JS五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解(转载)
目录 壹 ❀ 引 贰 ❀ this默认绑定 叁 ❀ this隐式绑定 1.隐式绑定 2.隐式丢失 肆 ❀ this显式绑定 伍 ❀ new绑定 陆 ❀ this绑定优先级 柒 ❀ 箭头函数的this ...
- selenium 找不到元素 (显式等待 和隐式等待的区别)
selenium自动化页面元素不存在异常发生的原因有一下几点: (1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功.此时可以加载页面等待时间. (2)查到的元素没有在当前的ifra ...
- (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待
selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...
随机推荐
- csr_matrix与ndarray类型互转
ndarry 转 csr_matrix>>> import numpy as np>>> import scipy.sparse >>> my_m ...
- db2入门必看命令清单--日常运维必需
关注 推荐 嘉兴 视频 财经 科技 热点 国际 更多 搜索 34 消息 发布 5 2 收藏 分享 db2入门必看命令清单--日常运维必需 https://www.toutiao.c ...
- Dynamics 365 如何代表其他用户发送邮件
举个例子,用户A和用户B,用户B在新建电子邮件时,发件人以用户A的身份去发送邮件,这个时候需要做如下配置才可以. 首先登录用户A,在高级设置->个人设置中,配置允许其他人代表自己发送电子邮件. ...
- WebAPI :Get、Post、Delete、Put
public class RestClientMethod { /// <summary> /// 请求服务器地址 /// </summary> public string B ...
- Nginx安装以及部署Django项目
Nginx官网:http://nginx.org/ Nginx中文文档:https://www.nginx.cn/doc/index.html Tengine(淘宝Nginx):http://teng ...
- SSH 秘钥登入
1.打开权限 vim /etc/ssh/sshd_config 去掉 PubkeyAuthentication yes 一行的# 2.重启ssh服务 systemctl restart ss ...
- MySQL索引 及 EXPLAIN
1.索引长度计算: 1.索引字段,没有设置NOT NULL,则需要加一个字节. 2.定长字段:tinyiny占1个字节.int占4个字节.bitint占8个字节.date占3个字节.datetime占 ...
- google api 后端打点上报
https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type ...
- Oracle 用户创建,权限授予
https://blog.csdn.net/zhao05164313/article/details/124172838 grant create any view to crjp; 被授予权限的用户 ...
- MySQL利用information_schema库注入
information_schema库简单说就是MySQL里的一个目录库,MySQL是一本书,information_schema库这个存储数据库元数据的库就是书的目录或者索引. 库>表> ...