javascript - 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();
})
但是,元素始终为空。有更好的想法吗?
解决方案
问题 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
。
推荐阅读
- c# - Xamarin 表单在 ViewModel 中使用多个列表
- r - 使用自定义函数编辑数据集
- postgresql - 使用标识符继承父表(Postgres)
- ruby-on-rails - 使用 Rspec + FactoryBotRails 时出现“未定义的方法‘build’”
- javascript - 如何在 ReactJS 无状态组件中用纯 JavaScript 填充输入值?
- html - 如何防止地址字段中的邮政信箱?
- python - 在 Pandas 中迭代数据框以查找字符串并生成新列
- swift - 完成处理程序是否结束功能?
- c# - 通过 gmail API 获取包含附件的消息
- python - Flask WTForm 未验证,未报告表单错误