我想检查错误的“访问我的帐户”末尾的文本
<p class="breadcrumb">
<a href="http://www.testsite/comm/index-eng.html" title="Titleblock">Home</a> > <a href="https://testsite.com" title="Title1">Text1</a> > <a href="index-eng.cfm?af=ZnVzZWFjdGlvbj1yZWdpc3Rlci5pbnRybyZpZD0x" title="Test Purpose">Test text</a> > Access my Account
</p>
错误:
WebDriver \ Exception \ InvalidSelector:无效选择器:xpath表达式“ // html // p [@ class ='breadcrumb'] / text()[last()]”的结果是:[对象文本]。应该是一个元素。
答案 0 :(得分:0)
实际上“文字”是正确的。 Xpath方法text()
获取文本节点。
您的Xpath表达式逐步:
p
元素的后代中的任何html
元素//html//p
p
属性过滤class
元素//html//p[@class='breadcrumb']
//html//p[@class='breadcrumb']/text()
//html//p[@class='breadcrumb']/text()[last()]
现在从错误消息中看,您好像正在使用Behat。 afaik Behat在网络驱动程序(浏览器或渲染器)中执行表达式。在浏览器DOM中,文本节点是类Text的实例。
这是PHP DOM中的一个小演示:
$document = new DOMDocument();
$document->loadHTML($html);
$xpath = new DOMXpath($document);
foreach ($xpath->evaluate("//html//p[@class='breadcrumb']/text()[last()]") as $node) {
var_dump(get_class($node), $node->textContent);
}
输出:
string(7) "DOMText"
string(23) " > Access my Account
"
如您所见,它与文本节点匹配。