• web自动化测试---xpath方式定位页面元素


      在实际应用中,如果存在多个相同元素,包括属性相同时,一般会选用这种方式,当然如果定位属性唯一的话,也是可以使用的,不过这种方式没有像id,tag,name等容易理解,下面讲下xpath定位元素的方法

    / 从根节点选取
    // 从匹配选择的当前节点选择
    @    选取属性
    * 匹配任何元素节点
    @* 匹配任何属性节点

      我们就以百度首页右上一排的元素来定位,一般来说通过find_element_by_link来定位,这里我们只介绍xpath来定位的方式

    我们查看下原始的百度页面中tag='a',class='mnav'的元素有多少:

    总共有6个,下面我们就来定位

    1、定位第一个新闻的链接,语句如下:

    driver.find_element_by_xpath('//a[@class="mnav"][1]').click()
    

     这里用到的是短xpath,即如果不是从web的根开始查找元素,那么用 // 来表示,如果是根开始那只有一个 / 就可以了

    2、定位最后一个学术链接,语句如下:

    driver.find_element_by_xpath('//a[@class="mnav"][last()]').click()
    #如果显示不是最后一个元素,可以写成如下:
    driver.find_element_by_xpath('//a[@class-"mnav"][not last()]')

     3、定位倒数第二个贴吧链接,语句如下:

    driver.find_element_by_xpath('//a[@class="mnav"][last()-1]').click()
    

     4、如果需要选取前俩个元素,则语句如下:

    driver.find_element_by_xpath('//a[@class="mnav"][position()<3]')
    

     5、我们也可以通过下面语句定位学术链接,语句如下:

    driver.find_element_by_xpath('//a[@name="tj_trxueshu"]').click()
    

     6、如果需要选取不在一起的俩个元素(比如地图和贴吧),那么可以参考如下语句:

    driver.find_element_by_xpath('//a[@name="tj_trmap"]|//a[@name="tj_trtieba"')

     7、通过tag也可以也可以选取:

    driver.find_element_by_xpath('//*[local-name()="a"]')
    #或者通过tag以a开头来获取:
    driver.find_element_by_xpath('//*[starts-with(local-name(),"a")]')
    #或者通过tag包含a来获取:
    driver.find_element_by_xpath('//*[contains(local-name(),"a")]')
    #或者通过tag的长度来获取:
    dirver.find_element_by_xpath('//*[string-length(local-name())=5]')

    8、父兄节点

    <div>
        <a id="1" href="www.baidu.com">我是第1个a标签</a>
        <p>我是p标签</p>
        <a id="2" href="www.baidu.com">我是第2个a标签</a>
        <a id="3" href="www.baidu.com">我是第3个a标签</a>
        <a id="4" href="www.baidu.com">我是第4个a标签</a>
        <p>我是p标签</p>
        <a id="5" href="www.baidu.com">我是第5个a标签</a>
    </div>
    获取第三个a标签的下一个a标签:"//a[@id='3']/following-sibling::a[1]"
    
    获取第三个a标签后面的第N个标签:"//a[@id='3']/following-sibling::*[N]"
    
    获取第三个a标签的上一个a标签:"//a[@id='3']/preceding-sibling::a[1]"
    
    获取第三个a标签的前面的第N个标签:"//a[@id='3']/preceding-sibling::*[N]"
    
    获取第三个a标签的父标签:"//a[@id=='3']/.."
    关于本篇内容如有转载请注明出处;技术内容的探讨、纠错,请发邮件到70907583@qq.com
  • 相关阅读:
    VUE笔记-如何处理vue create demo时候,不能使用上下按键选择?
    帝国CMS之PC端上新栏目后,移动端无法同步,添加内容编辑页打开空白的处理方法
    帝国cms:迁移站点后,配置多端访问显示“访问端目录不存在”
    如何批量删除帝国CMS中同一前缀的数据表?
    宝塔插件"网站监控报表"错误日志显示大量不存在的链接,处理方法及流程
    mysql删除重复数据只保留一条
    VirtualBox 中 discuzq不能添加软链接的处理方法
    mysql8 source 导入大文件时 经常意外中断 且无法再链接断续 解决方法先设置 set names utf8;
    discuzq Virtualbox 虚拟机 在共享文件夹设置软链接 in 报错 Protocol error问题
    是的,奈学教育一周年了!
  • 原文地址:https://www.cnblogs.com/watertaro/p/9050160.html
Copyright © 2020-2023  润新知