【问题标题】:protractor wait for multiple objects量角器等待多个对象
【发布时间】:2015-12-23 11:17:15
【问题描述】:

我正在使用 AJAX 在 DOM 中加载类似的东西:

<div class="elm_class"></div>
<div class="elm_class"></div>
<div class="elm_class"></div>

然后我需要等待量角器测试中出现 n 个元素。我最好的尝试是:

function needTrue(css,i){
    e = element.all(by.css(css));
    var EC = protractor.ExpectedConditions;
    if(e.length>i){
        return EC.presenceOf($$(".heading-description.uplevel").get(m1I));
    }else{
        return setTimeout(needTrue(css,length),1000);
    }
}

browser.driver.wait(needTrue(".elm_class", 3) , 10000);

但它甚至不能以这种方式抛出错误

已超出最大调用堆栈大小。

如果有人能解释我如何带回等待函数“promise”对象,我将不胜感激。

【问题讨论】:

    标签: javascript angularjs selenium selenium-webdriver protractor


    【解决方案1】:

    制作一个自定义预期条件,直到出现匹配选择器元素的n

    function presenceOfAll(elements, n) {
        return function () {
            return elements.count(function (count) {
                return count >= n;
            });
        };
    }
    
    browser.wait(presenceOfAll($$(".elm_class"), 3) , 10000);
    

    这里需要注意的是,presenceOfAll 返回一个函数browser.wait() 将执行该函数,直到它解析为 true 或达到超时。

    【讨论】:

    • 很好,正在寻找一种方法来做到这一点。
    【解决方案2】:

    browser.wait 会自动循环到指定的毫秒数,直到它返回true,所以你不想在里面放一个 setTimeout。此外,您将希望使用.count() 而不是.length 作为.all 找到的元素数量

    function needTrue(css,i){
      e = element.all(by.css(css));
    
      // count the number of elements found
      return e.count().then(function(elementCount) {
        // if not enough elements, return false so browser.wait will keep looping
        return elementCount >== i;
      });
    };
    
    browser.driver.wait(needTrue(".elm_class", 3) , 10000);
    
    // after waiting for the elements, check whatever
    // I don't use EC, so I don't know if this part of the code actually works
    var EC = protractor.ExpectedConditions;
    expect(EC.presenceOf($$(".heading-description.uplevel").get(m1I))).toBe(true);
    

    【讨论】:

    • 这很好用。感谢您的帮助和解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多