如何在 Protractor 中创建和操作 Promise?
Posted
技术标签:
【中文标题】如何在 Protractor 中创建和操作 Promise?【英文标题】:How to create and manipulate promises in Protractor? 【发布时间】:2014-01-30 01:55:48 【问题描述】:我想使用 Node Http 模块直接调用我的服务器以设置我的量角器测试。 Http 是基于回调的,我想把它变成 Promise。
例如,我想让这个函数返回承诺:
function callMyApi()
var promise = // somehow create promise;
http.request(path: '/yada/yada', method: 'POST', function(resp)
promise.complete(resp);
);
return promise;
所以,问题是:我需要什么require()
并代替“以某种方式创建承诺”才能使其工作?
【问题讨论】:
【参考方案1】:这是错误的做法,但了解 Protractor Control Flow 可能会有所帮助。如果您希望常规 javascript 在 Protractor 中运行,请通过控制流添加它。
在这种情况下,您可以根据需要使用自己的 Promise 库,然后只需使用 browser.wait
等待您的 Promise 完成。
var Promise = require('bluebird');
var promises = [];
browser.controlFlow().execute(function()
var p = new Promise...
promises.push(p);
);
browser.wait( function() return Promise.all(promises); , timeoutMs );
我不是将它用于常规承诺,而是用于console.log
语句或为测试的一部分进行计时,甚至使用fs
将测试中的某些内容打印到文件中。
var startTime, duration;
browser.controlFlow().execute(function()
startTime = new Date().getTime();
);
//Protractor code you want timed
browser.controlFlow().execute(function()
duration = new Date().getTime() - startTime;
console.log("Duration:", duration);
);
【讨论】:
【参考方案2】:Protractor 使用 WebDriver 的 Promise 并在“protractor”上全局公开该 API。所以你应该可以做到
var deferred = protractor.promise.defer();
return deferred.promise;
有关完整的 WebDriverJS Promise API,请参阅https://code.google.com/p/selenium/source/browse/javascript/webdriver/promise.js 处的代码
【讨论】:
谢谢!这有帮助。将其添加到github.com/angular/protractor/blob/master/docs/api.md 的 API 页面怎么样? 我正在创建一个返回承诺的函数,我们如何在量角器中解析/拒绝? 您可以使用deferred.fulfill(result)
或deferred.reject(reason)
解析/拒绝延迟对象以上是关于如何在 Protractor 中创建和操作 Promise?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中的 Pymmsql 中创建和重新创建索引?