【发布时间】:2015-09-20 23:53:10
【问题描述】:
我想在我的 AngularJS 应用程序中测试“显示更多”按钮,所以当用户点击按钮时,它会加载一些内容,并且没有更多内容可以显示按钮隐藏。
如何在显示“显示更多”时执行.click()。我不想硬编码循环数,但以某种方式将.isDisplayed()(即使它返回一个承诺)插入while()
【问题讨论】:
标签: javascript angularjs selenium testing protractor
我想在我的 AngularJS 应用程序中测试“显示更多”按钮,所以当用户点击按钮时,它会加载一些内容,并且没有更多内容可以显示按钮隐藏。
如何在显示“显示更多”时执行.click()。我不想硬编码循环数,但以某种方式将.isDisplayed()(即使它返回一个承诺)插入while()
【问题讨论】:
标签: javascript angularjs selenium testing protractor
恕我直言,2种方法,
因为 .click 实际上是在创建 Promise,所以你不能只用 while 循环它——它只会创建一堆相同的 Promise。我为此创建了一个递归函数:
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() 循环中,这样您就不必处理承诺(但这取决于您在 afterEach()、beforeEach() 中的内容...【讨论】:
我会使用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
});
【讨论】: