代码之家  ›  专栏  ›  技术社区  ›  to_the_nth

噩梦JS,单击文本(如果存在)

  •  0
  • to_the_nth  · 技术社区  · 6 年前

    我使用噩梦JS进行无头测试。

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

    <div>Error</div>
    

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

    我目前的方法:

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

    但是,元素总是空的。有更好的主意吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Md. Abu Taher    6 年前

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

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

    div.innerText.includes('Error')
    

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

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

    调用元素或类似的任何变量将返回 truthy 价值 && 仅当元素[0]返回一个Truthy值时,才会确保它调用.click()。

    你可以多清理一下,

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

    假设页面中有一个元素,在这种情况下,

    • !element 意思是,元素不存在或 !element = false .
    • !!element 意思是, !false 也就是说, true .

    仅当最终值为 false .