首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拒绝在Protractor/WebDriverJS中的承诺

拒绝在Protractor/WebDriverJS中的承诺
EN

Stack Overflow用户
提问于 2015-08-04 13:36:30
回答 2查看 2.7K关注 0票数 13

WebDriverJS和Protractor本身完全基于承诺的概念:

WebDriverJS (因此,也就是Protractor) API完全是异步的。所有函数都会返回承诺。WebDriverJS维护一个挂起的承诺队列,称为控制流,以保持执行的组织性。

根据definition的说法

允诺是一个表示值的对象,或者是一个值的最终计算。每个承诺都是在挂起的状态下开始的,并且可以用一个值成功地解决,或者,它可能被拒绝来指定一个错误

关于拒绝承诺的最后一部分,我不完全理解,也没有在“预测器”中讨论过。我们看到和编写的一个常见模式是使用then()并为成功解决的承诺提供一个函数:

代码语言:javascript
复制
element(by.css("#myid")).getAttribute("value").then(function (value) {
    // do smth with the value
});

问题:

是否有可能任何Protractor/WebDriverJS函数返回的承诺都不会被成功解决并被拒绝?我们真的应该担心它并处理它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-04 18:40:53

我在使用browser.wait()时遇到过拒绝承诺的用例。下面是一个示例:

代码语言:javascript
复制
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);

在这里,如果元素位于页面上,则执行success,否则,如果在1秒后找不到,则调用fail。我的第一点是,为拒绝提供一个回调的能力,使之符合人们的期望。在这种情况下,我可以肯定的是,这个承诺将始终致力于truefalse,因此我可以构建一个依赖于它的套件。如果我不提供fail回调,那么由于超时,我将得到一个Uncaught exception,这仍然会使我的特定规范失败,并且仍然运行其余的规范。顺便说一句,Protractor会抓到它的,但我想提出第二点,它被认为是用来编写和运行代码的工具,如果Protractor捕获了异常,那么这个异常使您的代码无法处理,您的代码也有漏洞。但是..。同时,我认为不应该浪费时间捕捉测试中的所有内容:如果页面上没有元素或单击失败,那么相应的规范显然也会失败,这在大多数情况下都很好。除非您想使用失败的结果在上面构建一些代码,就像在我的示例中一样。

票数 14
EN

Stack Overflow用户

发布于 2015-08-04 14:37:24

这是承诺的伟大之处,你将得到一个响应,一个数据的响应或一个错误信息。这将扩展到一系列承诺,如Webdriver,您将得到一系列响应或第一个失败的失败响应。如何处理失败的响应取决于您自己,我通常只是将其转储到控制台的日志中,以查看哪些失败。唯一需要弄清楚的是,您是中止了其余的测试,还是继续测试。

这里也有一篇关于这个问题的像样文章。http://www.toolsqa.com/selenium-webdriver/exception-handling-selenium-webdriver/

如果您正在做的是好的,您只是从来没有麻烦捕捉到任何错误,不过,我不确定这对您是否重要,您也可以抽象函数中的调用,以便自动处理错误,如果您想在某个地方记录这些错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31810834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档