我是靠谱客的博主 搞怪冰淇淋,最近开发中收集的这篇文章主要介绍Selenium_元素定位之xpath详解什么是xpathXML 实例文档xpath基本语法绝对路径定位相对路径定位元素索引定位节点属性定位文本内容定位模糊匹配定位Axis(轴)定位布尔定位xpath调试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

元素定位之xpath详解

  • 什么是xpath
  • XML 实例文档
  • xpath基本语法
    • 选取节点
    • 谓语(Predicates)
    • 选取未知节点
    • 选取若干路径
  • 绝对路径定位
  • 相对路径定位
  • 元素索引定位
  • 节点属性定位
  • 文本内容定位
  • 模糊匹配定位
  • Axis(轴)定位
  • 布尔定位
  • xpath调试

什么是xpath

xpath 是 XML Path 的简称,是一门在XML文档种查找信息的语言,而 HTML 文档是标准的XML页面,所以可用 xpath 来检索 HTML 页面元素。

XML 实例文档

<?xml version="1.0" encoding="UTF-8"?>
 
<bookstore>
 
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
 
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
 
 <book>
  <title lang="eng">Java</title>
  <price>35</price>
</book>
</bookstore>

xpath基本语法

选取节点

XPath 使用路径表达式在 XML 文档中选取节点。

表达式描述示例
nodename选取此节点的所有子节点。bookstore
/从根节点选取。/bookstore:选取根元素bookstore
//选取元素的相对路径。//price:选取所以price元素
.选取当前节点。.//price
选取当前节点的父节点。//price/…
@选取属性。//@lang:选取名为 lang 的所有属性

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点,谓语被嵌在方括号中。

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素
/bookstore/book[position() < 3]选取属于 bookstore 子元素的前两个 book 元素
//title[@lang]选取拥有lang属性的所有title元素
//title[@lang=‘eng’]选取lang属性为eng的title元素
/bookstore/book[price>35.00]选取bookstore的子元素book,且价格大于35.00
/bookstore/book[price>35.00]//title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

表达式描述示例
*匹配任何元素节点/bookstore/*:选取 bookstore 元素的所有子元素(不包括文本节点,注释节点)
@*匹配任何属性节点//title[@*]:选取文档中的所有元素
node()匹配任何类型的节点/node():匹配任何类型的节点(包括文本节点,注释节点等)

选取若干路径

通过在路径表达式中使用"|"运算符,您可以选取若干个路径。

表达式描述
//book/title | //book/price选取 book 元素的所有 title 和 price 元素
//title | //price选取文档中的所有 title 和 price 元素
/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素

绝对路径定位

driver.findElement(By.xpath("/bookstore/book"));

相对路径定位

driver.findElement(By.xpath("//book"));

元素索引定位

driver.findElement(By.xpath("//book[1]"));

节点属性定位

driver.findElement(By.xpath("//book/title[@lang='eng']"));

文本内容定位

driver.findElement(By.xpath("//title[text()='Harry Potter']"));
driver.findElement(By.xpath("//title[contains(text(),'Harry')]"));

模糊匹配定位

//注意:有的版本的浏览器不支持ends-with
driver.findElement(By.xpath("//title[contains(text(),'Harry')]"));
driver.findElement(By.xpath("//title[starts-with(text(),'Harry')]"));
driver.findElement(By.xpath("//title[starts-with(@lang,'Harry')]"));
driver.findElement(By.xpath("//title[ends-with(@lang,'Potter')]"));

Axis(轴)定位

轴名称结果
ancestor::book上面所有名为book的直系节点;
ancestor-or-self::book上面所有名为book的直系节点,及名为book的本节点;
//book/attribute::lang当前节点的属性
child::book下层所有名为book的子节点;
descendant::book下层种所有名为book的节点
descendant-or-self::book下层种所有名为book的节点,包括当前节点(如果为book)
following::book选取文档中当前节点的结束标签之后的所有名为book的节点;
following-sibling::book选取当前节点之后的所有名为book的同级节点;
parent::book上一层名为book的父节点;
preceding::book选取文档中当前节点的开始标签之前的所有名为book的节点;
preceding-sibling::book选取当前节点之前的所有名为book的同级节点;
//选取'Harry Potter'这本书之后的所有book节点
driver.findElement(By.xpath("//title[text()='Harry Potter']/parent::book/following-sibling::book"));

布尔定位

Xpath = "//book[price>39 and price<40]"
Xpath = "//book[price>39 or price<30]"
Xpath= "//input[@type='button' and @name='login']"

xpath调试

未来确保我们的xpath书写无误,我们可以在 console控制台进行Xpath的调试,输入$x(“Xpath表达式”)运行:

$x("//a[starts-with(text(),'新闻')]")

xpath console端调试

最后

以上就是搞怪冰淇淋为你收集整理的Selenium_元素定位之xpath详解什么是xpathXML 实例文档xpath基本语法绝对路径定位相对路径定位元素索引定位节点属性定位文本内容定位模糊匹配定位Axis(轴)定位布尔定位xpath调试的全部内容,希望文章能够帮你解决Selenium_元素定位之xpath详解什么是xpathXML 实例文档xpath基本语法绝对路径定位相对路径定位元素索引定位节点属性定位文本内容定位模糊匹配定位Axis(轴)定位布尔定位xpath调试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部