WEB自动化如何使用XPATH定位元素的方法
  p2QdBCa7ky7t 2023年11月13日 16 0

动态web元素

我们编写自动化测试脚本的时候我们通常更加喜欢用id, name, class, etc来定位元素,但是有时候我们发现我们在html文本中找不到这些定位,这种情况我们将就只能使用更加灵活的定位方法,这种定位方法是针对相对复杂且位置多变的web元素。

XPath selenium选择器

通过使用xml表达路径,我们可以找到网页上的任何一个元素,一些基本的Xpath 选择器如下:

语法: //标签名@[@s属性=‘value’]

举例: //input[@id=‘user-message’]

你也可以使用class name link_text,以及其他属性来定位

绝对路径和相对路径

其实从测试工程师的角度来看绝对路径和相对路径的差别特别简单

绝对路径

绝度路径是一种直接定义到元素的方法

以斜线“/”开始,“ /”代表着从根目录寻找

举例:

/html/body/div[2]/div/div[2]/div[1]/div[2]/form/div/input

相对路径

1.一般从HTML的中间部门随即开始

2.以双斜线开始“//”,“//”代表可以从html 中的任何一处开始寻找元素

3.比绝对路径要短

举例://div[@class=‘form-group’]//input[@id=‘user-message’]

//input[@type=‘send text’]

//label[@id=‘clkBtn’]

//input[@value=‘SEND’]

//[@class=‘swtestacademy’]

–> “” means, search “swtestacademy” class for all tags.

//a[@href=‘http://www.swtestacademy.com/’]

//img[@src=‘cdn.medianova.com/images/img_59c4334feaa6d.png’]

Contains

这是一个非常便利的xpath选择器,甚至有的时候它能就自动化测试工程师的一条命,当一个元素的属性是动态的,你就有必要在一些场景中使用 contains()

举例://input[contains(@id,‘er-messa’)]

Starts-with

这个方法是针对一个属性是以什么开头的,不管元素的属性是不是动态变化的你都可以去使用这个方法

举例://input[starts-with(@id,‘user’)]

Chained Declaration

我们可以使用多个相对路径去定位一个元素用”//“分开

举例://div[@class=‘formgroup’]//input[@id=‘user-message’]

“or”

利用这种方法的时候,我们使用两个条件语句例如A 和 B 并且通常返回一个集合

举例://[@id=‘user-message’ or @class=‘form-control’]

and

利用这种方法的时候,我们使用两个条件语句例如A 和 B 并且通常返回一个集合

举例://[@id=‘user-message’ and @class=‘form-control’]

Text

我们可以通过一个元素的文本内容来找到它

举例://label[text()=‘Enter message’]

Ancestor

首先查找到在ancestor声明之前的那个元素,然后将这个元素设为顶端节点,最后查找这个节点内所有符合规则的元素

1.第一步,找到class是‘container-fluid’的元素

2.第二步,查找在这个元素里面的所有div

举例://[@class=‘container-fluid’]//ancestor::div

你可以选择通过div层级个数选择特定的div组

Following

用于定位已给的父类节点之后的元素。首先找到following声明之前的元素(following前面以双斜线隔开的元素),并将这个元素设置为顶端节点然后找到在这个节点之后的所有元素(与ancestor分开,ancestor是顶端节点里,following是顶端节点后)

1.第一步,标签名是form, id是‘gettotal’

2.第二步,开始查找这个元素后面的所有标签名为input的所有元素

举例://form[@id=‘gettotal’]//following::input

Child

查找当前节点的所有子节点

举例://nav[@class=‘fusion-main-menu’]//ul[@id=‘menu-main’]/child::li

同时,你还可以通过给定下标选择特定的li元素 li[1],li[2]

Preceding

查找当前节点之前的所有节点,假如我们要查找所有标签名为li的元素,首先我们选定最底部的元素,然后用preceding::li

举例://img[contains(@src,‘cs.mailmuch.co’)]//preceding::li

当然,你可以使用[1],[2]来选择这些集合里的特定元素

Following-sibling

查找当前节点的之后的

举例://[@class=’col-md-6 text-left’]/child::div[2]//[@class=’panel-body’]//following-sibling::li

Descendant

查找并返回当前元素的所有后代元素

举例://nav[@class=‘fusion-main-menu’]//[@id=‘menu-main’]//descendant::li

Parent

返回当前节点的所有父类节点

举例://*[@id=’get-input’]/button//parent::form

在一个元素集合里定位一个元素

比如在Trivago 网站,我们查找关键词”Antalya“,然后用xpath找到第一个Odamax酒店

第一步:通过使用text方法我们可以找到所有Odamax酒店

//span[contains(text(),‘odamax’)]

(//span[contains(text(),‘odamax’)])[1]

你也可以继续查找相关酒店的价格元素

(//span[contains(text(),’odamax’)])[1]/following-sibling::strong[@class=’deals__price’]

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  zzwpYXrztNx3   2023年11月30日   12   0   0 爬虫测试
p2QdBCa7ky7t
最新推荐 更多