量角器 - 等待多个元素

时间:2016-01-07 18:48:56

标签: javascript protractor

我正在尝试等待页面上的多个元素,我不知道会有多少元素,但至少会有一个元素。我理解使用以下内容等待单个元素,工作正常。

var EC = protractor.ExpectedConditions;
    browser.wait(EC.presenceOf(element(by.css("h3[title='Test Form']"))), 10000);
    expect(element(by.css("h3[title='Test Form']")).isPresent()).toBeTruthy();

我想稍微改变一下等待多个元素,所以尝试了下面的内容(将.all添加到元素中)。

var EC = protractor.ExpectedConditions;
    browser.wait(EC.presenceOf(element.all(by.css("h3[title='Test Form']"))), 10000);
    expect(element.all(by.css("h3[title='Test Form']")).isPresent()).toBeTruthy();

不幸的是,当我尝试这个时,我得到了

Cannot read property 'bind' of undefined

对此的任何帮助都将非常感激。

P.S。 Protracor的新手及其怪癖。

1 个答案:

答案 0 :(得分:12)

presenceOf期望传入单个元素ElementFinder)。

您需要自定义预期条件才能等待。如果我理解正确,你需要等到N个元素存在。以下是如何做到这一点:

function waitForCount (elementArrayFinder, expectedCount) {
    return function () {
        return elementArrayFinder.count().then(function (actualCount) {
            return expectedCount === actualCount;  // or <= instead of ===, depending on the use case
        });
    };
};

用法:

var forms = element.all(by.css("h3[title='Test Form']"));
browser.wait(waitForCount(forms, 5), 10000);