当我尝试在测试体中使用以下代码片段时,似乎工作正常,除了这个块之后(外部)的代码仍在执行并且最后测试失败的事实。
var el = element(by.model('name.first'));
el.isDisplayed().then(function(condition) {
console.log("Is Element Displayed : " + condition);
if(!condition) {
fail('Test Failed');
}
});
但是当我将这段代码包装在一个方法(在其他一些util文件中)时,如:
isMyElementDisplayed: function (element) {
var el = element;
el.isDisplayed().then(function(condition) {
console.log("Is Element Displayed : " + condition);
return condition;
});
}
然后尝试在我的测试中调用此方法,如:
expect(elementActions.isMyElementDisplayed(element(by.model('name.first')))).toBe(true);
它失败并出现以下异常。
Expected undefined to be true.
但是我看到消息在日志中打印出来:
Is Element Displayed : false
并且在这种情况下,测试也不会停留在'期望'状态,但最终会失败。你可以说我是新手量角器和javascript。我正在尝试自动化QA功能测试并构建一些可重复使用的方法,这些方法可以再次使用,也可以由其他人使用。
是否有正确的方法将代码包装在我正在做的util方法中?以及
如何让expect
条件等到承诺得到解决?
仅供参考:npm -version - > 2.14.7和量角器 - 版本 - > 3.0.0
答案 0 :(得分:2)
@Artyom指出将return
放入isMyElementDisplayed
函数:
isMyElementDisplayed: function (element) {
var el = element;
// v HERE
return el.isDisplayed().then(function(condition) {
console.log("Is Element Displayed : " + condition);
return condition;
});
}
这样isMyElementDisplayed
函数将返回一个将被置于控制流上的promise,expect
将在进行断言之前隐式解析它。
虽然,我会使用等待来处理问题:
var EC = protractor.ExpectedConditions;
var elm = element(by.model('name.first'));
browser.wait(EC.visibilityOf(elm), 5000, "Element is still not visible");
expect(elm.isDisplayed()).toBe(true);