【问题标题】:protractor do all API functions really return promises?量角器所有API函数真的返回承诺吗?
【发布时间】:2015-03-28 03:00:46
【问题描述】:

当我运行这个测试时:

browser.get('http://www.valid-site.com').then(function(msg){
    console.log(msg);
});

我希望打印 1 或 true 以指示操作成功,因为 get() 应该返回一个带有已解析值的承诺。相反,它打印'null'。在 API 文档 http://angular.github.io/protractor/#/api 中没有返回类型的指示。我很困惑哪些函数返回一个承诺,哪些没有。

【问题讨论】:

  • 澄清一下,get()总是返回一个承诺。 (这就是 then 被调用的原因。)你问的是承诺在解决时是否总是有一个 value 。他们不。您可以在不提供值的情况下解决承诺。 (在您的情况下,console.log 在承诺解决之前不会执行,因此它执行的事实表明该页面已被获取。)

标签: angularjs testing promise protractor


【解决方案1】:

不确定它是否会直接回答问题,但是,如果您查看browser.get() protractor's implementation(它包装了WebDriverJSdriver.get()),您可以看到它返回:

return this.executeScript_(
  'angular.resumeBootstrap(arguments[0]);',
  msg('resume bootstrap'),
  moduleNames);

由于执行的脚本没有return,这就是您看到null 已解决的原因。


但是,例如,如果您查看 browser.refresh() implementation,您会看到它返回:

return self.executeScript_(
  'return window.location.href',
  'Protractor.refresh() - getUrl').then(function(href) {
    return self.get(href, timeout);
  });

在这种情况下,执行的脚本会返回 window.location.href 值,您会在控制台上看到以下情况:

browser.refresh().then(function (url) {
    console.log(url);
});

我想,你可以理解这个"Read the source, Luke" answer,因为当你不确定时,请查看来源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2020-01-11
    相关资源
    最近更新 更多