我正在使用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.
答案 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']