java xpath html_java selenium:XPath 定位

本文介绍了XPath在Java Selenium中用于HTML元素定位的方法,包括绝对路径和相对路径定位,以及使用索引、属性和模糊匹配进行定位。XPath虽然强大,但因全页面扫描可能导致脚本执行速度减慢,故需谨慎使用。
摘要由CSDN通过智能技术生成

xpath 的定位方法, 非常强大。  使用这种方法几乎可以定位到页面上的任意元素。

阅读目录什么是xpath

xpath定位的缺点

testXpath.html 代码如下

绝对路径定位方式

使用浏览器调试工具,可以直接获取xpath语句

绝对路径的缺点

绝对路径和相对路径的区别

相对路径定位方式

使用索引号定位

使用页面属性定位

模糊定位starts-with关键字

模糊定位contains关键字

text() 函数 文本定位

什么是xpath

xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。

xpath定位的缺点

xpath 这种定位方式, webdriver会将整个页面的所有元素进行扫描以定位我们所需要的元素, 这是个非常费时的操作,  如果脚本中大量使用xpath做元素定位的话, 脚本的执行速度可能会稍慢

testXpath.html 代码如下

AAffA0nNPuCLAAAAAElFTkSuQmCC

Test Xpath    
                 搜狗搜索        搜狗图片            
    
                 百度搜索        百度图片    

AAffA0nNPuCLAAAAAElFTkSuQmCC

绝对路径定位方式

在被测试网页中, 查找第一个div标签中的按钮

XPath的表达式/html/body/div/input[@value="查询"]WebElement button = driver.findElement(By.xpath("/html/body/div/input[@value='查询']"));

使用浏览器调试工具,可以直接获取xpath语句

AAffA0nNPuCLAAAAAElFTkSuQmCC

绝对路径的缺点

1. 一旦页面结构发生改变,改路径也随之失效,必须重新。 所以不推荐使用绝对路径的写法

绝对路径和相对路径的区别

绝对路径  以 "/"  开头, 让xpath 从文档的根节点开始解析

相对路径  以"//" 开头, 让xpath 从文档的任何元素节点开始解析

相对路径定位方式

在被测试网页中,查找第一个div标签中的按钮

XPath的表达式//input[@value="查询"]WebElement button = driver.findElement(By.xpath("//input[@value='查询']"));

使用索引号定位

在被测试网页中, 查找第二个div标签中的"查询"按钮//input[2]WebElement button = driver.findElement(By.xpath("//input[2]"));

使用页面属性定位

定位被测试页面中的第一个图片元素//img[@alt='div1-img1']WebElement button = driver.findElement(By.xpath("//img[@alt='div1-img1']"));

模糊定位starts-with关键字

查找图片alt属性开始位置包含'div1'关键字的元素//img[starts-with(@alt,'div')]

模糊定位contains关键字

查找图片alt属性包含'g1'关键字的元素//img[contains(@alt,'g1')]

text() 函数 文本定位

查找所有文本为"百度搜索" 的元素driver.findElement(By.xpath("//*[text()='百度搜索']"));

查找所有文本为“搜索” 的超链接driver.findElement(By.xpath("//a[contains(text(),'搜索')]"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JsoupXpath 是一款纯Java开发的使用xpath解析html的解析器,xpath语法分析与执行完全独立,html的DOM树生成借助Jsoup,故命名为JsoupXpath.为了在java里也享受xpath的强大与方便但又苦于找不到一款足够强大的xpath解析器,故开发了JsoupXpath。JsoupXpath的实现逻辑清晰,扩展方便,支持几乎全部常用的xpath语法.http://www.cnblogs.com/ 为例 "//a/@href"; "//div[@id='paging_block']/div/a[text()='Next >']/@href"; "//div[@id='paging_block']/div/a[text()*='Next']/@href"; "//h1/text()"; "//h1/allText()"; "//h1//text()"; "//div/a"; "//div[@id='post_list']/div[position()1000]/div/h3/allText()"; //轴支持 "//div[@id='post_list']/div[self::div/div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()"; "//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()"; "//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()|//div[@id='post_list']/div[1]/div/h3/allText()"; 在这里暂不列出框架间的对比了,但我相信,你们用了会发现JsoupXpath就是目前市面上最强大的的Xpath解析器。 快速开始 如果不方便使用maven,可以直接使用lib下的依赖包跑起来试试,如方便可直接使用如下dependency(已经上传至中央maven库,最新版本0.1.1):    cn.wanghaomiao    JsoupXpath    0.1.1 依赖配置好后,就可以使用如下例子进行体验了!String xpath="//div[@id='post_list']/div[./div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()";String doc = "..."; JXDocument jxDocument = new JXDocument(doc); List<Object> rs = jxDocument.sel(xpath); for (Object o:rs){     if (o instanceof Element){             int index = ((Element) o).siblingIndex();             System.out.println(index);     }     System.out.println(o.toString()); } 其他可以参考 cn.wanghaomiao.example包下的例子 语法 支持标准xpath语法(支持谓语嵌套),支持全部常用函数,支持全部常用轴,去掉了一些标准里面华而不实的函数和轴,下面会具体介绍。语法可以参考http://www.w3school.com.cn/xpath/index.asp 关于使用Xpath的一些注意事项 非常不建议直接粘贴Firefox或chrome里生成的Xpa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值