【UI自动化】XPath元素定位进阶

UI自动化元素定位中,我们常用的定位方法就是XPath。

XPath定位十分灵活,定位时也可以借助一些函数取辅助定位。

接下来就以【百度首页】为例,部分HTML脚本如下所示:

<div id="u_sp" class="sisindex-1570-spmenu">

    <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-2020" class="mnav sp dot">抗击肺炎</a>

    <a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a>

    <a href="https://www.hao123.com" target="_blank" class="mnav">hao123</a>

    <a href="http://map.baidu.com" target="_blank" class="mnav">地图</a>

    <a href="https://haokan.baidu.com/?sfrom=baidu-top" target="_blank" class="mnav">视频</a>

    <a href="http://tieba.baidu.com" target="_blank" class="mnav">贴吧</a>

    <a href="http://xueshu.baidu.com" target="_blank" class="mnav">学术</a>

获取元素“抗击肺炎 ”,可以有多少中方法呢?

#层级目录

//div/a


#text()定位

//div/a[text()='抗击肺炎']


#contains方法定位,每个标签的href不同

#方法介绍:contains(str1,str2),用来判断str2是否是第一个字符串的一部分。

//div/a[contains(@href,'voice')]


#starts-with定位,每个标签的href开头不同

#方法介绍:statrs-with(str1,str2),用来判断str2是否是第一个字符串的开头

//div/a[starts-with(@href,'http://voice')]


#ends-with定位,每个标签的href结尾不同,备注:ends-with是XPath2.0的语法,1.0不支持

#方法介绍:ends-with(str1,str2),用来判断str2是否是第一个字符串的结尾

//div/a[ends-with(@href,'from=osari_pc_1')]    


#如果ends-with无法使用,可以换另外一种方法

#方法介绍1):substring(string,number,length),用来截取字符串。string用于指定要截取的字符串,number用于指定开始位置,length用于指定截取字符串的长度。

#方法介绍2):string-length(string),用来返回参数string的长度。
//div/a[substring(@href, string-length(@href) - string-length('from=osari_pc_1') +1) = 'from=osari_pc_1']


#通过某父级找到子级

//div/child::a[1]


#通过父级,找多层子级,定位后代元素

//div/descendant::a[1]


#那么是否支持多层子级,多层父级别呢?

#通过子级找到父级

//div/a[text()='抗击肺炎']/parent::div



#通过子代定位,找到多层父级,定位先代元素

//div/a[text()='抗击肺炎']/ancestor::div

获取一种元素我们大概可以有十几种方法!!

实际场景中需要多练习总结,找到适合自己产品的定位方法,过程中也欢迎大家补充其它的方法。

猜你喜欢

转载自www.cnblogs.com/panda-sweets/p/12748814.html