Web自动化测试中,很关键的一点是定位元素,那么如何定位元素呢?一般地,XPath技术常应用于定位元素。下面列出一些常用的Xpath技术。
1. Web HTML Sample 1与Xpath
<button class='Button_MobileSubmit' id='qa-fund-dialog' type='submit'>开始申请</button>
//*[@class='Button_MobileSubmit'] #定位,用属性class
//*[@id='qa-fund-dialog'] #定位,用属性id
//*[@type='submit'] #定位,用属性type
//*[text()='开始申请'] #定位,用text()方法
//*[contains(@class,'Button_MobileSubmit')] #模糊定位,用方法contains(@class,'xxx')
//*[contains(text(),'开始')] #模糊定位,用方法contains(text(),'xxx')
备注:元素定位时,用哪种方法都可以,但要保证定位的元素的唯一性。
2. Web HTML Sample 2与Xpath
<div class='FundCard__AnnualInterestSpan-fCwHrM'>3.00</div>
<div class='FundCard__AnnualInterestSpan-fCwHrM'>3.00</div>
<div class='FundCard__AnnualInterestSpan-fCwHrM'>5.00</div>
这个HTML中,因为有重复一样的class属性,假如我们想定位第二条,对我们来说是比较困难的,那怎么办呢?答案是我们可以通过类似Get WebElements方法调用,方法会返回List(3个元素),再操作这个List的下标即可。
举例:
1)场景:要点击,第二条数量为3.00的div
2)背景知识:
robot framework自动化框架,SeleniumLibrary开发包中:Get WebElements()方法
参数:locator
返回:a List of WebElement Object(返回一个与lcator匹配的列表)
3)实际脚本:
${List} Get WebElements() //*[@class='FundCard__AnnualInterestSpan-fCwHrM']
SeleniumLibrary.Click Element ${List} [1]
备注:
- Get WebElements()这个方法会返回3个Web对象(都满足//*[@class='FundCard__AnnualInterestSpan-fCwHrM']),再通过${List}[1]指定第二个对象,也就是满足场景要求的“第二条数量为3.00的div”。另外,注意${List}[0]为第一条
- 本例子是Robot Framework框架,大家使用的框架不同,方法名也不同,但思路是相同的
- 另外,有的时候确定一个元素需要2个以上条件,可使用多条件组合比如下面这个用and联合属性://*[@class='xxxx' and @type='yyyy']
3. Xpath常用问题解决
3.1元素遮盖问题
Web前端代码:
<lable class='radio-line'>
<input type='radio' id='transactionService2'>
问题: click element //*[@id='transactionService2'] 点击这个点击不上,报错。
解决:click element //*[@id='transactionService2']/.. 或者 click element //*[@class='radio-line']/
备注:因为有些子节点的元素被父节点遮盖(需要试一试才知道是否有遮盖),这时可以通过点击其父节点方式解决,即在Xpath后加两个小点".."。