python自动化测试——xpath元素定位扩展

2644 篇文章 26 订阅
2293 篇文章 14 订阅

1.元素定位

自动化测试中的元素定位方式有好多种,比如通过id、class、css等,在之前已经介绍过了,这里主要是对xpath的元素定位方式做一些补充,包括contains、starts-with、ends-with等方法,这些方式在我们平时编写自动化测试中很好用,也很有用。

如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点这自行获取…

2. xpath元素定位扩展

2.1 路径定位

XPath是一种在XML文档中定位元素的语言。xpath定位可分为绝对路径定位和相对路径定位,这两种定位方式是最基础也是比较常见的。

以一个层级关系页面定位为例:

<html xmlns="http://www.zn.com/xhtml" lang="zh-cn">
<body>
    <div id="operate_zn" class="zn" style="width: 64px;" title="">
        <a href="javascript:void(0)" class="zn-single" tabindex="-1">
            <span>or</span>
        </a>
        <div class="zn-drop" style="left: -9000px; width: 62px; top: 0px;">
            <div class="zn-search" style="">
                <input id="input" type="text" name="operate_zn" autocomplete="off" style="width: 27px;">
            </div>
        </div>
    </div>
</body>
</html>

比如我们要定位输入框input中的元素:

(1)通过绝对路径来定位:

find_element_by_xpath("/html/body/div/div/div/input")

(2)通过相对路径来定位:

通过自身的id属性定位:
find_element_by_xpath("//input[@id=’input’]")
通过上级目录的id属性定位:
find_element_by_xpath("//div[@id=’operate_zn’]/div/div/input")

2.2 xpath模糊匹配

我们在使用xpath定位时,比较经常的是使用元素直接定位,当遇到一些标签元素值是动态变化的(就是每次访问页面都不一样),例如下面这个html代码:

#这里的id和class中的数字是动态变化的
<div class="zn-search" style="">
    <input id="search-13522" class="operate_zn-12536" >
</div>

这个时候,我们就无法使用普通的xpath属性直接定位,那么我们可以通过xpath的contains模糊匹配对元素进行定位:

通过id包含”search”来定位:
find_element_by_xpath("//input[contains(@id,'search')]")
通过class包含”operate_zn”来定位:
find_element_by_xpath("//input[contains(@class,'operate_zn')]")

2.3 字符串开头匹配

还是上面那个例子,元素值是动态变化的:

#这里的id和class中的数字是动态变化的
<div class="zn-search" style="">
    <input id="search-13522" class="operate_zn-12536" >
</div>

要想做一个匹配我们可以通过xpath的starts-with匹配字符串开头对元素进行定位:

通过id以”search”开头来定位:
find_element_by_xpath("//input[starts-with(@id,'search')]")
通过class以”operate_zn”开头来定位:
find_element_by_xpath("

2.4 字符串结尾匹配

例如下面这个html代码,元素值也是动态变化的,但这次变化的数字是在开头:

#这里的id和class中的数字是动态变化的
<div class="zn-search" style="">
    <input id="3522-search" class="12536-operate_zn" >
</div>

要想做一个匹配我们可以通过xpath的ends-with匹配字符串结尾对元素进行定位:

通过id以”search”结尾来定位:
find_element_by_xpath("//input[ends-with(@id,'search')]")
通过class以”operate_zn”结尾来定位:
find_element_by_xpath("

如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点这自行获取…

2.5 逻辑运算

例如下面这个html代码:

<div class="zn-search" style="">
    <input id="search" class="operate_zn" >
</div>
...
...
<div class="sn-search" style="">
    <input id="search" class="e_sn" >
</div>

当我们遇到多个id都一样的情况下,但由于元素太多可能没发现存在相同的标签,这个时候,我们可以通过多个元素与逻辑运算(and)进行定位:

第一个input标签,可以通过id为“search”和class为“operate_zn”与逻辑运算来定位:
find_element_by_xpath("//input[@id='search' and @class='operate_zn']")
第二个input标签,可以通过id为“search”和class为“e_sn”与逻辑运算来定位:
find_element_by_xpath("//input[@id='search' and @class='e_sn']")
备注:
1.当然,如果知道存在有相同标签的话,这里也可以直接使用class进行定位
2.xpath不仅支持多个属性与逻辑运算(and),还可以支持或运算(or)和 非运算(not)

2.6 正则匹配

例如下面这个html代码:

<div class="gc" style="">
    <a  href="www.baidu.com">baidu</a>
</div>

我们除了可以用link方式定位,还可以使用xpath的正则匹配进行定位:

可以通过xpath的正则匹配来定位:
find_element_by_xpath("//*[matchs(text(),'baidu')]")

总结:

自动化测试中比较重要的其实就是元素定位,也是比较难的。我们可以根据不同的情况,选择比较合适的元素定位方式。XPath的元素定位方式也是比较重要的,今天主要介绍的contains、starts-with、ends-with等方法,可以解决元素定位中遇到的一些难以定位的问题,当然,这些定位方式不是万能的,结合其他的定位方式一起使用,才能让我们的自动化脚本运行起来更加稳定。

如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点这自行获取…

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值