我试图在上下文中使用xpath定位器进行Codeception测试,使用Selenium驱动程序和Firefox。具体来说,我试图点击电子邮件的邮件正文中的第二个链接,使用roundcube查看。
电子邮件的正文位于包含xpath //div[@class="rcmBody"]
我可以获得此路径的链接:(//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
元素的列表,而不是在上下文中。
如何让上下文部分起作用?
答案 0 :(得分:1)
在XPath的开头添加一个点,使其特定于上下文:
$I->click('(.//a)[2]', '//div[@class="rcmBody"]')
HERE^
请注意,此处的括号对于获取父级的所需a
后代也很重要。