UI自动化-(web端窗口截图文件上传-实操入门)

1、窗口截图

1. UI自动化中,为什么需要进行窗口截图?

  1. 调试和故障排除:截图可以直观地查看界面的状态,快速识别和解决问题。当自动化过程中出现错误或异常时,通过查看截图可以确定是否是界面元素的问题,例如元素未找到、位置不正确等。
  2. 记录测试结果:截图可以作为测试结果的一部分,用于记录特定时间点界面的样子。这对于测试报告和文档非常有用,可以提供可视化的证据,证明测试过程中界面的显示是否正确。
  3. 验证界面布局和样式:在某些情况下,自动化测试需要验证界面的布局、样式或特定元素的显示是否符合预期。通过截图,可以比较实际显示与预期的样子,确保界面的正确性和一致性。
  4. 与其他人沟通和协作:截图可以方便地与团队成员、产品经理或其他相关人员共享和交流。通过展示截图,可以更好地理解问题或测试结果,促进协作和问题的解决。
  5. 自动化文档生成:有些自动化框架或工具可以自动将截图与测试用例或报告相关联,生成更详细和直观的文档。这有助于维护和更新测试资产,并提供给其他人参考。

2. 应用举例

  • 当程序运行出错时,通过截图文件能够更直观的知道具体是哪个操作步骤出错 。
    截图方法:  driver.get_screenshot_as_file(filename)
    • 截图的文件名必须是以png结尾
    • filename中的文件目录需要手动创建
  • 示例方法
    • 定义截图保存的路径 screenshot_path。
    • 启动 WebDriver 并打开要操作的网页。
    • 在 try/except 代码块中,编写可能会引发错误的操作代码。
    • 如果在执行操作过程中发生错误,将记录错误信息,并使用 driver.get_screenshot_as_file 方法截图并保存到指定路径。截图的文件名根据当前时间生成,并以 .png 结尾。

代码示例:

from selenium import webdriver
import time# 定义截图保存的路径
screenshot_path = "yourScreenshotDirectory/"# 启动 WebDriver
driver = webdriver.Chrome()# 打开要操作的网页
driver.get("https://example.com")# 执行操作步骤...try:# 编写业务代码print("业务代码")# 编写可能会引发错误的操作print("可能会引发错误的操作")
except Exception as e:# 记录错误信息print(f"发生错误:{e}")# 截图并保存到指定位置screenshot_filename = f"error_{time.strftime('%Y%m%d_%H%M%S')}.png"driver.get_screenshot_as_file(screenshot_path + screenshot_filename)# 关闭 WebDriverdriver.quit()

在上述代码示例中,首先定义了截图保存的路径 screenshot_path。然后,启动 WebDriver 并打开要操作的网页。在 try/except 代码块中,编写可能会引发错误的操作代码。

如果在执行操作过程中发生错误,将记录错误信息,并使用 driver.get_screenshot_as_file 方法截图并保存到指定路径。截图的文件名根据当前时间生成,并以 .png 结尾。

2、文件上传

1. 在 UI 自动化中进行文件上传的场景:

  1. 功能测试:许多 Web 应用程序都提供了文件上传的功能,例如上传图片、文档、音频或视频等。通过自动化文件上传,可以确保该功能正常工作,包括文件的选择、上传过程和上传后的处理。
  2. 数据验证:上传的文件可能需要满足一定的格式、大小或其他限制条件。自动化上传可以帮助验证这些限制,确保上传的文件符合预期的要求。
  3. 回归测试:在应用程序的开发过程中,文件上传功能可能会受到修改或更新。通过自动化测试,可以在每次迭代中快速验证文件上传是否仍然正常工作,以确保没有引入新的问题。
  4. 提高测试效率:手动执行文件上传操作可能会很耗时,尤其是在需要上传大量文件或在多个不同的环境中进行测试时。自动化上传可以大大提高测试的效率和重复性。
  5. 集成测试:如果文件上传是与其他功能或系统集成的一部分,自动化上传可以确保整个集成过程的顺畅性和正确性。

2. 应用举例

在 Web 端实现 UI 自动化的文件上传

  1. 选择自动化工具:选择适合的自动化测试工具,例如 Selenium。
  2. 定位上传元素:使用选择器(如 XPath、CSS 选择器或 ID)找到文件上传的输入元素。
  3. 设置文件上传路径:将需要上传的文件路径传递给自动化工具。
  4. 执行上传操作:使用自动化工具提供的方法来模拟文件上传的操作。

示例:

  • 启动 WebDriver 并打开上传页面。
  • 通过 class属性 定位到文件上传的元素,并将文件路径设置为要上传的文件。
  • 使用 send_keys 方法模拟文件上传的操作。

代码示例:

# 导包
import time
from selenium import webdriver# 实例化浏览器驱动
driver = webdriver.Chrome()
driver.maximize_window()# 打开baidu网站
driver.get("https://www.baidu.com")# 定位到百度输入框中的"按图片搜索"按钮
time.sleep(3)
element = driver.find_element_by_css_selector(".soutu-btn")# 点击"按图片搜索"按钮,进入图片上传页面
element.click()# 定位到"选择文件"元素位置
upload_element = driver.find_element_by_css_selector(".upload-pic")# 设置文件上传路径
file_path = "/Users/example/Desktop/image.jpg"  # 替换为实际的文件路径# 执行文件上传
upload_element.send_keys(file_path)# 等待3S
time.sleep(3)# 退出浏览器驱动
driver.quit()

在上述代码示例中,首先打开浏览器并访问上传页面。然后,通过CSS 定位到文件上传输入框,并使用 send_keys() 方法将文件路径传递给输入框,触发了上传文件操作。

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

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

相关文章

C++ opencv 学习

文章目录 1、创建窗口2、读取图片3、视频采集4、Mat的使用5、异或操作6、通道分离,通道合并7、色彩空间转换8、最大值、最小值9、绘制图像10、多边形绘制11、随机数12、鼠标实时绘制矩形13、归一化14、resize操作15、旋转翻转16、视频操作17、模糊操作18、高斯模糊操…

SpringBoot整合MyBatis实现增删改查

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容: SpringBoot整合MyBatis实现增删改查 📚个人知识库: Leo知识库,欢迎大家访…

mysql之 case when

1 简单 case 函数,IF函数 格式: CASE input_expression WHEN when_expression THENresult_expression [...n ] [ ELSEelse_result_expression ENDIF(条件,True结果,False结果)2 条件表达式 可嵌套多层,类似于 if … else if … else … end…

Java进阶-IO(1)

进入java IO部分的学习,首先学习IO基础,内容如下。需要了解流的概念、分类还有其他一些如集合与文件的转换,字符编码问题等,这次先学到字节流的读写数据,剩余下次学完。 一、IO基础 1、背景 1.1 数据存储问题 变量…

代码随想录day11(1)字符串:反转字符串中的单词 (leetcode151)

题目要求:给定一个字符串,将其中单词顺序反转,且每个单词之间有且仅有一个空格。 思路:因为本题没有限制空间复杂度,所以首先想到的是用split直接分割单词,然后将单词倒叙相加。 但如果想让空间复杂度为O…

芯来科技发布最新NI系列内核,NI900矢量宽度可达512/1024位

参考:芯来科技发布最新NI系列内核,NI900矢量宽度可达512/1024位 (qq.com) 本土RISC-V CPU IP领军企业——芯来科技正式发布首款针对人工智能应用的专用处理器产品线Nuclei Intelligence(NI)系列,以及NI系列的第一款AI专用RISC-V处理器CPU IP…

反向迭代器

反向迭代器 以list为例,我们完全可以再添加一个__list_reverse_iterator结构体,只需要修改和–的逻辑 template <class T, class Ref, class Ptr> struct __list_reverse_iterator {...self& operator(){_node _node->_prev;return *this;}self operator(int){…

Android 14.0 Launcher3定制化之桌面分页横线改成圆点显示功能实现

1.前言 在14.0的系统rom产品定制化开发中&#xff0c;在进行launcher3的定制化中&#xff0c;在双层改为单层的开发中&#xff0c;在原生的分页 是横线&#xff0c;而为了美观就采用了系统原来的另外一种分页方式&#xff0c;就是圆点比较美观&#xff0c;接下来就来分析下相关…

网络爬虫部分应掌握的重要知识点

目录 一、预备知识1、Web基本工作原理2、网络爬虫的Robots协议 二、爬取网页1、请求服务器并获取网页2、查看服务器端响应的状态码3、输出网页内容 三、使用BeautifulSoup定位网页元素1、首先需要导入BeautifulSoup库2、使用find/find_all函数查找所需的标签元素 四、获取元素的…

基于springboot+vue的健身房管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

●139.单词拆分 ● 关于多重背包,你该了解这些! ●背包问题总结篇!

●139.单词拆分 物品&#xff1a;wordDict里面的单词&#xff1b;背包容量&#xff1a;s.size()。 1.dp[j]含义。dp[j]true表示字符串前j个可以拆分成字典中的单词。dp[s.size()] 就是最后的结果&#xff0c;整个字符串能&#xff08;true&#xff09;不能&#xff08;false…

Docker 创建容器并指定时区

目录 1. 通过环境变量设置时区&#xff08;推荐&#xff09;2. 挂载宿主机的时区文件到容器中3. 总结 要在 Docker 容器中指定时区&#xff0c;可以通过两种方式来实现&#xff1a; 1. 通过环境变量设置时区&#xff08;推荐&#xff09; 在 Docker 运行时&#xff0c;可以通…

NumPy数据处理详解的笔记1

NumPy数据处理详解的笔记1 第1章NumPy基础 NumPy是用于处理多维数组的数值运算库&#xff0c;不仅可用于 机器学习&#xff0c;还可以用于图像处理&#xff0c;语言处理等任务。 1.1 NumPy的基础与安装方法 1.1.1 NumPy入门 NumPy是Python中进行科学计算所必备的基础软件库…

CentOS安装Docker(黑马学习笔记)

Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上…

文件底层的理解之缓冲区

目录 一、缓冲区的初步认识 二、向文件中写数据的具体过程 三、缓冲区刷新的时机 一、缓冲区的初步认识 缓冲区其实就是一块内存区域&#xff0c;采用空间来换时间&#xff0c;可以提高使用者的效率。我们一直说的缓冲区其实是语言层面上的缓冲区&#xff0c;其实操作系统内部…

JVM 第一部分 JVM两种解释器 类加载过程和类加载器

JVM是跨平台跨语言的虚拟机&#xff0c;不直接接触硬件&#xff0c;位于操作系统的上一层 跟字节码文件直接关联&#xff0c;和语言没有关系 一次编译成字节码文件&#xff0c;多次执行 虚拟机可以分成三部分&#xff1a;类加载器&#xff0c;运行时数据区&#xff0c;执行引…

TDengine 在 DISTRIBUTECH 分享输配电数据管理实践

2 月 27-29 日&#xff0c;2024 美国国际输配电电网及公共事业展&#xff08;DISTRIBUTECH International 2024&#xff09;在美国-佛罗里达州-奥兰多国家会展中心举办。作为全球领先的年度输配电行业盛会&#xff0c;也是美洲地区首屈一指的专业展览会&#xff0c;该展会的举办…

C++从零开始的打怪升级之路(day41)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于继承的知识点 1.派生类的默认成员函数 首先我…

【和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告

【&#x1f40b;和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告 文章目录 【&#x1f40b;和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告1 业务背景2 数据说明3 数据探索性分析4 用户行为分析4.1 用户属性与行为关系分析4.2 转化行为在不同用户属性群体中的分布…

值类型和引用类型详解(C#)

可能你对值类型和引用类型还不太了解。 值类型和引用类型&#xff0c;是c#比较基础&#xff0c;也必须掌握的知识点&#xff0c;但是也不是那么轻易就能掌握&#xff0c;今天跟着我一起来看看吧。 典型类型 首先我们看看这两种不同的类型有哪些比较典型的代表。 典型值类型…