首页 > 解决方案 > Nightmarejs,点击文本,如果存在

问题描述

我使用 NightmareJS 进行无头测试。

有时,像这样的元素会出现在我正在浏览的站点的 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();
})

但是,元素始终为空。有更好的想法吗?

标签: javascriptnode.jsnightmare

解决方案


问题 1:即使元素存在,元素数组也是空的。

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

div.innerText.includes('Error')

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

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

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

可以多打扫

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

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

  • !element意味着,元素不存在或!element = false
  • !!element意味着,,!false这反过来意味着,true

这只会确保在最终值为true或时运行false


推荐阅读