量角器:承诺如何运作?

时间:2014-03-21 22:30:07

标签: angularjs protractor

我对角度的$ q库有一个很好的想法,但我不确定量角器或web-driver-js如何使用它们。 (特别是因为我认为量角器/网络驱动器/角度之间的利用率略有差异)

例如,我在量角器教程中看到的示例代码似乎是逐行编写的,并假设前一个在下一个之前完成。 (例如,browser.get(url)后跟browser.getTitle())是否存在某种隐含的前景? (我不必手动推迟解决/履行)

我已阅读https://github.com/angular/protractor/blob/master/docs/getting-started.md 并浏览了webdriver文档和量角器api的链接,但我的理解仍然有点模糊。有些函数似乎返回值,有些函数返回promises,就像奇怪的同步和异步代码混合一样。

2 个答案:

答案 0 :(得分:13)

  

是否存在某种隐含的前景?

查看https://github.com/angular/protractor/blob/master/docs/control-flow.md,看起来答案是,通过使用promises队列,称为控制流。所以扩展你的例子:

browser.get(url);
var title = browser.getTitle();
expect(title).toEqual('My Title');

上面的每一行都会添加到队列中。变量title实际上是一个promise,它在控制流中的适当位置expect展开。

答案 1 :(得分:12)

这是一篇关于Protractor control flow的好文章,其灵感来自WebDriver API

简而言之(引用文章),这里是WebDriver的ControlFlow如何在幕后工作。

当你写:

driver.get('http://www.example.com');
driver.findElement(elem).sendKeys('hello');

实际发生的是:

driver.get('http://www.example.com')
  .then(function() {
    return driver.findElement(elem);
  })
  .then(function(q) {
    return q.sendKeys('hello');
  });


<小时/> 注意:我不打算在接受的答案中多余,但我相信看到内部实际链接的承诺如何有助于理解。