Xpath定位绝密版本
xpath的作用就是两个字“定位”,
运用各种方法进行快速准确的定位,推荐两个非常有用的的firefox工具:firebug和xpath checker 在 XPath 中,
有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点
XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点
节点关系
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
父节点:每个元素及属性都有父节点。
子节点:元素节点可以有0个或1个或n个子节点。
同胞节点:拥有相同父节点的节点。
先辈节点:某个节点的父节点,祖父节点等等。
后代节点:某个节点的子节点,孙子节点等等。
book 元素是 title、author、year 以及 price 元素的父节点
title、author、year 以及 price 元素都是 book 元素的子节点
title、author、year 以及 price 元素都是同胞节点
title 元素的先辈是 book 元素和 bookstore 元素
bookstore 的后代是 book、title、author、year 以及 price 元素 bookstore 选取 bookstore 元素的所有子节点
/bookstore 选取根元素 bookstore
bookstore/book 选取属于 bookstore 的子元素中的所有 book 元素
bookstore//book 选择属于 bookstore 的后代中的所有 book 元素,
而不管它们位于 bookstore 之下的什么位置
//book 选取所有 book 子元素,而不管它们在文档中的位置
//@lang 选取名为 lang 的所有属性 Predicates谓语用来查找某个特定的节点或者包含某个指定的值的节点
谓语被嵌在方括号中 /bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素
/bookstore/book[position()<] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,
且其中的 price 元素的值须大于 35.00
/bookstore/* 选取 bookstore 元素的所有子元素
//* 选取文档中的所有元素
//title[@*] 选取所有带有属性的 title 元素
通过在路径表达式中使用“|”运算符,您可以选取若干个路径
//book/title | //book/price 选取 book 元素的所有 title 和 price 子元素节点
//title | //price 选取文档中的所有 title 和 price 元素节点
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,
以及文档中所有的 price 元素
xpath语法
. 代表当前节点路径
..代表当前节点路径的父节点
* 匹配任何标签元素节点
@*匹配人和属性节点
node()匹配任何类型的节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
@ 选取属性
定位
1.依靠自己属性,文本定位
//td[text()='xxx']
//div[contains(@class,'xxx')]
//div[@class='xxx' and @type='xxx']
2.依靠父节点定位
//div[@class='xxx']/div
//div[@id='xxx']/div
3.依靠子节点定位
//div[div[@id='xxx']]
//div[div[@name='xxx']]
4.混合型
//div[div[@name='xxx']]/img
//td[a/font[contains(text(),'xxx')]]//input[@type='xxx']
xpath的学习-拓展
1.following-sibling
following-sibling即为“选择当前节点之后的所有同级节点”,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念,例如:
<div>
<input id="123">
<input>
</div>
要定位第二个input://input[@id='123']/following-sibling::input 2.preceding-sibling
preceding-sibling的解释是“选取当前节点之前的所有同级节点”,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念,
preceding-sibling和following-sibling是刚好相反的
<div>
<span>text</span>
<input id="123">
</div>
要定位第二个input://input[@id='123']/preceding-sibling::span 3.contains
和字面意思一样就是包含,例如://div[contains(@class,'xxx')] 4.starts-with
和字面意思一样就是以某某开头,例如://input[starts-with(@class,'xxx')] 5.not
就是否定的意思
比如找一个id不为123的input:input[not[id='123']]
又如找一个文本中不包含xxx字段的span://span[not(contains(text(),'xxx'))]
xpath的学习-补充
绝对路径 html/body/div/span[2]/input[2] 中间结构变化,就失效
相对路径 //开始,在整个html source里找,不管在什么位置
索引[x] //div/input[2] div下面第二个input
position()=2
position()>3
position()<3
last()
last()-1
属性定位 //div[@class] 有class属性的div
属性值定位, //div[@class='xxx'] 功能关键字
1.常用
and或者[][],
比如://span[@name='xxx' and text()='xxx']
也是可以写成//span[@name='xxx'][text()='xxx'] or,比如以上面html为例子,定位文本为test position()5和test position()4的span://div[@id='positions']/span[text()='test position()5' or text()='test position()4']
not,
contains,
starts-with
ends-with 在xpath中是没有这个的
通配符 *
比如//span[@*="xxx"]指定位span中任意属性包含xxx的
比如//*[@*="xxx"]指定位页面中任意属性保护xxx的标签 测试实例
By.xpath(".//a/span[contains(text(),'前端开发')]")
By.xpath("//span[@name='username' and text()='用户名']")
By.xpath("//div[class='item']/li[3]")
By.xpath("//*[@id="main"]/div[2]/div/div[9]/div[4]")

xpath=/html/body/form[1] - 绝对路径(如果HTML只是稍微改变,会中断)
//form[1] - HTML中的第一个表单元素
xpath=//form[@id='loginForm'] - 属性名为“id”和值为“loginForm”的表单元素
xpath=//form[input/@name='username'] - 具有输入子元素的第一个表单元素,其属性名为“name”,值为“username”
//input[@name='username'] - 第一个输入元素的属性名为“名称”和值“用户名”
//form[@id='loginForm']/input[1] - 首先输入具有名为“id”的属性和值“loginForm”的表单元素的子元素
//input[@name='continue'][@type='button'] - 输入属性名为'name',值为'continue',属性名为'type',值'button'
//form[@id='loginForm']/input[4] - 表单元素的第四个输入子元素,其属性名为“id”,值为“loginForm”
Xpath定位绝密版本的更多相关文章
- UI自动化测试(二)浏览器操作及对元素的定位方法(xpath定位和css定位详解)
Selenium下的Webdriver工具支持FireFox(geckodriver). IE(InternetExplorerDriver).Chrome(ChromeDriver). Opera( ...
- 初探UiAutomator2.0中使用Xpath定位元素
J 今天的主题是讲一下在使用过程中遇到的一个问题,如何在UiAutomator2.0中使用Xpath定位元素? 背景 现在的app在打包成apk的时候都是有加固处理的,各种混淆加固,所以已经破坏了或扰 ...
- java selenium (六) XPath 定位
xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. 阅读目录 什么是xpath xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面, ...
- 常用的CSS定位,XPath定位和JPath定位
CSS定位 举例 描述 div#menu id为menu的div元素 div.action-btn.ok-btn class为action-btn和ok-btn的div元素 table#emailLi ...
- selenium之xpath定位和input文本
selenium之xpath定位和input文本 xpath简单定位: 打开浏览器的F12 在自己需要定位的元素的那里右键 选择copy->xpath selenium获取input下的文本: ...
- 5.5.8 XPath定位
1.什么是XPath XPath定位方式是自动化测试定位技术中的必杀技,几乎可以解决所有的定位难题.它是XML Path语言的缩写,主要用于在XML 文档中选择文档中的节点.基于XML树状文档结构,X ...
- selenium+python自动化之xpath定位
在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. 什么是 ...
- Xpath定位大全
selenium使用Xpath定位之完整篇 其中有一片文章提到了xpath元素定位,但是该文章中有些并不能适应一些特殊与个性化的场景.在文本中提供xpath元素的定位终极篇,你一定能在这里找到你需 ...
- appium的xpath定位
做自动化,元素定位是我们遇到的第一个困难.总是会有各种各样的问题,导致我们定位不到元素.前面一篇博客也写了元素定位的几种方法,今天主要分享一下xpath的定位方法. 这里我们仍然拿计算器举例. 比如我 ...
随机推荐
- GIF助手激活教程(购买+激活)图文版
GIF助手首页==>设置(右上角) ==>输入激活码会弹出购买或者激活的对话框.(如果不明白操作,可以点击如何购买激活码先查看购买帮助指南再进行购买) 点击复制设备码并购买. 此时会进入到 ...
- Java探索之旅(9)——数据和方法的可见性
注意,在UML图中,public-protected-private分别用+,-,#表示. 类中成员修饰符 在同一类访问 在同一包访问 在子类内访问 在不同包可访问 Public √ √ √ √ Pr ...
- Animations使用01 BrowserAnimationsModule
1 基础知识 1.1 动画 就是从一个状态过渡到另外一个状态 1.2 状态 元素本身的形状.颜色.大小等 1.3 Angular中的动画 给元素添加一个触发器,当这个触发器被触发后就会让该元素的状态发 ...
- CF1041F Ray in the tube
挂上Chester大神的解题报告 有一个思维跳跃的地方,就是不应该枚举所有的$B$点,而是应该在选定一个$A$点之后枚举距离计算. 然后我们发现枚举距离是$2^k$的长度就可以了,证明如下: 假如距离 ...
- 1.QObject类
简述 QObject类是所有Qt对象的基类. QObject是Qt对象模型的核心. 该模型的核心特征是称为信号和槽的对象通信机制. 您可以使用connect()将信号连接到槽,并用disconnect ...
- LINQ中的陷阱--TakeWhile&SkipWhile
在用TakeWhile,SkipWhile设置陷阱之前,我们先来看一看他们的兄弟Take和Skip: public static IEnumerable<T> Take<T>( ...
- Unity 点乘与叉乘 计算敌人位置
点乘:表示两个向量夹角 a*b=|a| * |b| * cos(ab),判断敌人在前后方 叉乘:表示两向量的法线
- 【Java面试题系列】:Java中final finally finalize的区别
本篇为[Java面试题系列]第三篇,文中如有错误,欢迎指正. 第一篇链接:[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 第二篇链接:[Java面试题系列]:Java基础知识常见面试题 ...
- SpringBoot第五篇:整合Mybatis
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10869315.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 ORM框架 ...
- GoWeb开发_Iris框架讲解(二):Get、Post、Put等请求及数据返回格式
数据请求方式的分类 所有的项目中使用的请求都遵循HTTP协议标准,HTTP协议经过了1.0和1.1两个版本的发展. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP ...