首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

软件测试笔记|web自动化测试|Xpath元素定位详解

“动动小手,点点关注呗~”

生命的尽头,就像人在黄昏时分读书,读啊读,没有察觉光线渐暗;直到他停下来休息,才猛烈发现白天已经过去,天已经很暗,再低头看书却什么都看不清了,书页已不再有意义。 ——毛姆《作家笔记》

在Web自动化测试领域,精准定位页面元素是编写高效测试脚本的基础。Xpath作为一种强大的元素定位方式,能够在复杂的HTML结构中快速找到目标元素。本文将深入剖析Xpath元素定位,结合专业代码示例,助你掌握这一核心技能。

一、Xpath基础概念

XPath(XML Path Language)是一种用于在XML文档(HTML 可以看作是特殊的 XML)中定位元素的语言。它基于树状结构,通过路径表达式来选取节点。在Web自动化测试中,我们利用Xpath来定位网页中的各种元素,如按钮、输入框、链接等。

1.1 XPath的路径类型

• 绝对路径:从根节点开始,按照层级关系,一级一级往下找到目标元素,以/开头。例如:/html/body/div[1]/form/input ,这种方式非常不灵活,只要页面结构稍有变化,路径就会失效。

• 相对路径:从任意一个节点开始定位,以//开头,能在整个文档中搜索目标元素,更加灵活,是实际应用中常用的方式 。例如://input[@id='username']

二、Xpath语法详解

2.1 选取节点

• 选取所有节点:使用通配符* ,例如//*,会选取文档中的所有节点。

上述Python代码使用Selenium库,打开指定网页后,通过//*的Xpath表达式获取页面所有元素,并打印元素数量。运行结果会输出网页中元素的总数。

• 选取特定标签节点:直接使用标签名,例如//div,选取文档中所有的<div>标签节点。

这段代码会获取网页中所有<div>元素并统计数量,运行结果展示网页<div>标签的个数。

2.2 节点属性定位

通过元素的属性来定位,使用@符号,例如//input[@type='text'],选取所有type属性值为text的<input>元素。

此代码获取网页中所有类型为text的输入框元素,运行后输出这类输入框的数量。

2.3 逻辑运算符

• and:同时满足多个条件,例如//input[@type='text' and @id='username'],选取type为text且id为username的<input>元素。

运行代码后,会输出网页中同时满足type为text且id为username条件的输入框元素数量。

• or:满足多个条件中的任意一个,例如//input[@type='text' or @type='password'],选取type为text或者type为password的<input>元素。

执行代码将统计网页中type为text或password的输入框元素总数。

2.4 模糊匹配

• 包含:使用contains()函数,例如//a[contains(@href,'example')],选取href属性值包含example的<a>元素。

运行该代码会获取网页中href属性包含example的链接元素数量。

• 以...开头:使用starts-with()函数,例如//input[starts-with(@id,'user')],选取id属性值以user开头的<input>元素。

执行代码后,会输出网页中id以user开头的输入框元素个数。

2.5 轴定位

轴用于在当前节点的上下文中选择相关节点。例如parent::选取当前节点的父节点,following-sibling::选取当前节点之后的所有兄弟节点。

上述代码先定位到id为username的输入框元素,然后通过轴定位找到其父节点,并打印父节点的标签名。运行结果会显示对应父节点的标签名称。

三、Xpath在实际项目中的优化技巧

3.1 避免过度使用通配符

虽然//*可以匹配所有元素,但会降低定位效率,应尽量使用明确的标签和属性定位。

3.2 结合元素的多种属性

当单个属性无法唯一确定元素时,可以结合多个属性来准确定位,如//button[@class='btn' and @type='submit' and text()='登录']。

3.3 利用层级关系

如果目标元素在某个特定的父节点下,可以先定位父节点,再在父节点的范围内定位子元素,如//div[@id='form-container']//input ,先找到id为form-container的

“动动小手,点点关注呗~”🫰

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OhE3G3U4VwE48CCBCuVa75uw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券