php - xpath表达式的结果是 : [object Text]. 应该是一个元素

标签 php html css xpath

我想检查“访问我的帐户”末尾的文本是否出错

<p class="breadcrumb">
    <a href="http://www.testsite/comm/index-eng.html" title="Titleblock">Home</a>&nbsp;&gt;&nbsp;<a href="https://testsite.com" title="Title1">Text1</a>&nbsp;&gt;&nbsp;<a href="index-eng.cfm?af=ZnVzZWFjdGlvbj1yZWdpc3Rlci5pbnRybyZpZD0x" title="Test Purpose">Test text</a>&nbsp;&gt;&nbsp;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/

相关文章:

php - 使用两个不同的 foreach 循环 PHP/SQL 添加到同一个数组

php - 如何计算与连接中另一行专门匹配的条目

javascript - 将动画计数器计算出的值

javascript - 对进度条进行逆时针制作

css - Flexbox:等高行?

css - ionic 如何修复 ion-content 以填充设备屏幕尺寸

php - Zend Framework : Form: Should I use camelCase for form element names & DB tables, 与否?

php - 使用php表单将图片上传到mysql

html - ul标签内容对齐

css - (CSS) 高度拉伸(stretch)与顶部 : 0 and bottom: 0 with Pseudo-Element?