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

news2024/11/24 11:02:27

前言

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.coloradmin.cn/o/2101121.html

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

相关文章

注册登陆(最新版)

整体概述 本项目中,使用数据库连接池实现服务器访问数据库的功能,使用POST请求完成注册和登录的校验工作。 本文内容 本篇将介绍同步实现注册登录功能,具体的涉及到流程图,载入数据库表,提取用户名和密码&#xff0…

AquaCrop模型数据制备、优化方法、敏感性与气候变化影响分析及源码解析

AquaCrop是由世界粮食及农业组织(FAO)开发的一个先进模型,旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理,特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不…

PySide6复杂C/S系统开发

PySide6复杂C/S系统开发 目录 0.了解 1.前提 2.实际代码(继承QGraphicsview修改) 0.了解 之前写了一篇“PySimpleGUI复杂C/S系统开发”博客(由于pysimplegui更改了协议,因此不再推荐,用了pyside6后yyds&#xff09…

Transiting from CUDA to HIP (二)

一、Identifying Architecture Features 1. HIP_ARCH Defines 在 CUDA 编程中,__CUDA_ARCH__ 是一个预定义的宏,用于指示当前编译的代码所针对的 NVIDIA GPU 的计算能力(Compute Capability)。开发者可以使用这个宏来编写条件代…

Xinstall助力App推广:全方位支持,精准数据分析,你值得拥有

在如今的移动互联网时代,App推广已成为每个应用开发者必须面对的重要课题。然而,推广过程中往往伴随着诸多痛点,如数据混乱、投放盲目、决策滞后以及作弊困扰等。这些问题不仅影响了推广效果,还可能导致资源的浪费和投入产出不均衡…

数据安全认证来了解一下

随着数据安全法及个人信息保护法的实施,数据安全相关岗位在安全行业变得极为热门。 根据数据安全法第二十条,国家鼓励教育、科研机构和企业等开展数据开发利用技术和数据安全相关的教育和培训,采用多种途径培育专业人才,促进人才…

【Linux】使用Linux实现小程序 - 进度条

目录 一、缓冲区二、回车换行的概念三、进度条的设计3.1 版本1(没有配合场景)3.2 版本2(配合场景)3.3 版本3(美化进度条) 结尾 一、缓冲区 C/C语言,会针对标准输出,给我们提供默认的…

c++----杨辉三角(补充)

大家好。今天我给大家带来的是,我们以前讨论过的知识点。杨辉三角。我相信大家在c的学习中已经清楚的了解和认识到了杨辉三角的实现逻辑和实现方法了。但是应该大多局限于在c中吧。我们都知道我们c与c其实在一些地方是可以相互成就的。那么我们在c中的经典题目杨辉三…

自定义实现log4j的appender

log4j,应用最广泛的日志框架。其作者后来推出logback,也是好选择。不多说废话。 log4j组件介绍 Log4j主要有三个组件: Logger:负责供客户端代码调用,执行debug(Object msg)、info(Object msg)、warn(Object msg)、err…

oracle----undo表空间

文章目录 undo表空间概念和作用undo表空间主要用于解决:1.1 读一致性1.2 回滚事务1.3 实例恢复 undo表空间操作查看UNDO表空间查看UNDO 参数查看undo表空间文件位置 undo表空间概念和作用 对于DML语句,只要修改了数据块,数据库就会把修改前的…

使用Amazon SageMaker JumpStart微调Meta Llama 3.1模型以进行生成式AI推理

文章目录 使用Amazon SageMaker JumpStart微调Meta Llama 3.1模型以进行生成式AI推理Meta Llama 3.1SageMaker JumpStartSageMaker JumpStart中Meta Llama 3.1模型的微调配置使用SageMaker JumpStart UI进行无代码微调使用SageMaker JumpStart SDK进行微调结论 使用Amazon Sage…

电商数据整合新篇章:京东商品详情API返回值应用实践

电商数据整合在当今商业环境中具有重要地位,API(应用程序编程接口)提供了高效收集、整合和分析数据的途径。以京东商品详情API为例,通过其返回值,电商企业可以构建更精准的营销策略、优化产品以及提升用户体验。以下是…

实例分割【YOLOv8版】

参考文档 Segment - Ultralytics YOLO Docs​docs.ultralytics.com/tasks/segment/ 何为实例分割? 实例分割比目标检测更进一步,涉及识别图像中的各个对象并将它们与图像的其余部分分割开来。 实例分割模型的输出是一组用于勾勒图像中每个对象的掩码…

回溯法-图的m着色问题

图的 m 着色问题 问题描述 给定一个无向连通图 ( G (V, E) ) 和 ( m ) 种颜色,我们的任务是为图 ( G ) 的每个顶点着色,使得相邻的顶点颜色不同。如果存在这样的着色方案,我们称之为图 ( G ) 的 ( m ) 可着色问题。 算法思路 初始化&…

Sentence-BERT实现文本匹配【回归目标函数】

引言 上篇文章我们通过Sentence-Bert提出的分类目标函数来训练句子嵌入模型,本文同样基于Sentence-Bert的架构,但改用回归目标函数。 架构 如上图,计算两个句嵌入 u \pmb u u和 v \pmb v v​之间的余弦相似度,然后可以使用均方误…

如何通过住宅代理优化SERP表现:提升SEO排名的实用指南

引言 什么是SERP?包含哪些内容? 为什么SERP对SEO至关重要? 如何优化SERP表现? 总结 引言 在当今竞争激烈的数字营销环境中,搜索引擎优化(SEO)已成为企业提升在线可见性和吸引有机流量的关键…

matlab2024a/2023/2022/2020/matlab2019 如何plot画局部放大图(已解决)

matlab 2024;matlab 2023;matlab 2022;matlab 2021;matlab 2020;matlab 2019 matlab 2017一下的 使用magnify.m 进行局部放大图操作是没有问题的。 新版本 采用magnify.m 很难操作。 为什么要局部放大 局部方…

【王树森】Few-Shot Learning (3/3):Pretraining + Fine Tuning(个人向笔记)

Preliminary Few-Shot Learning 很简单,但是却能达到比较高的准确度,相反一些复杂的模型反而不能达到很高的准确率 1. Cosine Similarity 余弦相似度可以衡量两个向量的相似度 假设两个向量的长度都是1:那么它们余弦相似度的计算方法如下…

HarmonyOS开发实战( Beta5版)线程间通信场景最佳实践

简介 在应用开发中,经常会需要处理一些耗时的任务,如果全部放在主线程中执行就会导致阻塞,从而引起卡顿或者掉帧现象,降低用户体验,此时就可以将这些耗时操作放到子线程中处理。通常情况下,子线程可以独立…

bcftools报错|The sequence “chr1“ not defined in the header: chr1.recode.vcf

1、报错信息 The sequence "chr1" not defined in the header: chr1.recode.vcf (Quick workaround: index the file.) 所使用的命令,目的是想合并所提取的特定染色体。 bcftools concat -O v / -o varscan.indel_merged.vcf chr1.recode.vcf chr2.reco…