当前位置: 首页 > news >正文

【自动化测试函数 (上)】Web自动化测试实战精要:定位、操作与窗口管理三部曲

🔥艾莉丝努力练剑:个人主页

专栏传送门:《C语言》《数据结构与算法》C/C++干货分享&学习过程记录Linux操作系统编程详解笔试/面试常见算法:从基础到进阶测试开发要点全知道

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬艾莉丝的简介:


🎬艾莉丝的测试开发博客简介:


目录

1  ~>  元素的定位

1.1  cssSelector

1.2  xpath

1.2.1  获取HTML页面所有的节点

1.2.2  获取HTML页面指定的节点

1.2.3  获取一个节点中的直接子节点

1.2.4  获取一个节点的父节点

1.2.5  实现节点属性的匹配

1.2.6  使用指定索引的方式获取对应的节点内容

2  ~>  操作测试对象

2.1  点击 / 提交对象

2.2  模拟案件发生

2.3  清除文本内容

2.4  获取文本信息

2.5  获取当前页面标题

2.6  获取当前页面URL

3  ~>  窗口

3.1  切换窗口

3.1.1  获取当前页面句柄

3.1.2  获取所有页面句柄

3.1.3  切换当前句柄为最新页面

3.1.4  若页面发生跳转后未打开新的标签页,则不需要进行窗口的切换

3.2  窗口设置大小

3.2.1  窗口的大小设置

3.3  屏幕截图

3.4  关闭窗口

4  ~>  弹窗

4.1  警告弹窗 + 确认弹窗

4.2  提示窗口

结尾



1  ~>  元素的定位

web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。

常见的元素定位方式非常多,如id,classname,tagname,xpath,cssSelector等等:

其中最为常用的主要是cssSelector和xpath。

1.1  cssSelector

选择器的功能:选中页面中指定的标签元素。

选择器的种类分为基础选择器和复合选择器常见的元素定位方式可以通过id选择器和子类选择器来进行定位

id选择器——

定位百度首页的“百度热搜”元素,可以使用通过id选择器和子类选择器进行定位:

#s-hotsearch-wrapper > div
“搜索输入框元素”:#kw
“百度一下按钮”:#su

1.2  xpath

XML路径语言,不仅可以在XML文件中查找信息,还可以在HTML中选取节点。

xpath使用路径表达式来选择xml文档中的节点

xpath语法中——

1.2.1  获取HTML页面所有的节点

//*

1.2.2  获取HTML页面指定的节点

//[指定节点]

//ul:获取HTML页面所有的ul节点
//input:获取HTML页面所有的input节点

1.2.3  获取一个节点中的直接子节点

/

//span/input

1.2.4  获取一个节点的父节点

..

//input/.获取input节点的父节点

1.2.5  实现节点属性的匹配

[@...]

//*[@id='kw']匹配HTML页面中id属性为kw的节点

1.2.6  使用指定索引的方式获取对应的节点内容

注意:xpath的索引是从1开始的。

百度首页通过://div/ul/li[3]定位到第三个百度热搜标签

更便捷的生成selector/xpath的方式:右键选择复制"Copyselector/xpath"

案例:如果想要匹配到百度首页指定的新闻文本或者节点集:直接使用#hotsearch-content-
wrapper>li能够满足吗?

问题:既然可以手动复制selector/xpath的方式,为什么还有了解语法?

手动复制的selector/xpath表达式并不一定满足上面的唯一性的要求,有时候也需要手动的进行修改表达式。

案例:百度首页(需要登陆百度账号)右侧的热搜,复制li标签下的a标签,复制好的selector为:#title-content,xpath为://*[aid="title-content"],同学们可以手动操作一下,手动复制的表达式是否唯一呢?

鼠标直接复制可以解决问题,但是难免后面会需要手动的修改/编写选择器元素、xpath元素,因此我们对选择器和xpath要有定的了解。


2  ~>  操作测试对象

获取到了页面的元素之后,接下来就是要对元素进行操作了。常见的操作有点击、提交、输入、清除、获取文本。

2.1  点击 / 提交对象

click()

#找到百度⼀下按钮并点击 
driver.find_element(By.CSS_SELECTOR, "#su").click()

2.2  模拟案件发生

send_keys("")

driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")

2.3  清除文本内容

输入文本后又想换一个新的关键词,这里就需要用到clear()。

driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,"#kw").clear()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("古⼒娜扎")

2.4  获取文本信息

如果判断获取到的元素对应的文本是否符合预期呢?获取元素对应的文本并打印一下。

获取文本信息:text

text = driver.find_element(By.XPATH,'//*[@id="hotsearch-contentwrapper"]/li[1]/a/span[2]').text
print(f"text:{text}")

问题:是否可以通过text获取到“百度一下按钮”上的文字“百度一下”呢?uu们可以尝试一下!

注意:文本和属性值不要混淆了。

获取属性值需要使用方法:get_attribute("属性名称")。

2.5  获取当前页面标题

title

title = driver.title

2.6  获取当前页面URL

current_url

url = driver.current_url

3  ~>  窗口​​​​​​​

打开一个新的页面之后获取到的title和URL仍然还是前一个页面的?

当我们手工测试的时候,我们可以通过眼睛来判断当前的窗口是什么,但对于程序来说它是不知道当前最新的窗口应该是哪一个。对于程序来说它怎么来识别每一个窗口呢?每个浏览器窗口都有一个唯一的属性句柄(handle)来表示,我们就可以通过句柄来切换。

3.1  切换窗口

3.1.1  获取当前页面句柄

driver.current_window_handle

3.1.2  获取所有页面句柄

driver.window_handles

3.1.3  切换当前句柄为最新页面

curWindow = driver.current_window_handle
allWindows = driver.window_handlesfor window in allWindows:if window != curWindow:driver.switch_to.window(window)

注意:执行了driver.close()之前需要切换到未被关闭的窗口

3.1.4  若页面发生跳转后未打开新的标签页,则不需要进行窗口的切换

3.2  窗口设置大小

3.2.1  窗口的大小设置

#窗⼝最⼤化 
driver.maximize_window()
#窗⼝最⼩化 
driver.minimize_window()
#窗⼝全屏 
driver.fullscreen_window()
#⼿动设置窗⼝⼤⼩ 
driver.set_window_size(1024,768)

仅做了解即可,在自动化脚本执行过程中通常测试人员不关注页面的变化。

3.3  屏幕截图

我们的自动化脚本一般部署在机器上自动的去运行如果出现了报错,我们是不知道的,可以通过抓拍(screenshot)来记录当时的错误场景。

driver.save_screenshot('../images/image.png')

代码演示如下——

#简单版本 
driver.save_screenshot('../images/image.png')
#⾼阶版本 
filename = "autotest-"+datetime.datetime.now().strftime('%Y-%m-%d-
%H%M%S')+'.png'
driver.save_screenshot('../images/'+filename)

3.4  关闭窗口

driver.close()
注意:窗⼝关闭后driver要重新定义


4  ~>  弹窗

弹窗是在页面是找不到任何元素的,这种情况怎么处理?使用selenium提供的Alert接口。

4.1  警告弹窗 + 确认弹窗

alert = driver.switchTo.alert
//确认
alert.accept()
//取消
alert.dismiss()

4.2  提示窗口

alert = driver.switchTo.alert
alert.send_keys("hello")
alert.accept()
alert.dismiss()


结尾

本文的内容到这里就全部结束了,感谢您的阅读!

往期回顾:

【自动化测试:概念】初识自动化测试:从概念理论到上手实践

【测试分类 (下)】测试分类看这篇就够了:彻底告别概念混淆,轻松搞定工作面试

结语:本期我们学习了测试开发/测试内容中的自动化测试常用函数篇,希望对学习测试开发/测试相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡

૮₍ ˶ ˊ ᴥ ˋ˶₎ა

 

http://www.dtcms.com/a/544322.html

相关文章:

  • 超越传统管理:迈向无感衔接、全域协同的医美运营新范式
  • SUB设备电子狗加密狗开发
  • 1.1 神经网络基本组成
  • HarmonyOS 应用开发:Scroll滚动容器的深度性能优化
  • Java支付对接策略模式详细设计
  • 项目实践6—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)
  • 微软重磅发布开源引擎Microsoft Agent Framework
  • Qt 高级进阶-MVC架构实现客户端和插件交互(串口案例)
  • 本地部署开源物联网平台 ThingsBoard 并实现外部访问( Windows 版本)
  • leetcode--hot100--思路+知识点(I)
  • 兑吧集团总部大楼乔迁新址 焕新起航开启发展新篇
  • 仓颉视角:ArrayList 动态数组源码深度解析与实践优化
  • 报价网站建设自己动手做一个网页
  • Android红包雨动画效果实现 - 可自定义的扩散范围动画组件
  • codereg.py-ddddocr启动/识别问题
  • 酒泉网站建设有限公司越秀区网站建设公司
  • 一幅漫画说明白:数据治理VS数据管理
  • Ubuntu 22.04 + ROS 2 Humble实现YOLOV5目标检测实时流传输(Jetson NX与远程PC通信)
  • 如何优雅的给SpringBoot部署的jar包瘦身?
  • C++:当初始化顺序变成未定义行为
  • 在 Ubuntu 环境下 sh 脚本运行因为 Bash 改用 Dash 语法报错问题
  • 详解PCA9685的PWM编程原理
  • 仓颉语言事件处理机制深度解析:从底层实现到生产实践
  • phpcms 网站标题深圳物流公司排名
  • 不备案 网站 盈利企业官网查询
  • 【若依框架之我不会】
  • 如何快速学习智能合约开发语言 Solidity
  • 10.27 JS学习12
  • Kafka Consumer 详解API,分区分配策略以及消费offset
  • 前端2D地图和3D场景中的坐标系