为什么$ x会返回上下文之外的项目?

时间:2015-12-19 14:51:22

标签: html xpath codeception

我试图在上下文中使用xpath定位器进行Codeception测试,使用Selenium驱动程序和Firefox。具体来说,我试图点击电子邮件的邮件正文中的第二个链接,使用roundcube查看。

电子邮件的正文位于包含xpath //div[@class="rcmBody"]

的div中

我可以获得此路径的链接:(//div[@class="rcmBody"]//a)[2]

但出于某种原因,当我在body div的上下文中尝试//a[2]时,它会返回iframe中的所有a个元素。

代码示例:(选择正确的iframe后)

$I->click('//a[2]', '//div[@class="rcmBody"]')

这会导致网络驱动程序点击主体div开始之前的iframe中的第二个链接。

我也可以直接在chrome中测试这个:

$x('//a', $x('//div[@class="rcmBody"]')[0])

这会返回iframe中所有a元素的列表,而不是在上下文中。

如何让上下文部分起作用?

1 个答案:

答案 0 :(得分:1)

在XPath的开头添加一个点,使其特定于上下文

$I->click('(.//a)[2]', '//div[@class="rcmBody"]')
        HERE^

请注意,此处的括号对于获取父级的所需a后代也很重要。