我编写了Protractor自动化测试并遇到了一个问题。等待命令实际上并没有等待数组元素之一。请参见下面的示例:在导航到网页后,我尝试等待第一个元素。
var category = element.all(by.repeater('category in listCtrl.categories'));
var category2 = $$('.category-name.custom-tooltip-link.ng-binding');
var EC = protractor.ExpectedConditions;
describe('wait for the first category', function() {
it('wait', function() {
browser.get('http://www.deep.mg/');
browser.wait(EC.visibilityOf(category.get(0)), 20000);
browser.wait(EC.visibilityOf(category2.get(0)), 20000);
});
});
但是测试失败,并出现以下错误:
失败:越界。尝试访问索引为0的元素,但根据定位器 by.repeater("category in listCtrl.categories") ,只有0个匹配元素。
错误不取决于定位器类型,因为在“按重复器”和“按 CSS”两种情况下都出现了。
选择器没问题,在添加“等待”命令后,测试通过了:var category = element.all(by.repeater('category in listCtrl.categories'));
var category2 = $$('.category-name.custom-tooltip-link.ng-binding');
var EC = protractor.ExpectedConditions;
describe('wait for the first category', function() {
it('wait', function() {
browser.get('http://www.deep.mg/');
browser.sleep(15000);
browser.wait(EC.visibilityOf(category.get(0)), 20000);
browser.wait(EC.visibilityOf(category2.get(0)), 20000);
category.count().then(function(count1) {
console.log(count1); //count returns 5, which means there are actually elements in array
});
category2.count().then(function(count2) {
console.log(count2);
});
});
});
此外,timeout参数并没有起到作用,它只是忽略了它并立即失败。
所以问题是如何等待数组中的某个特定元素?我是否漏掉了什么?谢谢。