Mink中的XPath错误:无法对'Document'执行'evaluate':结果不是节点集,因此无法转换为所需的类型

时间:2014-02-21 21:42:10

标签: php xpath behat mink

我正在使用Mink和Belen的Selenium2驱动程序进行一些验收测试,而且大多数情况下,一切进展顺利。

但是,我正在尝试使用XPath基于data- *属性来定位元素,并且测试会对其进行阻塞。

我已经使用了XPathHelper和FirePath,我的XPath检查了这两个扩展:

//html//@data-search-id='images'

这似乎是针对正确的元素。

但是,当我将以下内容添加到FeatureContext.php

$el = $this->getSession()->getPage()->find('xpath', $this->getSession()->getSelectorsHandler()->selectorToXpath('xpath', "//@data-search-id='images'"));
$el->click();

我从Behat收到以下错误:

invalid selector: Unable to locate an element with the xpath expression
//html//@data-search-id='images' because of the following error:

TypeError: Failed to execute 'evaluate' on 'Document':
The result is not a node set, and therefore cannot be converted
to the desired type.

2 个答案:

答案 0 :(得分:3)

你的XPath表达式是一个完全有效的表达式 - 它会找到所有@data-search-id属性,如果其中一个属于' images'则返回true,否则返回false。

但是你想点击一个项目,显然点击一个布尔值是相当困难的。查询满足条件的项目(因此,将比较移动到谓词中):

//html//*[@data-search-id='images']

此外,我删除了//html。 HTML节点无论如何都必须是根节点,所以/html本来没问题(没有理由在所有子树中搜索它)。当您正在搜索它的任意后代时,这将不是根节点(如<html/>所示),完全省略它不会改变XPath表达式的含义。

//*[@data-search-id='images']

答案 1 :(得分:1)

我认为您正在寻找的XPath是:

//html//*[@data-search-id='images']