我正在使用Protractor测试Web应用程序,但是当我使用for循环导航“删除”元素(按钮)时,它无法正常工作。
这是我的stepdefinition.js:
let remove = element.all(by.css('a[class="product__cta"]'));
remove.count().then(function(val){
for(let i=0; i<val; i++){
console.log('i is= ', i);
browser.driver.sleep(1000);
remove.get(i).click().perform;
browser.driver.sleep(5000);
}
})
browser.sleep(5000);
let empty_title = element(by.css('.empty-title'));
empty_title.getText().then(function(value){
console.log('empty title: ', value);
})
expect(element(by.css('.empty-container')).isPresent()).to.eventually.be.true.and.notify(next);
在我的控制台中,我可以查看索引'i'并读取错误消息:
i is= 0
i is= 1
i is= 2
i is= 3
i is= 4
[10:09:13] E/launcher - Index out of bound. Trying to access element at index: 3, but there are only 2 elements that match locator By(css selector, a[class="product__cta"])
[10:09:13] E/launcher - NoSuchElementError: Index out of bound. Trying to access element at index: 3, but there are only 2 elements that match locator By(css selector, a[class="product__cta"])
有5个“ product__cta”,而不是错误消息中提到的2个,并且单击删除按钮仅按以下顺序对五个元素中的三个起作用:
第一名El:已删除 第二个El:未点击 第三EL:已移除 第四El:未点击 第五名:已删除
为什么这种行为?我该怎么做才能将所有元素放入for循环并删除它? 请不要告诉我,只有两个与定位器By(css选择器,a [class =“ product__cta”])匹配的元素,因为我仍在浏览页面,并且这些元素中有5个。 PS:只有在单击每个删除项目后,才会显示空容器。
谢谢您的帮助!
答案 0 :(得分:1)
您删除循环内的元素。删除三个元素时,只剩下两个。但是您要删除索引为3的元素,因此出现错误。只需更改此行
remove.get(i).click().perform;
对此:
remove.first().click().perform;