ale*_*cxe 13 javascript testing selenium promise protractor
WebDriverJS和Protractor本身完全基于承诺的概念:
WebDriverJS(以及Protractor)API完全是异步的.所有功能都返回承诺.WebDriverJS维护一个待处理的承诺队列,称为控制流,以保持执行的有序性.
并且,根据定义:
promise是一个表示值的对象,或者是值的最终计算.每个承诺都以挂起状态开始,可以使用值成功解析,也可以拒绝指定错误.
关于承诺拒绝的最后一部分是我不完全理解并且未在Protractor中处理过的事情.我们看到和编写的一种常见模式是使用then()并为成功解决的承诺提供功能:
element(by.css("#myid")).getAttribute("value").then(function (value) {
// do smth with the value
});
Run Code Online (Sandbox Code Playgroud)
问题:
是否有可能由任何Protractor/WebDriverJS函数返回的承诺无法成功解决并被拒绝?我们真的应该担心并处理它吗?
Mic*_*nov 14
我在使用时经历过承诺拒绝的用例browser.wait().这是一个例子:
var EC = protractor.ExpectedConditions;
function isElementVisible() {
var el = element(by.css('#myel'));
// return promise
return browser.wait(EC.visibilityOf(el), 1000)
.then(function success() {
return true; // return if promise resolved
}, function fail() {
return false; // return if promise rejected
});
}
expect(isElementVisible()).toBe(true);
expect(isElementVisible()).toBe(false);
Run Code Online (Sandbox Code Playgroud)
这里,如果元素在页面上,success将被执行,否则,如果在1秒后没有找到,fail则将被调用.我的第一点是,提供拒绝回调可以提供与人们期望的一致的能力.在这种情况下,我确信承诺将永远解决true或false,所以我可以建立一个依赖它的套件.如果我不提供fail回调,那么我会得到一个Uncaught exception由于超时,这仍然会失败我的特定规格,仍然运行其余的规格.它不会被捕获,Protractor会抓住它,但在这里我想提出第二点,Protractor被认为是用来编写和运行代码的工具,如果Protractor捕获到异常,然后此异常使您的代码未处理,您的代码有泄漏.但是......同时我不认为人们应该浪费时间来检测测试中的所有内容:如果页面上没有元素或点击失败,那么相应的规范也会明显失败,这在大多数情况下都没问题这些案件.除非你想使用失败的结果在它之上构建一些代码,就像在我的样本中一样.
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |