有了XPath,再也不用担心自动化测试元素定位了

摘要

使用Selenium进行自动化测试,一大难题就是元素定位。虽然Selenium支持使用ID、name、Class、链接文字等多种方式进行元素识别,但对于复杂的网页,采用富客户端框架的前台界面,部分界面元素特征的稳定性无法保证,导致识别失败。如果生搬硬套使用ID、name等方式,会导致自动化脚本可用率降低,增加了投入成本。

本文推荐使用XPath定位方式,介绍XPath定位的几种方式:绝对路径、相对路径、索引号、属性值、文本内容和Axis,其中属性值和文本内容说明模糊匹配的使用,Axis方式说明Axis嵌套的方法。在多种XPath定位方式中,推荐使用相对路径、属性值、文本内容和Axis组合的方式,并给出界面识别的推荐规则。

通过XPath的组合,让你的自动化测试不再担心元素定位问题。

XPath简介

XPath不是Selenium专用,只是作为一种定位手段,为Selenium所用。XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。由于HTML的层次结构与XML的层次结构天然一致,所以使用XPath也能够进行HTML元素的定位。

本文使用的HTML示例源码如下

Web界面如下

绝对路径定位

顾名思义,将XPath表达式从HTML的最外层节点,逐层填写,最后定位到要操作的元素。

以定位第一个img元素为例,可以使用如下XPath表达式:

/html/body/div/div/img

语句以”/”开始,含义为从”html”节点开始寻找,逐层寻找”body/div/div/img”。通过FirePath查看结果如下。

通过绝对路径定位的元素, 一旦路径有变化会导致定位失败。而且完全能够通过路径定位到的元素是比较少见的,都需要增加索引、属性等方式。所以不推荐使用该方式。

相对路径定位

绝对路径与相对路径的差别与文件系统中的绝对和相对路径类似,相对路径是只给出元素路径的部分信息,在HTML的任意层次中寻找符合条件的元素。

还是以定位第一个img元素为例,通过相对路径可以使用如下XPath表达式:

//div/div/img

语句以”//”开始,含义为在任意层次下寻找路径层次为”div/div/img”的元素。通过FirePath查看结果如下。

通过相对路径定位元素,提取的是元素的部分特征,只要提取恰当,能够保证版本间稳定,是进行自动化测试的首选。示例中通过相对路径直接定位,实际使用中会结合属性等其他特征,共同定位。

索引号定位

索引号与元素属性id无关。通过索引号定位是指定元素在父节点下的出现序号,通过序号进行定位的方式。

以期望定位第一个input元素为例,表达式如下:

//div/input[1]

该XPath是相对路径和索引号组合的方式,含义是任意层次下的”div/input”,其中input是”div”下索引是1的input。

不幸的是,符合这个条件的input有三个,FirePath查看结果如上。通过这个例子可以看到,界面元素的id属性与索引号无关;相对路径或者绝对路径可以与索引号的方式组合进行定位。

索引号定位的方法,类似于QTP定位通过index定位Java Swing对象,当界面出现变动时,很难保证索引号的稳定。所以不推荐使用。

......

查看全文内容,点击阅读原文

本文选自本文选自《51测试天地》第五十期

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806B1AQXV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券