我想检查“访问我的帐户”末尾的文本是否出错
<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: invalid selector: The result of the xpath expression "//html//p[@class='breadcrumb'] /text()[last()]" is: [object Text]. It should be an element.
最佳答案
实际上“文本”是正确的。 Xpath 方法 text()
获取文本节点。
你的 Xpath 表达式一步一步:
- 作为任何
html
元素后代的任何p
元素
//html//p
- ...通过
class
属性过滤p
元素
//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
"
如您所见,它匹配一个文本节点。
关于php - xpath表达式的结果是 : [object Text]. 应该是一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59220755/