是否可以在beforeEach上读取multiCapabilities的值?

时间:2015-11-30 21:42:12

标签: protractor

我正在尝试启动与multiCapabilities的端口值对应的多个代理。例如,如果_conf.js文件有两个multiCapabilities集,则应使用不同的端口值启动两个代理。

_conf.js中,我设置了以下信息:

exports.config = {
...
multiCapabilities: [
{ 'browserName': 'chrome',
'proxy': { 'httpProxy': 'localhost:8889' },
'count': '1' },
{ 'browserName': 'firefox',
'proxy': { 'httpProxy': 'localhost:9001' },
'count': '1' },

期望:两个实例,一个浏览器为chrome的实例,其代理端口为8889。另一个是Firefox作为其浏览器和一个端口为9001的代理。

为此,我尝试在browser.getProcessedConfig().then(文件中的beforeEach函数中使用spec.js。但是,在启动代理之前我无法获取值。

_spec.js文件中,我试图以这种方式启动代理之前读取httpProxy值。

var Proxy = require('browsermob-proxy').Proxy;

describe('stress testing-' + dateone.curdate2Sec, function() {
var curport = 0;
beforeEach(function (done) {
// READ HTTPPROXY TO PASS AS A PORT NUMBER FOR PROXY
browser.getProcessedConfig().then(function(config) { 
curport = config.capabilities.proxy.httpProxy.split(':')[1];
});

/*  Proxy Part */       
var proxy = new Proxy();
return Q.ninvoke(proxy, 'start', curport) 
    .then(
        function (data) {
            console.log('data', data);
            console.log('arguments', arguments);
            browser.params.proxy = proxy;
            browser.params.proxyData = data;
            return data;
        }, 
        function () {
            console.log('start failed');
        })
    .then(
        function() {
            browser.params.proxy.startHAR(browser.params.proxyData.port, 'test', done);
        }
    );
});

量角器实例首先运行return Q.ninvoke(proxy, 'start', curport),然后解析getProcessedConfig,这是在启动代理后发生的。

我尝试将/* Proxy Part */插入browser.getProcessedConfig().then(...),但它仍无效。

有没有办法可以立即在multiCapabilities上阅读beforeEach的具体价值,而不是等待by .then()

这是主reference I used

1 个答案:

答案 0 :(得分:0)

我认为您已经关闭,您可以使用curport.then()从Promise传递到代理功能,以使用正确的端口号创建代理。如果您发现脚本的其余部分没有等待创建代理,您可以在controlFlow的上下文中执行它,如:

beforeEach(function() {
    browser.getProcessedConfig().then(function(config) {
        return config.capabilities.proxy.httpProxy.split(':')[1];
    }).then(function(curport) {
        browser.controlFlow().execute(function() {
            /*  Proxy Part */
            Q.ninvoke(proxy, 'start', curport)
            ... 
            ...
        });
    });
});