为什么 $x return 项在上下文之外?
Why does $x return items outside of the context?
我正在尝试在 Firefox 中使用 Selenium 驱动程序的 Codeception 测试上下文中使用 xpath 定位器。具体来说,我试图点击电子邮件正文中的第二个 link,使用 roundcube 查看。
电子邮件正文在 div 中,xpath //div[@class="rcmBody"]
我可以通过以下路径获得 link:(//div[@class="rcmBody"]//a)[2]
但出于某种原因,当我在正文 div 的上下文中尝试 //a[2]
时,它 returns iframe 中的所有 a
元素。
来自 codeception 的示例:(在选择正确的 iframe 之后)
$I->click('//a[2]', '//div[@class="rcmBody"]')
这会导致网络驱动程序单击 iframe 中的第二个 link,它位于正文 div 开始之前。
我也可以直接在 chrome:
中测试
$x('//a', $x('//div[@class="rcmBody"]')[0])
此 returns iframe 中所有 a
元素的列表,不在上下文中。
如何让上下文部分起作用?
在 XPath 的开头添加一个点以使其 上下文特定:
$I->click('(.//a)[2]', '//div[@class="rcmBody"]')
HERE^
请注意,此处的括号对于获得所需的 a
父代后代也很重要。
我正在尝试在 Firefox 中使用 Selenium 驱动程序的 Codeception 测试上下文中使用 xpath 定位器。具体来说,我试图点击电子邮件正文中的第二个 link,使用 roundcube 查看。
电子邮件正文在 div 中,xpath //div[@class="rcmBody"]
我可以通过以下路径获得 link:(//div[@class="rcmBody"]//a)[2]
但出于某种原因,当我在正文 div 的上下文中尝试 //a[2]
时,它 returns iframe 中的所有 a
元素。
来自 codeception 的示例:(在选择正确的 iframe 之后)
$I->click('//a[2]', '//div[@class="rcmBody"]')
这会导致网络驱动程序单击 iframe 中的第二个 link,它位于正文 div 开始之前。
我也可以直接在 chrome:
中测试$x('//a', $x('//div[@class="rcmBody"]')[0])
此 returns iframe 中所有 a
元素的列表,不在上下文中。
如何让上下文部分起作用?
在 XPath 的开头添加一个点以使其 上下文特定:
$I->click('(.//a)[2]', '//div[@class="rcmBody"]')
HERE^
请注意,此处的括号对于获得所需的 a
父代后代也很重要。