量角器:承诺如何运作?

use*_*724 12 angularjs protractor

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

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

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

Mic*_*mza 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');
Run Code Online (Sandbox Code Playgroud)

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


flo*_*bon 12

这是一篇关于Protractor控制流的好文章,它本身受到WebDriver API的启发.

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

当你写:

driver.get('http://www.example.com');
driver.findElement(elem).sendKeys('hello');
Run Code Online (Sandbox Code Playgroud)

实际发生的是:

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



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