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.rhkb.cn/news/453362.html

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

相关文章

设计模式和软件框架的关系

设计模式和软件框架在软件开发中都有助于解决复杂问题和提高代码质量,但它们在概念和使用上存在一些区别。它们的关系可以通过以下几点理解: 层次与抽象程度 设计模式(Design Patterns)是一组通用的、可复用的解决方案&#xff0c…

完爆YOLOv10!Transformer+目标检测新算法性能无敌,狠狠拿捏CV顶会!

百度最近又搞了波大的,推出了一种全新的实时端到端目标检测算法RT-DETRv3,性能&耗时完爆YOLOv10。 RT-DETRv3基于Transformer设计,属于代表模型DETR的魔改进化版。这类目标检测模型都有着强大的扩展性与通用性,因为Transform…

MySQL—CRUD—进阶—(二) (ಥ_ಥ)

文本目录: ❄️一、新增: ❄️二、查询: 1、聚合查询: 1)、聚合函数: 2)、GROUP BY子句: 3)、HAVING 子句: 2、联合查询: 1)、内连接…

基于FPGA的以太网设计(五)

之前简单介绍并实现了ARP协议,今天简单介绍一下IP协议和ICMP协议。 1.IP协议 IP协议即Internet Protocol,是网络层的协议。 IP协议是TCP/IP协议族的核心协议,其主要包含两个方面: IP头部信息。IP头部信息出现在每个IP数据报中…

第13篇:无线与移动网络安全

目录 引言 13.1 无线网络的安全威胁 13.2 无线局域网的安全协议 13.3 移动通信中的安全机制 13.4 蓝牙和其他无线技术的安全问题 13.5 无线网络安全的最佳实践 13.6 总结 第13篇:无线与移动网络安全 引言 无线和移动网络的发展为我们的生活带来了极大的便利…

边缘计算与联邦学习:探索隐私保护和高效数据处理的结合

个人主页:chian-ocean 文章专栏 边缘计算与联邦学习:探索隐私保护和高效数据处理的结合 1. 引言 随着物联网(IoT)设备的普及,网络边缘产生了大量数据。将这些数据上传至云端进行集中式计算和处理,既有隐私泄露的风险&#xff…

15分钟学Go 实战项目一:命令行工具

实战项目一:命令行工具 1. 引言 命令行工具是开发者常用的工具之一,它可以帮助用户通过命令行界面对程序进行控制和交互。在这节中,我们将创建一个简单的命令行工具,以帮助你理解Go语言的基本语法和如何处理命令行输入。在这个过…

详解安卓和IOS的唤起APP的机制,包括第三方平台的唤起方法比如微信

网页唤起APP是一种常见的跨平台交互方式,它允许用户从网页直接跳转到移动应用程序。 这种技术广泛应用于各种场景,比如让用户在浏览器中点击链接后直接打开某个应用,或者从网页引导用户下载安装应用。实现这一功能主要依赖于URL Scheme、Univ…

ESP32-S3学习笔记:分区表(Partition Table)的二进制分析

一、参考资料 用于研究的官方示例代码:esp-idf-v5.3\examples\storage\partition_api\partition_find参考的官方文档:ESP-IDF编程指南:分区表 二、准备工作 用VS Code打开示例代码,打开示例代码的CSV自定义分区表,如…

大数据实验3: HDFS基础编程

实验3: HDFS基础编程 一、实验目的 HDFS的shell命令使用HDFS的JAVA API使用; 二、实验平台 操作系统:Linux(Ubuntu16.04);Hadoop版本:3.3.1;JDK版本:1.8;…

498.对角线遍历

目录 题目解法代码说明:输出: 如何确定起始点?解释一下max(0,d−m1)是什么意思? 如何遍历对角线?.push_back是怎么用的? 题目 给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序&#xf…

Java知识巩固(七)

目录 面向对象 面向对象三大特征 封装 继承 多态 多态 深拷贝和浅拷贝区别了解吗?什么是引用拷贝? 浅拷贝 深拷贝 面向对象 万物皆为对象,也就是描述某个事物解决问题的过程中所发生的事情。 面向对象三大特征 封装 封装是指把一个对象的状态信息&…

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括:1. **反编译**: 反编译是将已编译的.NET程序集(如.dll或.exe文件)转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…

C++ string(2)

文章目录 1.初识迭代器和范围for1.1迭代器1.2范围for1.3 aout关键字 2.字符串长度相关计算1.size 和 length2. capacity 和 reserve 3.例题演示1. [917. 仅仅反转字母 - 力扣(LeetCode)](https://leetcode.cn/problems/reverse-only-letters/description…

spring day 1021

ok了家人们,这周学习spring框架,我们一起去看看吧 Spring 一.Spring概述 1.1 Spring介绍 官网: https://spring.io/ 广义的 Spring : Spring 技术栈 (全家桶) 广义上的 Spring 泛指以 Spring Framework…

Spring AI 整体介绍_关键组件快速入门_prompt_embedding等

Spring AI:Java开发者的AI集成新利器 在过去,Java开发者在构建AI应用时面临着缺乏统一框架的问题,导致不同AI服务的集成过程复杂且耗时。Spring AI应运而生,旨在为基于Java的应用程序提供一个标准化、高效且易于使用的AI开发平台…

浅说差分算法(下)

我们上节课学了一维的差分,但其实还有二维差分,只是比较难写。 差分 二维差分的定义 二维差分是指对于一个n*m的矩阵a,要求支持操作pro(x1,y1,x2,y2,a),表示对于以(x1,y1)为左上角,(x2,y2)为右下角的矩形区域&#…

生产车间质量管理有什么用?怎么做?

在生产车间的质量管理中,科学有效的管理方法和严格规范的执行流程是至关重要的,它能够帮助企业提高产品质量、降低次品率、确保生产过程的稳定性和效率。然而,许多企业在生产车间质量管理方面存在诸多问题,常常会面临以下困境&…

多微批量自动加好友

在数字化时代,微信不仅是社交通讯的工具,更是一个拥有庞大用户基础的流量平台。对于企业而言,微信是打造私域流量池的理想选择之一。然而,随着微信号的增多,手动添加好友和备注变得既繁琐又耗时。幸运的是,…

UNI VFX Missiles Explosions for Visual Effect Graph

Unity URP和HDRP的通用视觉效果 使用在视觉效果图中制作的高性能GPU粒子系统。 无需进入视觉效果图编辑器即可轻松自定义VFX。 使用(VFX)事件——一个游戏对象可存储多个效果,这些效果可通过C#或视觉脚本触发。 总共32个事件(不包括“停止”事件)。 ❓ 什么是(VFX)事件?…