我有以下代码:
.then(function() {
return buttonClick();
})
// BEGIN
.then(function() {
return browser.wait(EC.elementToBeClickable(anotherButton), timeOut)
.then(function() {
anotherButton.click();
})
})
.then(function() {
return browser.wait(EC.elementToBeClickable(yetAnotherButton), timeOut)
.then(function() {
yetAnotherButton.click();
})
})
// END
.then(function() {
browser.wait(do some things);
})
我需要在BEGIN
和END
之间执行代码,只有在return browser.wait(EC.elementToBeClickable(anotherButton), timeOut)
成功时执行。如果上述内容未成功,我只想在browser.wait(do some things);
我一直在尝试几种不同的方法来实现这一点,并且在做类似于this的事情时发现了一些运气,但还没有真正得到我正在寻找的结果。
关于如何实现这一目标的任何建议?
由于
答案 0 :(得分:0)
编辑:根据Protractor FAQ,您可以在错误情况下运行第二个函数。
.then(function() {
return buttonClick();
})
//wrap your BEGIN-END-part into a new function like this:
// then(function(){BEGIN-END}, function(err){failcase-execution})
.then(function(){
// BEGIN
.then(function() {
return browser.wait(EC.elementToBeClickable(anotherButton), timeOut)
.then(function() {
anotherButton.click();
})
})
.then(function() {
return browser.wait(EC.elementToBeClickable(yetAnotherButton), timeout)
.then(function() {
yetAnotherButton.click();
})
})
}, function(err){
//Here is your execution in error-case.
browser.wait(do some things);
})
.then(function() {
browser.wait(do some things);
})
但对我而言,听起来像你正试图测试两个不同的范围。 有没有理由,这两个测试必须在同一个测试用例(it-block)中执行?
类似的东西:
describe ("test", function(){
it("executes the first part incl. Begin-End", function(){
//eventually some steps to come here first.
.then(function() {
return buttonClick();
})
// BEGIN
.then(function() {
return browser.wait(EC.elementToBeClickable(anotherButton), timeOut)
.then(function() {
anotherButton.click();
})
})
.then(function() {
return browser.wait(EC.elementToBeClickable(yetAnotherButton), timeOut)
.then(function() {
yetAnotherButton.click();
})
})
});
it("executes the second part, which resumes anyway", function(){
//if necessary, repeat some of the steps from before test
.then(function() {
return buttonClick();
})
.then(function() {
browser.wait(do some things);
})
});
});
或者如果你想弄清楚,如果你可以点击按钮,你可以在一个单独的函数中执行BEGIN / END之间的点击,它只返回true或false(类似于你链接到的):
//existing part
.then(function() {
return buttonClick();
})
.then(
bool clicksWorked = this.optionalExecution();
)
.then(function() {
browser.wait(do some things);
if(!clicksWorked){console.log("Some Buttons couldn't be clicked")}
})
//as separate function, which just returns either true or false
this.optionalExecution = function() {
try {
// BEGIN
browser.wait(EC.elementToBeClickable(anotherButton), timeOut)
.then(function() {
anotherButton.click();
})
browser.wait(EC.elementToBeClickable(yetAnotherButton), timeOut)
.then(function() {
yetAnotherButton.click();
})
return true
}
catch (Exception e) {
return false
}
}
作为旁注:
您是否可以在.then()
- 列表中添加更多内容,因为我不清楚,.then()
是否都涉及进入状况或者他们是如何进入的? ;重新嵌入测试用例。
在您当前的示例中,似乎没有必要将您的操作放在.then()
- 块中。量角器将同步逐行执行,也没有.then()
。另请参阅here