Nightmarejs,单击文本(如果存在)
Nightmarejs, click text, if exists
我使用 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: 元素数组为空,即使元素存在。
过滤器未 returning 任何数据,您需要使用正确的过滤器。在过滤器而不是那个正则表达式中使用这个怎么样?
div.innerText.includes('Error')
问题2:检查元素是否存在,如果存在则点击它。
elements[0] && elements[0].click();
调用一个元素或任何类似的变量将 return 一个 truthy
值 &&
将确保它仅在元素 [0] [=46= 时调用 .click() ] 是一个真实值。
你可以多清理一下,
const element = elements[0];
!!element && element.click();
假设页面中有一个元素,那么,
!element
表示元素不存在或 !element = false
.
!!element
表示 !false
,进而表示 true
。
这只会确保 运行 如果最终值为 true
或 false
。
我使用 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: 元素数组为空,即使元素存在。
过滤器未 returning 任何数据,您需要使用正确的过滤器。在过滤器而不是那个正则表达式中使用这个怎么样?
div.innerText.includes('Error')
问题2:检查元素是否存在,如果存在则点击它。
elements[0] && elements[0].click();
调用一个元素或任何类似的变量将 return 一个 truthy
值 &&
将确保它仅在元素 [0] [=46= 时调用 .click() ] 是一个真实值。
你可以多清理一下,
const element = elements[0];
!!element && element.click();
假设页面中有一个元素,那么,
!element
表示元素不存在或!element = false
.!!element
表示!false
,进而表示true
。
这只会确保 运行 如果最终值为 true
或 false
。