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

时间:2018-06-21 20:06:05

标签: javascript node.js nightmare

我使用NightmareJS进行无头测试。

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

<div>Error</div>

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

我目前的做法:

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

但是,元素始终为空。还有更好的主意吗?

1 个答案:

答案 0 :(得分:1)

问题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

这只能确保最终值是truefalse时运行。