javascript - Nightmarejs,单击文本(如果存在)

标签 javascript node.js nightmare

我使用 NightmareJS 进行 headless 测试。

有时,像这样的元素会出现在我正在浏览的网站的 DOM 中。

<div>Error</div>

div 上没有ID。我需要一种方法来测试当前页面上是否存在带有 innerText“错误”的 div,如果存在,请单击该 div。 (上面有一个事件处理程序)。

我目前的做法:

.evaluate(()=>{
var elements = Array.from(document.querySelectorAll('div')).filter(div=>/Error/.test(div.innerText));
console.log(elements);
elements[0].click();
})

但是,元素总是空的。有更好的想法吗?

最佳答案

问题 1:元素数组为空,即使元素存在。

过滤器没有返回任何数据,您需要使用正确的过滤器。在过滤器而不是那个正则表达式中使用这个怎么样?

div.innerText.includes('Error')

问题 2:检查元素是否存在,如果存在则点击它。

elements[0] && elements[0].click();

调用一个元素或任何类似的变量将返回一个 truthy&& 将确保它仅在 elements[0] 返回一个 truthy 值时调用 .click() .

可以多清理一下,

const element = elements[0];
!!element && element.click();

考虑页面中有一个元素,在这种情况下,

  • !element 表示元素不存在或!element = false
  • !!element 表示 !false,这反过来表示 true

这只会确保在最终值为 truefalse 时运行。

关于javascript - Nightmarejs,单击文本(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50976710/

相关文章:

javascript - 错误后多线程中的 Electron 进程未关闭

android - 无法理解如何在应用程序中打开简单的 TWA(使用 AndroidX)

javascript - 包含文本区域的行跨度表 td

javascript - 在 Parse.com JS SDK 中,如何从指针数组中删除一个元素?

android - 无法更新 firebase 版本

node.js - 是否可以在 mongoosejs 模式中填充自引用?

javascript - jQuery 小数未显示在选中框的结果总和中

javascript - querySelectorAll 函数的实时替代方案

node.js - 在jade中,如何在多个级别中使用相同的 block 名称?

javascript - 通过 POST 请求将参数传递给 javascript 文件