• 2
  • 2
分享
  • 史上最全的xpath定位方法全在这了!——软件测试圈
  • 北极 2022-06-22 17:04:24 字数 2324 阅读 11661 收藏 2

Xpath常用的定位方法

相信做过selenium UI自动化的朋友都知道,工作中大部分的元素定位都是使用xpath进行定位,所以xpath是UI自动化工作中非常重要的一个环节,所以我单独整理出来一篇博客出来~~希望对大家有帮助~

相对定位

相对定位是两个杠表示“//”,相对路径易维护

1.png

绝对路径

绝对定位用一个杠“/”, 绝对路径一个层级变化所有空间都有变化

/html/body/div[1]/section/section/main/div[2]/div[2]/div[1]/div[2]/button[1]/span

last()方法

当标签存在多个相同的时候,可以使用xpath中的last()方法,定位到最后一个

2.png

//标签名[last()]
//span/ul//li[last()]

如果我们要定位到倒数第二个,可以在last() 后面加上 -1,代表倒数第二个

3.png

//标签名[last()-1]
//span/ul//li[last()-1]

属性查找@

如,这里我们以百度为例,如果我们要定位到百度的id元素,那么可以使用 //标签名[@元素名称=‘元素值’]

4.png

//标签名[@元素名称='元素值']
//input[@id='kw']

xpath逻辑表达式-and

当一个元素无法定位到唯一值得时候,我们可以使用and表达式,同一个标签下定位多个元素

5.png

//标签名[@元素名称='元素值' and @元素名称='元素值']
//input[@id='kw' and @class='s_ipt']

xpath表达式-or

xpath 中 or的表达式和and很像,指的是当你元素满足其中一个条件的时候,就可以定位到,如图,在百度搜索框中,我们故意将@class='s_t’元素写错,内容中并没有这个元素,

6.png

// 标签名[@元素名称='元素值' or @元素名称='元素值']
//input[@id='kw' or @class='s_t']

非查找控件

如图,如果我们想要查找元素值不等于某个值的内容,可以使用!=方法,但是这个方法在工作中用的比较少,目前我还没有用到过,不过xapth提供了这个方法,可以结合场景使用~

7.png

//标签名称[@元素名称 != '元素值']
//input[@class!='1111']

Not查找

//标签名[not(.='元素值')
//year[not(.=2005)]
//div[not(@id="tab-AndroidVersions")]

这里没有找到合适的场景,意思就是查找year内容不为2005的内容 注:“.”就等于text()

模糊匹配

8.png

//标签名[contains(text(), "内容"]
//div[contains(text(), "更新")]

这里的意思是模糊查询内容包含“更新”的元素

精准匹配

9.png

//标签名[(text()='内容')]
//div[(text()='更新文案')]

使用大于小于符号定位

10.png

//div[@class="cell" and text()>'1336']
//div[@class="cell" and text()<'1336']

如图,当我们商品列表中有多个商品ID,那我们想要定位到ID大于或者小于1336的数据,可以通过上面的方式。

轴方式定位

轴表达式说明
parent::* :表示当前节点的父节点元素
ancestor::* :表示当前节点的祖先节点元素
child::* :表示当前节点的子元素 /A/descendant::* 表示A的所有后代元素
self::* :表示当前节点的自身元素
ancestor-or-self::* :表示当前节点的及它的祖先节点元素
descendant-or-self::* :表示当前节点的及它们的后代元素
following-sibling::* :表示当前节点的后序所有兄弟节点元素
preceding-sibling::* :表示当前节点的前面所有兄弟节点元素
following::* :表示当前节点的后序所有元素
preceding::* :表示当前节点的所有元素

1、parent:: 当前节点的父节点元素*

11.png

//div[@class="cell" and text()='1338']/parent::*

如图,我们要定位到ID为1338元素的父节点元素,可以使用如上xpath轴定位, “*” 表示匹配所有

2、following-sibling::

/bookstore/book[1]/following-sibling::*

查找books1所有的同级元素都查找出来,“*”表示所有

12副本.png

//div[3]/table/tbody/tr[1]/td[1]/following-sibling::td[2]

查找td[1]下同级节点下的第二个节点

13.png

3、following-sibling::当前节点的前面所有兄弟节点元素

/bookstore/book[2]/year/preceding-sibling::*

意思是:查找books[2]下year前的同级节点

14.png

4、查找节点的父辈

/bookstore/book[2]/year/parent::*

5、查找节点的子辈

/bookstore/book[2]/descendant::*

使用position位置定位

意思是定位到th标签下的第一个

//th[@class="c-id " and position()=1]

15.png

也可以//th[@class="c-id " and position()<2] 这样用~


作者:七月的小尾巴

原文链接:https://blog.csdn.net/weixin_43865008/article/details/115332404

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 容器技术是目前热门话题之一,在许多互联网公司已有实际应用,对于测试者来讲需要我们主动迁移测试管理环境适应新变化。本文将介绍如何在CentOS 7 + Docker环境中部署和配置Testlink1.9 + Mantis。本次环境搭建操作系统选用互联网公司主流Linux系统CentOS7,容器环境选择Docker1.12。而Testlink想必测试人员都不算陌生,这是一款开源的web测试管理工具,它不仅提供了测试需求、测试设计、测试执行和测试结果分析的管理过程,而且还能和常见的Bug跟踪工具协同工作。本次我们将介绍Testlink和Mantis缺陷跟踪系统的集成,该工具很好的...
            0 1 3549
            分享
          •   积极布局印度市场的小米,在当地遇到难题。  印度执法局(ED)6月9日发布文件称,因小米涉嫌违反该国《外汇管理法》(FEMA),“向外国实体非法转移资金”,该局已经向小米技术印度私人有限公司、小米印度分公司、部分高管及花旗等三家银行发出正式通知。  出于该指控,印度当局此前已经扣押了小米共555.1亿卢比资金(约6.8亿美元),现价近50亿元人民币。数据显示,小米集团2022年经调整净利润为人民币85亿元,也就是说,这笔资金相当于小米去年净利润的57%。  对于此事,观察者网向小米方面求证。截至下午发稿前,该集团暂未回应。  小米的申诉,没有回响  2022年4月,印度执法局指控称,自20...
            0 0 756
            分享
          • Newman 是 Postman 推出的一个 nodejs 库,直接来说就是 Postman 的json文件可以在命令行执行的插件。 Newman 可以方便地运行和测试集合,并用之构造接口自动化测试和持续集成。1、下载Node.js并安装 检查是否安装成功:打开cmd,输入node -v如果输出node的版本信息,则证明安装成功。2、安装Newman,输入npm install -g newman注意:newman必须要跟nodejs处于一个文件当中,才可以安装成功,否则会报错,检查newman是否安装成...
            0 0 1709
            分享
          • 一、正则表达式语法(一) 字符与字符类1、特殊字符:\.^$?+*{}[]()|以上特殊字符要想使用字面值,必须使用\进行转义2、字符类包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个。字符类内可以指定范围,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之间的任何一个字符左方括号后跟随一个^,表示否定一个字符类,比如[^0-9]表示可以匹配一个任意非数字的字符。字符类内部,除了\之外,其他特殊字符不再具备特殊意义,都表示字面值。^放在第一个位置表示否定,放在其他位置表示^本身,-放在中间表示范围,放在字符类中的第一个字符,则表示-本身。字符类...
            12 13 1852
            分享
          •   早在信息行业发展的初期,就有互联网公司意识到了保护软件产品安全的重要性,可时至今日,我们总能够从报道中瞥见某某公司遭黑客入侵导致信息泄露的新闻,其中甚至不乏Facebook这些以用户通讯、身份信息为支柱产业的大厂。  信息安全事件屡见不鲜,然而公司的软件安全测试效果总是不理想,以下卓码测评小编推荐的这些安全测试工具让你的测试工作效率更高。  一、软件安全测试的含义是什么?  软件安全测试是指测试人员在软件产品开发基本完成到发布这一阶段通过各种测试工具对产品进行检验以验证产品是否符合安全需求定义和产品质量标准的过程。  二、有哪些常见的软件安全问题?  (1)缓冲区溢出;  (2)SQL注入...
            0 0 411
            分享
      • 51testing软件测试圈微信