我正在尝试等待页面上的多个元素,我不知道有多少可能会有,但至少会有一个.我理解使用以下内容等待单个元素,这很好.
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
任何有关这方面的帮助将非常感谢.
附: Protracor的新手及其怪癖.
解决方法
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);