新手到xpath

时间:2014-06-04 05:05:58

标签: xpath onclick

我想知道如何为以下内容创建xpath,我需要点击Test2,然后打开一个新窗口。

<div class="example">
<a href="#" onclick="parent.navigateFrame('../test/test.aspx', 'Test2'); return false;" target="_self">
<h1>Test2</h1>
</a>
<p></p>
</div>

我是这一切的新手,所以需要一段时间来弄清楚如何形成xpath。 我尝试了以下方法但没有成功。

(1) xpath(//*[contains(@class, 'example' and @onclick, 'Test2')]

(2) xpath(//*[contains(@class, 'example' and @onclick, 'parent.navigateFrame('../test/test.aspx', 'Test2')')])

有人可以帮帮我吗?

谢谢

1 个答案:

答案 0 :(得分:2)

这个表达式:

//div[@class='example']/a

有两个步骤(由/分隔)。第一个将选择div,其class属性包含文本example。最后一个(您想要的元素)将选择a中的所有div元素。

要获取第一个 a元素,您可以添加谓词:

//div[@class='example']/a[1]

这是位置谓词。根据您的尝试,您需要对谓词检查其他内容,例如onclick属性中的值。在这种情况下,您应该使用:

//div[@class='example']/a[contains(@onclick, 'Test2')]

如您所见,第一个谓词用于限制div。诸如//div之类的表达式会在您的文件中选择所有 div。谓词限制了这一点。 [@class='example']将该集合缩减为div的集合,其中class属性包含'example'

但你不想要div。您需要a才能点击。所以现在再继续一步。除非您在路径前添加parent::following::之类的内容,否则您使用的是child::轴,即默认。这意味着每个步骤将向下移动到树节点。由于adiv的孩子,因此您可以使用div/a(与child::div/child::a相同)。同样,它会在上下文中选择所有 a元素,因此您需要再次使用a元素的一个或多个谓词进行限制。 / p>

如果 example中除了div之外可能还有其他类,您可以使用contains()(例如:<div class="some-class example some-other-class">,但请注意它可能比您期望的更多(example-1my-example也会匹配contains(@class, 'example')