量角器,“ for”循环不会对所有索引进行操作

时间:2018-07-09 08:27:23

标签: javascript loops protractor elements

我正在使用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:只有在单击每个删除项目后,才会显示空容器。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您删除循环内的元素。删除三个元素时,只剩下两个。但是您要删除索引为3的元素,因此出现错误。只需更改此行

remove.get(i).click().perform;

对此:

remove.first().click().perform;