Я пытаюсь использовать прокси-сервер BrowserMob для захвата HAR для тестов, выполняемых на BrowserStack с использованием WebdriverIO
Пока у меня есть следующий код
conf / local.conf.js
const browserstack = require('browserstack-local');
const Proxy = require('browsermob-proxy').Proxy;
const fs = require('fs');
exports.config = {
user: process.env.BROWSERSTACK_USERNAME || 'shubhamjindal2',
key: process.env.BROWSERSTACK_ACCESS_KEY || 'PyNWYKCcnwxt4XMCP52s',
proxyHost: process.env.PROXY_HOST || 'localhost',
proxyPort: process.env.PROXY_PORT || '9090',
updateJob: false,
specs: [
'./test/specs/localTest.js'
],
exclude: [],
capabilities: [{
'os': 'Windows',
'os_version': '10',
'browserName': 'Chrome',
'browserVersion': '62.0',
'browserstack.local': 'true',
'browserstack.video': 'false',
'seleniumProtocol': 'WebDriver'
}],
logLevel: 'warn',
coloredLogs: true,
screenshotPath: './errorShots/',
baseUrl: '',
waitforTimeout: 10000,
connectionRetryTimeout: 90000,
connectionRetryCount: 3,
host: 'hub.browserstack.com',
before: function() {
const chai = require('chai');
global.expect = chai.expect;
chai.Should();
},
framework: 'mocha',
mochaOpts: {
ui: 'bdd',
timeout: 60000
},
// Code to start browserstack local before start of test
onPrepare: function(config, capabilities) {
console.log("Connecting local");
exports.proxy = new Proxy();
exports.proxy.start(exports.config.proxyPort, function(err, data) {
if (!err) {
exports.proxy.startHAR(exports.config.proxyPort, 'dummy', true, true);
} else {
console.error(err);
}
});
capabilities['proxy'] = {
httpProxy: exports.proxy,
};
const bsLocalArgs = {
'key': exports.config.key,
'forcelocal': true,
'forceproxy': true,
'force': true,
'v': true,
'-local-proxy-host': exports.config.proxyHost,
'-local-proxy-port': exports.config.proxyPort,
};
return new Promise(function(resolve, reject) {
exports.bsLocal = new browserstack.Local();
exports.bsLocal.start(bsLocalArgs, function(error) {
if (error) return reject(error);
console.log('Connected. Now testing...');
resolve();
});
});
},
// Code to stop browserstack local after end of test
onComplete: function(exitCode, config, capabilities, results) {
exports.bsLocal.stop();
exports.proxy.getHAR(exports.config.proxyPort, function(err, resp) {
console.log(err, resp);
if (!err) {
console.log('har saved at output.har');
fs.writeFileSync('test/diagnostics/output.har', resp, 'utf8');
} else {
console.err('Error getting HAR file: ' + err);
}
exports.proxy.stop(exports.config.proxyPort);
});
},
}
tests / spec / localTest.js
describe('BrowserStack Local Testing', function() {
it('can check tunnel working', function() {
browser.url('http://localhost:8083');
});
});
Я застрял при получении HAR от прокси в ловушке onComplete, но я не могу придумать способ получитьHAR.
Это правильная конфигурация?Как мне завершить браузер обратным вызовом, чтобы прокси мог захватить HAR?
Я запускаю тест с использованием wdio cli
. / Node_modules / .bin /wdio conf / local.conf.js