UI自动化之xpath定位语法-常用

文章目录

  • 标准语法
  • 优缺点
  • xpath定位方法

标准语法

Xpath=//tagname[@attribute=‘value’]

  • // : 选择当前节点
  • Tagname: 节点标签名
  • @: 选择属性
  • Attribute: 节点属性名
  • Value: 属性值

优缺点

  • Xpath可以通过元素文本来定位,而CSS Selector不能
  • Xpath可以通过子节点来定位父节点,CSS Selector 不能
  • xpath 定位,需要扫描页面所有元素来定位, 非常费时, 如果脚本中大量使用xpath做元素定位的话, 脚本的执行速度会明显变慢。
  • XPath有绝对定位和相对定位两种,绝对定位使用绝对路径,缺点是路径太长,只要一个节点变动就无法定位。(以单斜杠(/)开始,表示从根节点开始选择元素。相对路径以双斜杠(//)开始,可以从HTML文档的任何位置开始。)

xpath定位方法

通过元素属性定位

# 匹配span标签id 为 abc 的元素
//span[@id="abc"]
# 匹配span标签id 为 abc 开始 的元素
//span[starts-with(@id,'abc')]
# 匹配span标签id 为 abc 结束 的元素
//span[ends-with(@id,'abc')]
# 匹配span标签任意属性值为abc的元素
//span[ends-with(@*='abc')]
# 匹配span标签属性为value的元素
//span[@value]

其中id、class、name、type格式同上
通过多个元素属性定位

# 使用 and 或者 or 连接多个属性
//input[@name='login'and@type='submit']

根据元素文本进行定位
以下示例中的 * 表示通配符,可匹配任意类型的标签

# 匹配 所有文本内容为 text_value的 元素
//*[text()='text_value']

子元素定位

#  匹配div标签子元素为标签a的元素
//div/a

后代元素定位

#  匹配div标签后代元素为标签a的元素
//div//a

下标定位

# 匹配span标签的第二个子元素
//span/*2
# 匹span标签的子元素的第二个input标签
//span/input[2]
# 匹配span标签的最后一个input子元素
//sapn/input[last()]

轴定位

  • ancestor:祖先节点,包括父节点
# 表示相对路径 sapn标签 title属性为“abc” 祖先节点为div标签 的元素
//span[@title='abc']/ancestor::div
  • parent:父节点
# 表示相对路径 sapn标签 title属性为“abc” 父节点为div标签 的元素
//span[@title='abc']/parent::div
  • child:子节点
# 表示相对路径 sapn标签 title属性为“abc” 子节点为div标签 的元素
//span[@title='abc']/child::div
  • descendant:所有后代(儿子、孙子、曾孙子…)
# 表示相对路径 sapn标签 title属性为“abc” 后代节点为div标签 的元素
//span[@title='abc']/descendant::div
  • preceding:当前元素节点标签之前的所有节点(HTML页面之前的)
  • preceding-sibling:当前元素节点标签之前的所有兄弟节点(同级)
  • following:当前元素节点标签之后的所有节点
  • following-sibling:当前元素节点标签之后的所有兄弟节点(同级)
  • 实例1
#使用语法:轴名称::节点名称前后的定位与之前一致,用/隔开即可
//div//table/td/preceding::td/following-sibling::a//[contains(text(),"abc”)] 
#表示//div//table/td/路径前所有节点中找到节点名称为td的节点,向下同级下的一个兄弟节点包含文本abc
  • 实例2
    UI自动化之xpath定位语法-常用_第1张图片
//span[text()="表格"]/../following-sibling::div/descendant::div[@title="EB表单-常用字段:20230821105927"]
#先定位文本内容为表格的span标签
#再用/..定位到span标签的爷爷标签(div标签)
#再用/following-sibling::定位到兄弟节点(div标签)箭头2所指的标签
#再用descendant::div[@title="{form_name}"]定位到所有子标签里 title属性为 EB表单-常用字段:20230821105927的标签

根据子元素定位父标签
要使用XPath定位到父标签,你可以使用"…"运算符。这个运算符表示选择当前节点的父节点。例如,假设你有以下HTML代码:

<div class="parent">
   <p class="child">Hello World!p>
div>

要定位到父标签

,你可以使用以下XPath表达式:

//p[@class='child']/..

这个XPath表达式首先定位到class属性为"child"的

标签,然后使用"…"运算符选择它的父节点

注意:XPath表达式中的"//"表示选择任意深度的节点,所以可以在整个文档中查找匹配的节点。如果你知道更具体的路径,可以替换为更精确的路径以提高性能。

你可能感兴趣的:(UI自动化,selenium)