只能向前查询。这意味着使用 XPath 可以通过子元素来定位父元素。
1.通过绝对路径定位元素
和 CSS 绝对路径相似,XPath 绝对路径适用于指定元素的位置。这里的一个例子就是使用
绝对路径来定位用户名的字段。在每一个元素之间需要有一个空格。
WebElement userName=driver.findElement(By.xpath("html/body/div/div/form/input"));
但是,这个策略有局限性,他需要参考整个页面的文档结构。如果改变了,此元素的定位将会
失效。
2.通过相对路径定位元素
用相对路径,我们可以直接找到元素而不管其在 DOM 中的位置。例如,我们可以通过如下
方法来定位用户名字段,假设这个元素处于 DOM 中第一个:
WebElement userName=driver.findElement(By.xpath("//input"));
3.使用索引来定位元素
在前面的示例中,XPath 查询将返回第一个 DOM 中元素。可能会有多个元素都匹
配了 XPath 查询。如果元素不是第一个元素,我们也可以指定他的个数来找到它。例如在我
们的登录表单,我们可以找到密码字段 - 第二个,方法如下:
WebElement password=driver.findElement(By.xpath("//input[2]"));
4.使用 XPath 及属性值定位元素
和 CSS 相似,我们可以在 XPath 中使用元素的属性来定位元素。在下面的例子中,可以使
用 ID 属性来定位用户名字段。
WebElement userName=driver.findElement(By.xpath("//input[@id='userName']"));
另一个使用 alt 属性来定位 image 属性的例子:
WebElement previousButton=driver.findElement(By.xpath("img[@alt='Previous']"));
你可能会遇到一个属性不足以来定位到一个元素的情况,你需要联合使用其他的属性来达到
精确匹配。下面的例子中,使用多个属性来定位元素。
WebElement previousButton = driver.findElement(By.xpath("//input[@type='submit'][@value='login']"));
使用 XPath 和 and 操作符也同样可以达到相同的效果
WebElement previousButton = driver.findElement(By.xpath("//input[@type='submit' and @value='login']"));
下面的例子中,使用 or 操作符任何一个属性满足也将可以对元素进行定位
WebElement previousButton = driver.findElement(By.xpath("//input[@type='submit' or @value='Login']"));
5.使用 XPath 及属性名称定位元素
这个策略和之前的有些不同,我们叧通过指定元素中属性的名称而不是属性的值来定位元素。
例如,我们想要查找所有标签中,含有 alt 属性的元素。
List
6.部分属性值的匹配
类似于CSS 选择器,XPath 还提供了一种一些方法部分匹配属性来定位元素。这对于网页
中的属性在动态发化的时候是非常有用的。例如,ASP.NET 应用程序中动态生成 id 属性
值。下面的表说明了使用这些 XPath 功能:
语法 | 例子 | 描述 |
starts-with() | input[starts-with(@id,'ctrl')] | 例如,如果元素的 ID 为 ctrl_12,将会匹配以 ctrl 开始的属性值。 |
ends-with() | input[ends-with(@id,'_userName')] | 例如,如果元素的 ID 为 a_1_userName,将会匹配 以 userName 结尾的属性 值。 |
contains() | input[contains(@id,'userName')] | 例如,如果元素的 ID 为 panel_login_userName _textfield,将会匹配含 有 userName 属性值。 |
7.使用值来匹配任意属性及元素
XPath 可以匹配任意元素属性中指定的值。例如,在下面的 XPath 查询中,“userName”
是指定的。XPath 将会检查所有元素中是否有属性等于”userName”,并将其返回。
WebElement userName =driver.findElement(By.xpath("//input[@*='username']"));
8.使用 XPath 轴来定位元素
XPath 轴是借助于文档中元素不元素之间的关系来定位。下面有一个简单的的
XPath 轴的例子。