Web自动化测试进阶:网页中难点之expected_ conditions的应用与原理

news/2025/2/12 2:57:17/

前言

expected_conditions是selenium的一个模块,可以对网页上元素进行判断,一般配合WebDriverWait使用。

详细介绍说明

1、title_is,判断当前页面的标题是否等于预期,返回布尔值

也可以使用driver.title打印当前页面的标题

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')# 判断当前页面的标题是否符合预期
# title = WebDriverWait(driver, 5).until(EC.title_is('百度一下,你就知道'))
# 返回的类型是True或False
# print(title)
if EC.title_is('百度一下,你就知道'):print(True)
print(driver.title)
driver.quit()

2、title_contains(),判断当前页面的标题是否包含预期字符串

用法和title_is()类似,不重复介绍

3、presence_of_element_located() 判断元素是否被加在DOM树里,并不代表该元素一定可见

注意:传入的参数是tuple类型,第一个元素是定位方式,第二个元素是value。如果元素存在则返回元素位置,不存在则抛出异常(NoSuchElementException)

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')r = EC.presence_of_element_located(('id', 'kw'))
print(r(driver))

4、visibility_of_element_located() 判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)

和presence_of_element_located()类型,区别是presence_of_element_located()只强调元素存在于DOM树中,可见不可见无所谓。
如果元素存在且可见,就返回元素本身,如果存在但不可见则返回false

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

5、visibility_of() 判断元素是否可见

和visibility_of_element_located()作用一样,区别是传参不同,visibility_of()接收的参数是定位后的元素

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')element = driver.find_element_by_id('kw')
locate = WebDriverWait(driver, 5).until(EC.visibility_of(element))
locate.send_keys('selenium')
driver.quit()

6、presence_of_all_element_located()

判断是否至少有一个元素存在DOM树中

7、text_to_be_present_in_element()

判断某个元素中的text是否包含了预期的字符串

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')r = WebDriverWait(driver, 5).until(EC.text_to_be_present_in_element(('xpath', '//*[@id="bottom_layer"]/div[1]/p[5]/a'), '使用百度前必读'))
print(r)

8、text_to_be_present_in_element_value()

判断某个元素中的value属性是否包含了预期字符串

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')# 判断某个元素的value属性值是否符合预期字符串
r = WebDriverWait(driver, 5).until(EC.text_to_be_present_in_element_value(('id', 'su'), '百度一下'))
print(r)

9、frame_to_be_available_and_switch_to_it()

判断该表单是否可以切换进去,如果可以,返回True并switch进去,否则返回False
比如登录QQ邮箱:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitdef find_element(located):if isinstance(located, tuple):return WebDriverWait(driver, 5).until(EC.presence_of_element_located(located))else:return '必须是元组类型'driver = webdriver.Chrome()
driver.set_window_size(600, 800)driver.get('https://mail.qq.com/')
# 判断iframe是否可以切换进去,返回布尔值
is_switch = WebDriverWait(driver, 5).until(EC.frame_to_be_available_and_switch_to_it(('id', 'login_frame')))
print(is_switch)# 点击【帐号密码登录】
WebDriverWait(driver, 5).until(EC.presence_of_element_located(('id', 'switcher_plogin'))).click()# 定位元素:账号输入框、密码输入框、登录按钮
user_element = find_element(('id', 'u'))
password_element = find_element(('id', 'p'))
login_element = find_element(('id', 'login_button'))# 输入账号、密码、点击登录
user_element.send_keys('xxxxx@qq.com')
password_element.send_keys('password')
login_element.click()driver.quit()

10、invisibility_of_element_located()

判断某个元素是否不存在与DOM树中或不可见

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')a = EC.invisibility_of_element_located(('id', 'kw')) # 存在则返回False
print(a(driver))

11、element_to_be_clickable()

判断元素是否可见并是可以点击的
如果元素存在且可点击,则返回元素,如果元素存在但不可点击,则返回False

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')# 百度页该元素不可点击,返回False
a = EC.element_to_be_clickable(('xpath', '//*[@id="s-bottom-layer-right"]/span[2]'))
print(a(driver))

12、staleness_of()

等到一个元素从DOM树中移除,传入element元素,可以判断页面是否刷新了

13、element_to_be_selected()

判断某个元素是否被选中,一般用在下拉列表,传入element元素

14、element_selection_state_to_be()

判断某个元素的选中状态是否符合预期,方法参数是element和 is_selected

15、element_located_selection_state_to_be()

与element_selection_state_to_be()作用一样,只是方法参数不同,方法参数是located和 is_selected

16、alert_is_present()

按断页面上是否存在alert警告

今天的分享就到此结束了,大家还有什么不懂的可以评论区下提问哈,如果我的文章对你有所帮助的话,可以点赞三联支持一下哈


http://www.ppmy.cn/news/1156993.html

相关文章

U8 总账 2147024770 Automation 错误

检查电脑系统是不是缺少下面文件 C:\Program Files (x86)\Common Files\microsoft shared\DAO 如果缺少,则找存在的电脑拷贝一份过来即可。

部署云端SIEM解决方案的5个优势

随着组织迅速转向云端以利用云计算的优势,包括SIEM(安全信息与事件管理)在内的服务也正在向云端迁移。事实上,SIEM即服务正在迅速崭露头角,成为传统的本地SIEM解决方案的替代品。在Gartner的《采用SaaS SIEM前需回答的…

交通物流模型 | 基于自适应图卷积网络的轨道交通短时客流预测

随着城市化进程的发展和加快,城市轨道交通系统逐渐成长为一个大型网络,站点间的拓扑结构也变得越来越复杂,使得空间依赖性的捕捉变得越来越困难。多条线路的纵横交错使得站点间呈拓扑分布,传统的图卷积网络是基于先验知识生成的邻接矩阵实现的,无法反映站点之间的实际空间…

游戏开发年度报告 | 2023年游戏开发团队最流行的制作和发行的方式

近期,Perforce发布了《2023游戏开发与设计现状报告》。此报告调查了来自全球各地的游戏开发专业人士,了解他们面临的主要开发挑战、使用的工具和流程,以及目前最让他们对这个行业感到兴奋的方面。 龙智作为Perforce授权合作伙伴,将…

安捷伦E9300A射频传感器E9300B

安捷伦E9300A射频传感器E9300B E9300A 是 Agilent 使用的 18 0.1 瓦射频传感器。电子测试设备传感器测量波形的功率,例如多音和调制射频 (RF) 波形。传感器使用二极管检测器收集高度精确的调制测量值。测量所有调制格式的平均功率 宽动态范围(-60 dBm 至…

11 | JpaRepository 如何自定义

EntityManager 介绍 Java Persistence API 规定,操作数据库实体必须要通过 EntityManager 进行,而我们前面看到了所有的 Repository 在 JPA 里面的实现类是 SimpleJpaRepository,它在真正操作实体的时候都是调用 EntityManager 里面的方法。…

32 数据分析(下)pandas介绍

文章目录 工具excelTableauPower Queryjupytermatplotlibnumpypandas数据类型Series基础的SeriesSeries的字典操作增加表的索引名字和表名字索引操作 DataFrameDataFrame 的基础使用DataFrame的列方法------理解DataFrame的行列方法------使用loc 与 iloc 对齐操作SeriesDataFr…

【监督学习】基于合取子句进化算法(CCEA)和析取范式进化算法(DNFEA)解决分类问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…