如何迭代同一类的元素以找到第一个可见的

时间:2018-04-06 15:38:47

标签: javascript node.js nightwatch.js

如果我有一个类的多个对象,但只有一些可见,那么找到第一个可见的最佳方法是什么。我目前正在尝试:

browser.waitForElementVisible('.myClass', timeOut)

可以查看所有元素,但只会在第一个元素上执行操作。 OR

browser.waitForElementVisible('(//div[@class="myClass"])[1]')

指定索引,但可能显示也可能不显示,因为每次页面刷新时都会加载新数据。

我需要循环遍历所有现在,只需单击可见的第一个实例。我知道我可以通过自定义命令实现这一目标,但我是js和nightwatch的新手,所以我不确定该怎么做。

1 个答案:

答案 0 :(得分:0)

我想我可能会使用.elementIdDisplayed()来完成此任务。

下面的代码段可以帮助您

  • 获取元素列表
  • 检查是否显示一个
  • 如果显示,请单击元素

通常我会使用forEach循环但是因为你不能在不做一些hacky的情况下突破它,只需使用常规的旧for循环:

browser.elements('css selector', '.myClass', function(elements) {
    for(let i = 0; i < elements.value.length; i++) {
        browser.elementIdDisplayed(elements.value[i].ELEMENT, function(isDisplayed) {
            if(isDisplayed.value) {
                browser.elementIdClick(element.value[i].ELEMENT);
                break; //this will break out of the loop when you find the first displayed element
            }
        });
    }
});