XPath(XML Path Language)是一种查询语言,用于在XML或HTML文档中定位节点元素。Selenium广泛使用XPath来定位网页中的元素,尤其适用于复杂的层级结构或属性定位。
1. 基本语法与案例
语法 | 描述 | 示例 | 案例 |
---|---|---|---|
/ |
绝对路径,从根节点开始 | /html/body/div |
定位根节点下的第一个div 元素。 |
// |
相对路径,从任意位置开始 | //div |
定位文档中所有的div 元素。 |
* |
匹配任意元素 | //*[@class='btn'] |
定位class为btn 的所有元素。 |
@ |
属性定位 | //input[@id='username'] |
定位id="username" 的输入框。 |
text() |
定位包含特定文本内容的元素 | //button[text()='提交'] |
定位文本内容为"提交"的按钮。 |
contains() |
模糊匹配,包含指定值 | //div[contains(@class, 'header')] |
定位class包含header 的所有div 元素。 |
starts-with() |
定位以指定值开头的属性 | //input[starts-with(@id, 'user')] |
定位id 以user 开头的输入框。 |
2. XPath 轴选择
轴语法 | 描述 | 示例 | 案例 |
---|---|---|---|
parent:: |
定位父节点 | //button/parent::div |
定位按钮的父节点div 。 |
child:: |
定位子节点 | //div/child::p |
定位div 的直接子节点p 元素。 |
ancestor:: |
定位祖先节点 | //span/ancestor::div |
定位span 的所有祖先节点div 元素。 |
descendant:: |
定位后代节点 | //div/descendant::span |
定位div 下的所有后代节点span 。 |
following-sibling:: |
定位后续兄弟节点 | //h2/following-sibling::p |
定位h2 标签之后的所有兄弟节点p 元素。 |
preceding-sibling:: |
定位前面的兄弟节点 | //h2/preceding-sibling::p |
定位h2 标签之前的所有兄弟节点p 元素。 |
3. XPath 高级用法
3.1 多条件定位
//input[@type='text' and @placeholder='请输入用户名']
案例 :定位一个输入框,要求type="text"
且placeholder="请输入用户名"
。
3.2 分组定位
//div[@id='menu'] | //span[@class='icon']
案例 :同时定位id="menu"
的div
和class="icon"
的span
。
3.3 索引定位
//ul/li[3]
案例 :定位列表中第3个li
元素。
4. 结合案例使用
4.1 定位登录表单
//form[@id='loginForm']/input[@name='username']
解释 :定位id="loginForm"
的表单内,name="username"
的输入框。
4.2 定位特定表格单元格
//table[@id='dataTable']/tbody/tr[2]/td[3]
解释 :定位id="dataTable"
表格的第2行、第3列。
5. 特殊场景用法
5.1 子节点查找父节点
//span[@class='child']/parent::div
案例 :通过class="child"
的span
元素定位其父节点div
。
5.2 使用文本的模糊查找
//a[contains(text(), '更多')]
案例:定位文本中包含"更多"的链接。
5.3 动态元素定位
//button[starts-with(@id, 'submit')]
案例 :定位id
以submit
开头的按钮。
5.4 复合条件与轴结合
//div[@class='content']/descendant::p[text()='文章正文']
案例 :定位class="content"
的div
中,包含文本"文章正文"的p
元素。
6. XPath 调试技巧
- 浏览器工具:使用 Chrome 或 Firefox 的开发者工具,在控制台中直接测试 XPath 表达式。
- 高效定位 :尽量避免使用绝对路径(
/html/body/...
),多使用相对路径(//div
)。 - 结合调试工具:如插件 XPath Helper 或 Selenium IDE 快速验证 XPath。