Protractor 是否可以在每次之前读取多电容值?

Protractor 是否可以在每次之前读取多电容值?,protractor,Protractor,我正在尝试启动几个与多容量的端口值相对应的代理。例如,如果_conf.js文件有两个多容量集,则应使用不同的端口值启动两个代理 在\u conf.js中,我设置了以下信息: exports.config = { ... multiCapabilities: [ { 'browserName': 'chrome', 'proxy': { 'httpProxy': 'localhost:8889' }, 'count': '1' }, { 'browserName': 'firefox', 'pro

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

\u 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()。然后(
spec.js
文件中的beforeach函数中)。但是,在启动代理之前,我无法获取值

\u 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
,这是在启动代理之后发生的

我试图将
/*代理部分*/
插入
浏览器.getProcessedConfig()。然后(…)
,但仍然无法工作

是否有任何方法可以让我在每次
之前立即读取
多电容的具体值,而不是等待.then()的


这是主要的。

我想你很接近了,你可以用
curport
从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)
            ... 
            ...
        });
    });
});

我认为您很接近了,您可以使用
将Promise中的
curport
传递给代理函数。然后()
创建具有正确端口号的代理。如果您发现脚本的其余部分没有等待创建代理,您可以在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)
            ... 
            ...
        });
    });
});

我认为您需要结合promise,这是通过调用
getProcessedConfig()获得的
只有当它解决时,才创建一个代理。之后,返回beforeach的结果承诺,这样量角器将等待所有的操作序列。@NathanielFord谢谢你的帮助,Nathaniel Ford!@MichaelRadionov谢谢你的建议,Michael Radionov!我认为你需要合并承诺,这是你从cal那里得到的ling
getProcessedConfig()
只有当它解决时,才创建一个代理。之后,返回beforeach的结果承诺,这样量角器将等待所有的操作序列。@NathanielFord感谢你的帮助,Nathaniel Ford!@MichaelRadionov感谢你的建议,Michael Radionov!感谢martin770的回答!它现在运行良好。我想知道的是什么Sed是browser.controlFlow().execute(),秒。然后()!!是的……我们发现,在使用带有异步调用的量角器时,您必须了解执行顺序的控制流。大多数量角器函数(单击、获取文本等)已经知道如何将它们自己插入到controlFlow中,从而使它们一个接一个地同步活动。当您定义异步调用或承诺时,javascript将尝试立即异步执行它。但是如果使用controlFlow包装它,则可以将该命令的执行推迟到适当的时间,并确保它在进入下一步之前就完成了。是的,这是最复杂的部分,因为这是第一次使用异步语言。谢谢!感谢martin770的回答!它现在工作得很好。我错过的是第二步中的browser.controlFlow().execute()。然后()!!是的……我们发现,在异步调用中使用量角器时,您必须了解执行顺序的控制流。大多数量角器函数(单击、获取文本等)已经知道如何将它们自己插入到controlFlow中,从而使它们一个接一个地同步活动。当您定义异步调用或承诺时,javascript将尝试立即异步执行它。但是如果使用controlFlow包装它,则可以将该命令的执行推迟到适当的时间,并确保它在进入下一步之前完成。是的,这是最复杂的部分,因为这是第一次使用异步语言。谢谢!