javascript - elementHandle.$x(expression) 似乎没有相对于给定的 elementHandle 运行

标签 javascript jestjs puppeteer

我有以下代码获取“总线”层的元素句柄(在 32 个不同层的列表中)

const [layerFound] = await page.$x("//div[@class='layer']/label[.='Buses']/..");

然后我需要对该“层”对象中的其他元素执行一些激活/验证。但是下一行并没有从 Buses 层中获取“visible-toggle”对象,而是从 32 列表的第一层中获取对象。

const [layerVis] = await layerFound.$x("//div[contains(@class, 'layer-option visible-toggle')]");

我的理解是 elementHandle.$x(expression) 计算相对于 elementHandle 的 XPath 表达式。但它是相对于页面对象进行的。

其中有很多。第一个是“桥梁”。哪个是被发现/使用的。

<div class="layer">
  <label class="layer-label"><div>Buses</div></label>
  <div class="layer-option entity-count"><div>(629)</div></div>
  <div class="layer-option visible-toggle ">...</div>
  <div class="layer-option layer-preferences-toggle">...</div>
</div>

最佳答案

您需要使用相对的 XPath:

const [layerVis] = await layerFound.$x(".//div[contains(@class, 'layer-option visible-toggle')]");

(XPath 表达式前的点)

否则您的 XPath 将再次从文档根目录搜索。

关于javascript - elementHandle.$x(expression) 似乎没有相对于给定的 elementHandle 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57188471/

相关文章:

javascript - JavaScript 的 Pep-8 样式指南

reactjs - React 单元测试传单

javascript - 如何使用下划线在 javascript 中检查 "undefined"?

javascript - 将脚本 src 包含到 js 文件中

javascript - 使用 select2 添加 "data-"属性

reactjs - 如何让 jest 使用与 create-react-app 上的 react-script 测试相同的配置运行?

typescript - 如何使用 jest 测试对同一函数的特定调用序列

aws-lambda - 在 Netlify Lambda 上运行 puppeteer

node.js - npm install puppeteer 显示权限被拒绝错误

javascript - 为什么 Puppeteer-firefox 在服务器上不起作用?