我目前在我的一个Protractor测试规范中有以下代码:
.then(function() {
return button.click();
})
.then(function() {
return element(otherButton).isDisplayed();
})
.then(function(otherButtonIsPresent) {
if(otherButtonIsPresent) {
return browser.wait(EC.elementToBeClickable(element(otherButton)), getWaitTime())
.then(function() {
element(otherButton).click();
return element(continueButton).isPresent();
})
}
})
当我使用Chrome使用--debug-brk
和--inspect
标志进行调试时,我可以通过这些检查并恢复正常。当我在没有标志的情况下运行相同的测试时,测试失败并在尝试点击它之前寻找otherButton
期间停止。
我想知道这是否是因为在调试过程中,我设置断点并等待按钮显示在屏幕上,然后再尝试点击它们。
我需要确保在尝试点击它之前在页面上显示此元素,并且想知道是否有其他方法可以完成此操作?
由于
答案 0 :(得分:0)
我正在使用答案,因为我无法发表评论。
您自己基本上提到它:点击按钮后,您只想等到下一个按钮可点击。
因此,您的.then()
- 函数应该从它所依赖的按钮开始。对我而言,三个排队的.then()
- 函数依赖于相同的条件,因此在.click()
第一个按钮之后,第二个.then()
立即执行,而不是等待之前的.click()
完成。
因此,将.then()
直接放在相关的.click()
后面和前面的.then()
- 函数中,这应该可行:
.then(function() {
element(button).click().then(function(){
element(otherButton).click().then(function(){
return element(continueButton).isPresent();
});
});
});
或者,如果您使用ExpectedConitions,则不应该使用.then()
- 函数。因为Protractor应该管理ControlFlow,允许你在没有链式.then()
的情况下编写它 - 函数:
.then(function() {
browser.wait(EC.elementToBeClickable(element(button)), getWaitTime());
element(button).click();
browser.wait(EC.elementToBeClickable(element(otherButton)), getWaitTime());
element(otherButton).click();
browser.wait(EC.elementToBeClickable(element(continueButton)), getWaitTime());
return element(continueButton).isPresent();
});
This nice post详细阐述了异步写入,但感谢Protractor同步执行。
作为另一个结合我的两个输入的例子,有点双重保障测试:
.then(function() {
browser.wait(EC.elementToBeClickable(element(button)), getWaitTime());
element(button).click().then(function(){
browser.wait(EC.elementToBeClickable(element(otherButton)), getWaitTime());
element(otherButton).click().then(function(){
browser.wait(EC.elementToBeClickable(element(continueButton)), getWaitTime());
return element(continueButton).isPresent();
});
});
});