首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【自动化测试函数 (上)】Web自动化测试实战精要:定位、操作与窗口管理三部曲

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

作者头像
艾莉丝努力练剑
发布2025-11-18 14:20:28
发布2025-11-18 14:20:28
950
举报
文章被收录于专栏:C / C++C / C++

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()

代码语言:javascript
复制
#找到百度⼀下按钮并点击 
driver.find_element(By.CSS_SELECTOR, "#su").click()

2.2 模拟案件发生

send_keys("")

代码语言:javascript
复制
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")

2.3 清除文本内容

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
title = driver.title

2.6 获取当前页面URL

current_url

代码语言:javascript
复制
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 切换当前句柄为最新页面
代码语言:javascript
复制
curWindow = driver.current_window_handle
allWindows = driver.window_handles

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

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

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

3.2 窗口设置大小

3.2.1 窗口的大小设置
代码语言:javascript
复制
#窗⼝最⼤化 
driver.maximize_window()
#窗⼝最⼩化 
driver.minimize_window()
#窗⼝全屏 
driver.fullscreen_window()
#⼿动设置窗⼝⼤⼩ 
driver.set_window_size(1024,768)

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

3.3 屏幕截图

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

代码语言:javascript
复制
driver.save_screenshot('../images/image.png')

代码演示如下——

代码语言:javascript
复制
#简单版本 
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 关闭窗口

代码语言:javascript
复制
driver.close()
注意:窗⼝关闭后driver要重新定义

4 ~> 弹窗

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

4.1 警告弹窗 + 确认弹窗

代码语言:javascript
复制
alert = driver.switchTo.alert
//确认
alert.accept()
//取消
alert.dismiss()

4.2 提示窗口

代码语言:javascript
复制
alert = driver.switchTo.alert
alert.send_keys("hello")
alert.accept()
alert.dismiss()

结尾

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

往期回顾:

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

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

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

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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 提示窗口
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档