xpath获取标签的属性值_[Selenium]12.加餐: 如何手写xpath

6e44364b332653eb918d9b7f4a22601d.png

场景

使用Selenium进行自动化测试,一大难题就是元素定位。虽然Selenium支持使用ID、name、Class、链接文字等多种方式进行元素识别,但对于复杂的网页,采用富客户端框架的前台界面,部分界面元素特征的稳定性无法保证,导致识别失败。如果生搬硬套使用ID、name等方式,会导致自动化脚本可用率降低,增加了投入成本。

通常情况下, 我们可以浏览器自带的定位方式, Firefox的F12, Chrome的开发者工具, 找到元素右键copy-copy xpath即可.

本文推荐使用手写定位方式,它不会局限于工具, 如果你写的相对定位, 维护成本会较低. 以下介绍XPath定位的几种方式:绝对路径、相对路径、索引号、属性值、文本内容,其中属性值和文本内容说明模糊匹配的使用。在多种XPath定位方式中,推荐使用相对路径、属性值、文本内容和Axis组合的方式,并给出界面识别的推荐规则。

通过XPath的组合,让你的自动化测试不再担心元素定位问题。

基本语法

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:

2eda5354338c3bcb9c1e782c88da478d.png

定位方式

html代码如下:

<html>
	<body link="#0000cc">
		<div id="wrapper" style="display: block;">
			<div id="content" style="display: block;">
			<p>请输入内容:</p>
			<div id="u1" style="display: block;">
				<div id="m">
					<p id="lg">
					<p id="nv">
						<div id="fm">
							<a href="http://www.baidu.com">百度一下</a>
							<form id="form" class="fm" action="/s" name="f1">
								<span class="s_ipt_wr">
									<input id="kw" type="text" name="wd">
	</body>
</html>

1.绝对路径定位

使用绝对路径的方式定位除非是其父级元素都没有一个唯一识别的元素才使用该方式;假如要定位到输入框,那么使用绝对路径的方式为:

xpath= /html/body/div/div/div/div/div/form/span/input

就是从根部开始找,一级一级往下走,如果有同级别的需要用[]标明序号,从1开始

2. 通过属性查找

  • xapth = //*[@id="kw"]
  • xpath = //input[@id="kw]
  • xpath = //input[@type="text"]
  • xpth = //input[@name="wd"]
//input表示匹配input标签的所有元素, //*表示匹配所有元素的标签
注意:要保证这些元素可以唯一的识别一个元素

3.组合定位

如果input标签中 id不是唯一的,type也不是唯一的,但在该页面中包含该id和type的只有这个元素时,那么我们可以用组合的方式定位

xpath = //input[@id="kw and @name="wd"]

当然还有or, 但是 慎用

4.找父级属性

如果自己没有唯一的标志,那么就找自己的上级(父级),或者上级的上级,以此类推。

找父级:xpath=//span[@class="s_ipt_wr"]/input

找父级的父级:xpath=//form[@id="form"]/span[1]/input

5.跳级

如果需要定位的元素在该页面不是唯一,但在某个容器内是唯一的,当然那个容器必须要有唯一的标志; 跳级的话要用两个//

xpath = //div[@id="wrapper"]//input[@id="kw"]

6. 其它

  • contains: xpath =//input[contains(@id,"w")], 表示选择id中包含"w"的input节点
  • text(): xpath= //a[text()="地图"]. 由于一个节点的文本值不属于属性, ,所以,用text()函数来匹配节点

除了上述xpath定位方式以外, 还可以通过轴和步这些高阶写法来完成. 对于测试的同学来讲, 以上已经够用, 有兴趣的同学可以自行研究.

温馨提示: 大家如果觉得这个专栏还不错, 一定记得点赞收藏哟!如果学习中遇到困难, 可以发私信进行交流~

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值