【发布时间】:2016-06-16 00:16:00
【问题描述】:
我正在尝试编写 Protractor E2E 测试,通过browser.wait(...) 和element1.isPresent() 检查某个元素是否存在,如果是,那么很好,但否则我想通过以下方式检查另一个元素是否存在element2.isPresent().
应该存在element1 和element2 中的一个,如果两者都不存在,那么我希望测试失败。
我的代码如下所示:
var element1 = element(by.id('test-elem1'));
var element2 = element(by.id('test-elem2'));
browser.wait(function() {
return element1.isPresent();
}, 5000, "Waiting for element 1").then(function() {
console.log('Found element 1');
// Do something with element 1
}, function() {
// Element 1 not present --> look for element 2
browser.wait(function() {
return element2.isPresent();
}, 5000, "Waiting for element 2");
print('Found element 2');
});
我的期望是:
- 如果存在
element1,那么第一个browser.wait将以一个成功的promise 结束,所以它的.then应该进入第一个函数,并打印Found element 1。 - 如果
element1不存在,那么第一个browser.wait将以失败的promise 结束,因此.then应该进入第二个函数,该函数查找element2。然后,如果存在element2,测试应该继续,打印Found element 2,然后通过。但是,如果element2不存在,那么它应该在这一秒browser.wait失败,因此测试应该失败。
实际发生的情况是,如果element1 不存在,第一个browser.wait 就会失败并导致测试失败。如果存在element1,则其余测试将按预期继续。
我的印象是,如果定义了 .then() 的第二个参数,那么在失败时,应该调用第二个函数,而不是完全失败。
我很确定我在其他地方有几乎相同的代码(我已经删除了它,所以我不能再引用它了),所以我不确定为什么这部分不起作用。
为什么会这样?
【问题讨论】:
标签: javascript unit-testing protractor