AngularJS&量角器 - 在元素.isDisplayed()时执行.click()

时间:2015-07-03 08:06:47

标签: javascript angularjs selenium testing protractor

我想在我的AngularJS应用程序中测试“显示更多”按钮,因此当用户点击按钮时,它会加载一些内容,而没有更多内容可以显示按钮隐藏。

如果显示“显示更多”,如何执行.click()。我不想硬编码循环的数量,但不知何故将.isDisplayed()(即使它返回一个承诺)插入while()

2 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点,

因为.click实际上是在创建承诺,所以你不能只是循环它 - 它只会创建一堆相同的承诺。我为此创建了一个递归函数:

reclick = function(elementos) {
        if (elementos.isDisplayed()) {
            elementos.click().then(function () {
                console.log('click');
                //YOUR CHECKS AFTER CLICK HERE
                return reclick(elementos);
            });
        }
    };
reclick(anyElement);

你可能可以使用另一个函数作为参数来重复使用你想要在点击后执行的代码......

  • 更简单的版本将额外的it('should have something after click')包装到while()循环中,这样你就不必处理promises(但这取决于你在afterEach(),beforeEach()...中的含义。 / LI>

答案 1 :(得分:0)

我会使用filter()找到所有Show More按钮和过滤器仅。实现:

// find all "Show More" links by link text and filter only visible
var showMores = element.all(by.linkText("Show More")).filter(function (link) {
    return link.isDisplayed().then(function (value) {
        return value;
    });
});

// for each visible "Show More", click it
showMores.each(function (link) {
    link.click();

    // TODO: assertions/expectations
});