• 【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()='抗击肺炎']/..
    
    
    #通过子代定位,找到多层父级,定位先代元素
    
    //div/a[text()='抗击肺炎']/ancestor::div
    #通过某个元素找兄弟元素
    
    #找元素地图的下一个a标签
    //div/a[text()='地图']/following-sibling::a[1]
    
    #找元素地图的下N个a标签
    //div/a[text()='地图']/following-sibling::a[N]
    
    #找元素地图的上一个a标签
    //div/a[text()='地图']/preceding-sibling::a[1]
    
    #找元素地图的上N个标签
    //div/a[text()='地图']/preceding-sibling::a[N]

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

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

  • 相关阅读:
    bzoj2161 布娃娃
    bzoj2161 布娃娃
    Tyvj1054
    Tyvj1054
    Tyvj1053
    Tyvj1053
    hdu3265 Poster(扫描线)
    hdu3265 Poster(扫描线)
    hdu3265(好题翻译)
    hdu3265(好题翻译)
  • 原文地址:https://www.cnblogs.com/panda-sweets/p/12748814.html
Copyright © 2020-2023  润新知