我有一个看起来像这样的页面。这是一个有步骤的向导。根据“step”范围变量,将显示向导的不同部分:
<div ng-show="step == 'first'">
<button>Next</button>
</div>
<div ng-show="step == 'second'">
<button>Next</button>
</div>
<div ng-show="step == 'third'">
<button>Next</button>
</div>
要点击下一个按钮我会遇到问题。因为有三个。以下代码返回所有这些代码:
var next = element(by.buttonText('Next'));
并且正在做:
next.click();
将点击第一个。如何才能找到可见按钮,然后单击该按钮?
答案 0 :(得分:1)
对于使用filter()
过滤单个可见按钮并单击它的理解,这里有一个更清晰的版本:
function clickButton(text) {
var buttons = element.all(by.buttonText(text));
var visibleButton = buttons.filter(function(button) {
return button.isDisplayed().then(function(isVisible) {
return isVisible;
});
}).first();
visibleButton.click();
}
作为奖励,如果找不到可见按钮,您也会收到错误,而不是您当前的方法,在这种情况下不会失败。
答案 1 :(得分:0)
您应该能够链接元素以指定要单击的下一个按钮。
var firstNext = element(by.css('div[ng-show="step == \'first\'"]')).element(by.buttonText('Next'));
var secondNext = element(by.css('div[ng-show="step == \'second\'"]')).element(by.buttonText('Next'));
var thirdNext = element(by.css('div[ng-show="step == \'third\'"]')).element(by.buttonText('Next'));
// We are on the first step
firstNext.click();
// We are on the second step
secondNext.click();
// We are on the third step
thirdNext.click();