我正在编写一个获取seleniumCapabilites并将值存储在类中的类。它公开了一种方法,该方法使用类中获得的会话来获取selenium节点。但是当javascript类调用我的新类时,getSeleniumNode将返回undefined。我很确定这是因为getSeleniumNode没有等待Web请求完成处理但是我不确定如何重新设计它才能工作
var base = require(__paths.e2e.pages + '/base'),
urlParse = require('url-parse'),
request = require('sync-request');
module.exports = function (options) {
var self = base(options);
browser.getProcessedConfig().then(function (config) {
self.seleniumHub = new urlParse(config.seleniumAddress);
console.log(self.seleniumHub.host);
browser.driver.getCapabilities().then(function (capabilities) {
self.capabilities = capabilities;
});
});
self.getSessionId = function () {
return self.capabilities.caps_[
'webdriver.remote.sessionid'];
};
self.getPlatform = function () {
return self.capabilities.platform;
};
self.getBrowserName = function () {
return self.capabilities.browserName;
};
self.getBrowserVersion = function () {
return self.capabilities.version;
};
self.getSeleniumNode = function () {
var url = 'http://' + self.seleniumHub.host + "/grid/api/testsession?session=" + capabilities.caps_[
'webdriver.remote.sessionid'];
var response = request('GET', url);
var testSession = JSON.parse(response.getBody().toString());
return new urlParse(testSession.proxyId);
};
return self;
};
我的班级是
var base = require(__paths.e2e.pages + '/base');
var seleniumCapabilities = require(__paths.e2e.lib + '/seleniumCapabilities')();
module.exports = function (options) {
var self = base(options);
console.log(seleniumCapabilities.getSeleniumNode());
return self;
};
运行此e2e测试时得到的相关控制台输出是
undefined -- this is the call from console.log(seleniumCapabilities.getSeleniumNode());
localhost:4444 --- this is the call from console.log(seleniumCapabilities.getSeleniumNode());