UI自动化测试 —— web端元素获取元素等待实践!

前言

Web UI自动化测试是一种软件测试方法,通过模拟用户行为,自动执行Web界面的各种操作,并验证操作结果是否符合预期,从而提高测试效率和准确性。

目的:

  1. 确保Web应用程序的界面在不同环境(如不同浏览器、操作系统)下都能正常工作。

  2. 验证应用程序的功能是否符合需求规格说明书。

  3. 提高测试效率,减少重复劳动。

  4. 提前发现潜在的缺陷,降低修复成本。

这里分享web端元素获取&元素等待

图片

01、元素获取

为什么要学习获取元素信息的方法

主要为了获取相关的信息进行断言,判断自动化用例最终的执行结果。

获取元素常用的方法:

  • size 获取元素的大小 返回的是一个字典,里面包含 元素高度和宽度的值

  • text 获取元素的文本内容

  • get_attribute("attribute") 获取元素对应属性名称的属性值 , attribute表示的是属性名

  • is_displayed() 判断元素是否可见 返回值为true或者false

  • is_enabled() 判断元素是否可用,返回值为true或者false

  • is_selected() 判断复选框或者单选框是否被选中,返回值为true或者false

示例代码:

# 导包import timefrom selenium import webdriverfrom selenium.webdriver.common.by import By # 实例化浏览器驱动driver = webdriver.Chrome() # 打开百度网站driver.get("https://www.baidu.com") # 最大化浏览器窗口time.sleep(3)driver.maximize_window() # 获取百度输入框的大小size = driver.find_element(By.CLASS_NAME, "s_ipt").sizeprint(size) # 获取超链接"hao123网站"的文本内容text = driver.find_element_by_link_text("hao123").textprint(text) # 获取超链接"hao123网站"的地址address = driver.find_element(By.LINK_TEXT, "hao123").get_attribute("href")print(address) # 判断文库超链接是否可见,默认是Falseresult = driver.find_element(By.XPATH, "//*[@class ='s-bri c-font-normal c-color-t'] ").is_displayed()print("文库超链接可见:", result) # 判端百度一下按钮是否可用,默认是Falseresult = driver.find_element(By.ID, "su").is_enabled()print("'百度一下'按钮可用", result) # 点击页面右上角【登录】按钮,进入登录页面driver.find_element(By.ID, "s-top-loginbtn").click() # 注意需要等待几秒等待元素出现,否则会报错time.sleep(5) # 判断页面中"阅读并接受"前的复选框是否选中result = driver.find_element_by_css_selector(".pass-checkbox-input").is_selected()print("页面中'阅读并接受'前的复选框已选中", result) # 等待3Stime.sleep(3) # 关闭浏览器窗口driver.quit()

图片

02 元素等待

元素等待是指在自动化测试过程中,为了等待某个元素出现或者满足某种条件而暂停脚本执行的一种技术。在定位页面元素时,如果没有找到该元素,会在指定时间内一直等待的过程。以下是常用的三种元素等待类型:

  • 隐式等待:在一段时间内检查网页是否加载完成,如果加载完成,则进行下一步操作;如果在设置的时间内没有加载完成,则会报超时加载。

  • 显式等待:在指定的时间内等待某个特定元素的出现,如果该元素在指定时间内出现,则立即执行相应的操作;如果超过等待时间元素仍未出现,则抛出异常。

  • 强制等待:使用time.sleep()方法,使程序在指定的时间内暂停执行。但如果等待时间设置过短,元素可能还未加载完成,程序会报错;如果等待时间设置过长,会浪费时间,降低代码整体的运行效率。

2.1. 隐式等待

概念:在查找元素时自动等待一定的时间,以确保元素已经加载完成。如果在定位过程中找到了元素,直接返回该元素,继续后面的操作,如果超过了指定时间,就会抛出 NoSuchElementException 异常。

隐式等待实现方式:

driver.implicitlty_wait(timeout) # timeout表示的是最长的等待时间 单位为S

隐式等待的优点是简单易用,只需要设置一次,对所有的元素定位的方法都是有效的,不需要明确指定等待某个特定元素的出现。它适用于大多数情况,但在某些复杂的网页结构或网络延迟较高的情况下,可能需要使用显式等待来更精确地控制等待时间。

代码示例:

# 导包import timefrom selenium import  webdriverfrom selenium.webdriver.common.by import By # 实例化浏览器驱动driver = webdriver.Chrome() # 设置隐式等待时间为5秒driver.implicitly_wait(5) # 打开要百度网站driver.get("https://www.baidu.com") # 点击右上角"设置",点击"搜索设置"driver.find_element(By.ID, 's-usersetting-top').click()driver.find_element_by_link_text("搜索设置").click() # 注意下面这段代码,如果设置等待时间为0就会报错# 判断"全部语言"单选框是否被选中driver.find_element_by_css_selector("[for = 'SL_0']").is_selected() # 等待3Stime.sleep(3) # 退出浏览器驱动driver.quit()

2.2. 显示等待

概念:显示等待是指在执行某个操作之前,等待特定条件的满足。例如定位指定元素时,如果能找到该元素,那么就直接返回该元素,如果找不到,那么每隔指定的时间再去定位该元素,如果超出最长等待时间,那么就抛出TimeOutException。

其工作原理如下:

  1. 设置等待时间和条件:指定一个等待时间和一个条件,在规定时间内,每隔一段固定时间查看下条件是否成立。

  2. 检查条件是否成立:如果条件在等待时间内成立,程序将继续执行;否则,将提示一个超时异常。

显示等待的实现:

导入WebDriverWait等待类

WebDriverWait(driver, timeout, poll_frequency=0.5).until(lambda x:x.find_element(By.ID, "userA"))

  • driver 指的是浏览器驱动对象

  • timeout 表示的是最长等待时间

  • poll_frequency 表示的是检测的间隔时间,默认是0.5

  • until until方法跟上匿名函数来实现元素定位。

代码示例:

# 导包import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.wait import WebDriverWait # 实例化浏览器驱动driver = webdriver.Chrome()driver.maximize_window() # 打开测试网站driver.get("https://www.baidu.com") # 点击右上角"设置"driver.find_element(By.ID, 's-usersetting-top').click() # 点击"搜索设置"driver.find_element_by_link_text("搜索设置").click() # 显示等待判断"全部语言"单选框是否被选中# element = driver.find_element(By.CSS_SELECTOR, "[for = 'SL_0']").is_selected() 注意如果用这行代码代替下面一行代码,会报错element = WebDriverWait(driver, 5, 0.5).until(lambda x: x.find_element(By.CSS_SELECTOR, "[for = 'SL_0']"))result = element.is_selected()print("'全部语言'单选框被选中:", result) # 等待3Stime.sleep(3) # 退出浏览器驱动driver.quit()

2.3. 强制等待

强制等待就是让代码休眠,不做任何的操作

time.sleep(time) time单位为S

常用的场景:

在 UI 自动化中,一般在以下情况下可能需要使用强制等待:

  • 网络延迟或加载缓慢:当网络连接较慢或页面加载时间较长时,元素可能需要一些时间才能完全显示或可用。在这种情况下,强制等待可以给系统一些时间来完成加载。

  • 不稳定的环境或外部因素:如果自动化测试在不稳定的环境中运行,例如网络连接不稳定或系统资源有限,强制等待可以提供一定的容错性,以确保操作有足够的时间完成。

  • 已知的固定时间延迟(某些操作可能具有已知的固定时间延迟):

  1. 例如在提交表单后等待服务器响应。在这种情况下,使用强制等待可以模拟这种延迟。

  2. 当要获取元素的文本内容时,而元素的文本内容是需要通过后台接口请求并渲染的,此时,如果使用隐式等待或显示等待是没有办法获取到文本内容,所以需要使用强制等待。

  3. 当要操作的元素已经存在,但是有其他的元素需要等待且与该操作的元素有业务关联,如果使用隐式等待或显示等待对该元素进行操作的话,是没有办法进行的,也需要使用强制等待。

代码示例(此代码仅为演示代码,场景需根据实际场景进行判断):

# 导包import timefrom selenium import webdriverfrom selenium.webdriver.common.by import By # 实例化浏览器驱动driver = webdriver.Chrome()driver.maximize_window() # 打开测试网站driver.get("https://www.baidu.com") # 通过name定位到输入框并输入"新闻"time.sleep(2)element = driver.find_element(By.NAME, 'wd')element.send_keys("新闻") # 点击"百度一下"按钮:element = driver.find_element(By.ID, 'su')element.click()time.sleep(3) # 退出浏览器,释放资源driver.quit()

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51878.shtml

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

相关文章

【前缀和算法】--- 进阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 本篇我们来赏析前缀和算法的进阶题目。 🏠 和可被K整除的子数组 📌 题目解析 和可被k整除的子数组 📌 …

记一次ssh伪终端修改为shell

问题 用户ssh进行连接后,默认为伪终端。 解决办法,可以先拿到终端shell,查看用户是否为/bin/bash: 不是/bin/bash,使用如下命令进行修改: chsh -s /bin/bash rootservice sshd restart

量化投资策略与技术学习PART1.1:量化选股之再谈多因子模型(二)

在上一个多因子模型中,我手动对各个因子进行了回测,但是数据结果并不是十分理想,难道基本面指标真的和股票走势关系不大么? 这里我还是准备再测试一下,策略如下: (1)首先我获取了一下…

codeforces Round 970 (Div. 3)(A-F)

文章目录 [Codeforces Round 970 (Div. 3)](https://codeforces.com/contest/2008)A-[Sakurakos Exam](https://codeforces.com/contest/2008/problem/A)B-[Square or Not](https://codeforces.com/contest/2008/problem/B)C-[Longest Good Array](https://codeforces.com/cont…

Ubuntu上安装配置(jdk/tomcat/ufw防火墙/mysql)+mysql卸载

jdk安装 1.上传jdk压缩包 详情: 下载rz服务(lrzsz):sudo apt install lrzsz(在主用户root就不用sudo)下载压缩包:rz 2.解压jdk压缩包 : 详情: 在压缩包所在位置(解压压缩使用看Li…

测试人如何高效地设计自动化测试框架?

关于测试框架的好处,比如快速回归提高测试效率,提高测试覆盖率等这里就不讨论了。这里主要讨论自动化框架包含哪些内容,以及如何去设计一个测试框架。 什么是自动化测试框架? 它是由一个或多个自动化测试基础模块、自动化测试管…

Qt22双缓冲机制

Qt22双缓冲机制 知识点drawwidgetdrawwidget.hdrawwidget.cpp mainwindowmainwindow.hmainwindow.cpp main.cpp运行图 知识点 双缓冲就是在内存区申请一块缓存;然后显卡直接从这块内存读取数据.。 这样就不用鼠标边画,经过IO来读取这个环节;…

EasyExcel实现复杂Excel的导入

最近项目中遇到一个复杂的Excel的导入,并且数据量较大。因为数据不规则,所以只能使用POI进行自定义读取,但是发现数据量大之后,读取数据非常耗时。后面换成EasyExcel,性能起飞。 1. Excel样板 如上图,需要…

【C++】汇编分析,函数是如何调用,传参,返回

传参 有的是用寄存器传参,有的用push传参 我在MSVC编译测出来的是PUSH传参(debug模式),具体过程如下 long func(long a, long b, long c, long d,long e, long f, long g, long h) {long sum;sum (a b c d e f g h);ret…

VMware安装windows虚拟机详细过程

目录 准备工作配置虚拟机为虚拟机设置操作系统镜像安装windows10 准备工作 安装好VMware软件并激活,激活码自行查找 准备好系统镜像文件,可以在MSDN中下载,地址:https://next.itellyou.cn/ 配置虚拟机 选择自定义 默认 选择稍后…

骨灵冷火!Solon Cloud Gateway 照面发布

骨灵冷火,是练药的好火哟。极冷,又极热。在冰冻中被烧死:) 1、认识 Solon Cloud Gateway Solon Cloud Gateway 是基于 Solon Cloud、Vert.X 和 Solon Rx(reactive-streams) 接口实现。小特点: 纯响应式的接口体验流…

[Linux]:基本指令(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 与Windows环境不同,我们在linux环境下需要通过指令进行各操作&…

13.DataLoader 的使用

DataLoader 的使用 dataset:告诉程序中数据集的位置,数据集中索引,数据集中有多少数据(想象成一叠扑克牌)dataloader:加载器,将数据加载到神经网络中,每次从dataset中取数据&#x…

Zynq7000系列FPGA中的DDRC纠错码(ECC)

仅在半总线宽度(16位)数据宽度配置中提供可选的ECC支持。这种配置下,外部DRAM DDR设备需要26位,其中16位用于数据,10位用于ECC。每个数据字节使用独立的5位ECC字段,这种模式提供了单错误纠正和双错误检测的…

UE5蓝图 抽卡出货概率

SSR概率0.1 SR概率0.2 R概率0.7 ps:数组内相加为1。且从小到大排序。

C练手题--Two Oldest Ages 【7 kyu】

一、原题 链接:Training on Two Oldest Ages | Codewars The two oldest ages function/method needs to be completed. It should take an array of numbers as its argument and return the two highest numbers within the array. The returned value should b…

网络-多路io

了 fcntl 函数来操作文件描述符的状态标志,其中主要是为了设置非阻塞模式。下面是对 fcntl 函数及其参数的详细解释: fcntl 函数 fcntl 是一个用于操作文件描述符的系统调用,可以用来设置或获取文件描述符的各种属性。其原型如下&#xff1…

Ubuntu Linux Server安装Kubernetes

本文主要描述在Ubuntu Linux Server操作系统中安装Kubernetes云原生对应的microk8s组件。 sudo snap install microk8s --classic 如上所示,在Ubuntu服务器中安装microk8s组件完成,对应的版本是microk8s v1.30版本 microk8s enable dashboard 如上所…

华为云征文|基于Flexus云服务器X实例的应用场景-定时给微信群中推送新闻简报

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 先看这里 写在前面效果华为云Flexus X实例服务器部署开源的热点新闻项目ssh连接服务器docker部署今日热点项目访问今日热点项目 搭建微信交互工具获取token创建发送的公共方法…

【Spring】获取cookie,session,header(3)

本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 目录 本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。…