【问题标题】:Protractor and promises量角器和承诺
【发布时间】:2015-06-25 17:35:01
【问题描述】:

Protractor 公开的许多函数都返回了 Promise。

我是否需要使用 Protractor 构建我的 Jasmine 测试,使用异步测试(使用 done 参数)和 .then 之类的东西,或者 Protractor 是否为我提供了一些魔法?

【问题讨论】:

    标签: javascript promise protractor


    【解决方案1】:

    WebDriverJS 通过控制流来处理这个问题。 Protractor 添加了对 Jasmine 的 expect 的修改,以阻止 thens。最好解释一下here

    【讨论】:

    • 所以如果我在beforeEach 中进行了一些设置(例如,使用executeScript 在客户端上导航或运行脚本,甚至使用element(by.css...) 选择元素),我是否必须使用then? 使用普通的承诺语法?
    • 不,beforeEach 在所有方面都与 it 块相同,除了在执行时。看一下这个问题,以了解then 在控制流方面的工作方式以及我们何时可能需要它:stackoverflow.com/questions/30949492/…
    • 我认为从异步实用程序方法(例如 PageObjects 上的方法)中显示 Promise 很重要。否则,量角器不会“知道”来发挥它的魔力?
    • 要将量角器域之外的异步调用添加到控制流,您可以使用browser.controlFlow().execute(promiseFunc),其中promiseFunc 是一个返回承诺的函数。在这里都很好地解释了:github.com/SeleniumHQ/selenium/wiki/WebDriverJs#control-flows
    • 实际上,我的意思是:假设我有一个实用函数foo,它在后台使用browser.driver.findElement但这不会返回承诺。如果我从beforeEach 内部调用foo,我认为这会导致问题,因为不会返回承诺并因此对量角器可见?
    【解决方案2】:

    是的,量角器执行一些魔法以等待每个承诺解决。

    该过程的最佳描述在量角器文档中:How It Works

    这意味着我们不必使用done 将测试构造为异步。我们可以简单地使用expect(在 Jasmine 中)断言,一切都应该正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多