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

news2024/11/26 4:33:28

前言

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 EC

driver = 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 EC

driver = 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 EC

driver = 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 EC

driver = 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 EC

driver = 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 WebDriverWait

def 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 EC

driver = 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 EC

driver = 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.coloradmin.cn/o/1097413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BI零售数据分析方案,看了就想拥有

一份优秀的零售数据分析方案该是什么样的?应该是能将人、货、场、供、财的数据分析清楚、展现清楚,更是要具备极强的灵活自主性,随时按需分析。奥威BI零售数据分析方案就是这样的一份零售BI标准方案。 奥威BI零售数据分析方案 1、预设以人货…

BIM如何通过3D开发工具HOOPS实现WEB轻量化?

随着建筑行业的数字化转型和信息建模技术的不断发展,建筑信息模型(BIM)已经成为设计、建造和管理建筑项目的标准。然而,BIM模型通常包含大量的数据,导致在Web上的传输和查看效率低下。为了解决这一挑战,HOO…

【Java基础面试二】、为什么Java代码可以实现一次编写、到处运行?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:一个Java文件里可以有多…

【广州华锐互动】人体血管器官3D动态展示为医学生提供哪些便利?

人体血管器官3D动态展示是一种采用先进的计算机图形技术和立体成像技术,对人体内部结构和功能进行三维可视化的教学方法。这种教学方式以其独特的优势,正在改变传统的解剖学教学模式,为医学教育带来了革新。 首先,3D动态演示能够提…

openssl 之 RSA加密数据设置OAEP SHA256填充方式

背景 如题 环境 openssl 1.1.1l c centos7.9 代码 /** 思路:填充方式自己写,不需要使用库提供的,然后加密时选择不填充的方式加密 关键代码 */ int padding_result RSA_padding_add_PKCS1_OAEP_mgf1(buf, padding_len, (unsigned char*…

mysql——面试题初体验

查询环境 1、student(学生表) 2、课程表(course) 3、教师表(teacher) 4、成绩表(score) 问题 (1) 查询所有学生的学号、姓名、选课数、总成绩 mysql> select s.s_id as 学号,s.s_name as 姓名 from student as s; ---------------- | 学号 | 姓名…

JWT的无限可能性:它如何在身份验证、单点登录、API安全等领域发挥作用

整理下工作中常用到的加密解密算法 和 使用场景 一、Base64和UrlBase64 二、Md5 salt 二、对称加密 四、非对称加密 这节整理 MD5、MD5salt基本介绍、使用场景及特点,以及java实现机制(文末附代码,需要的自取哈) 二、Md5 salt …

2023_Spark_实验十七:导入招聘大数据(项目)

一、爬虫爬取的招聘网站数据 二、在MySQL中创建空表 SET FOREIGN_KEY_CHECKS0;-- ---------------------------- -- Table structure for jd_jobs -- ---------------------------- DROP TABLE IF EXISTS jd_jobs; CREATE TABLE jd_jobs (job_name text,job_date text,minSale…

【无标题】markdow 模板

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Springboot项目中加载Groovy脚本并调用其内部方代码实现

前言 项目中部署到多个煤矿的上,每一种煤矿的情况都相同,涉及到支架的算法得写好几套,于是想到用脚本实现差异变化多的算法!一开始想到用java调用js脚本去实现,因为这个不需要引入格外的包,js对我来说也没…

【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:为什么Java代码可以实现…

uniapp(uncloud) 使用生态开发接口详情(1简单的创建)

开发接口对比时间: 用java开发接口周期太长, 大概5-6个月左右 用php 开发接口周期同样太长, 大概3-4个月左右 用node.js 开发接口周期相对短一点, 大概1-2个月左右 用uniapp 开发接口, 可以不到 1-2周的时间 这里我使用 uniapp 开发接口, 废话不多说了,直接开干 HBuilder官网(…

头像Css

现有如下的图标,他这外层的白色圆圈是border,你敢信 .top-bar__img {margin: 0 8px 0 5px;padding: 2px;width: 30px;height: 30px;border-radius: 100%;box-sizing: border-box;border: 1px solid #eee;vertical-align: middle; }

《软件方法》2023版第1章(08)使用UML的理由,挑破乱七八糟图的脓包

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.3 UML 1.3.2 使用UML的理由 在开发团队中,不乏刻意排斥UML的人。这些人如果只是不使用UML,改为使用其他标准的图形表示法(如BPMN)&a…

城市综合管廊运维的系统集成方案

摘 要:从网络拓扑结构、开放式实时以太网协议、控制层系统配置方面介绍了综合管廊的系统网络架构设计,分析了无线网络特性,阐述了基于HTML5架构所能实现的功能的初步构想,以便于综合管廊运维人员巡检,确保管廊本体安全…

NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程(超详细)

NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程 文章目录 NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程前言Serial Plotter测试前期准备打开工具方法 1方法 2 测试代码 总结 前言 在嵌入式的开发过程中,我们经常会采集一些传感器的数据&#xff0c…

MVCC与BufferPool缓存机制

MVCC多版本并发控制机制 Mysql在可重复读隔离级别下如何保证事务较高的隔离性,我们上节课给大家演示过,同样的sql查询语句在一个事务里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果。 这个隔离性就是…

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

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

wifi指纹室内定位系统 计算机竞赛

简介 今天来介绍一下室内定位相关的原理以及实现方法; WIFI全称WirelessFidelity,在中文里又称作“行动热点”,是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关&#xff…

MBR10100CT-ASEMI肖特基二极管MBR10100CT

编辑:ll MBR10100CT-ASEMI肖特基二极管MBR10100CT 型号:MBR10100CT 品牌:ASEMI 芯片个数:2 封装:TO-220 恢复时间:>50ns 工作温度:-65C~175C 浪涌电流:150A 正向…