Я пытался интегрировать browsermob-proxy-node со структурой protractor-cucumber-typcript.Для добавления заголовков на домашнюю страницу моего приложения.Сценарий таков, что если заголовки добавляются в приложение, пользователь может выполнить единый вход на домашнюю страницу.
похоже, что он не работает, заголовки не добавляются, поэтому страницавыходит из строя.Может ли кто-нибудь проверить мой код, чтобы убедиться в правильности моих действий?
const { BeforeAll, After, AfterAll, Status, setDefaultTimeout, Before } = require("cucumber");
import { browser } from "protractor";
import * as path from "path";
import log4js = require('log4js');
import { JsonFormatter, UsageJsonFormatter } from "cucumber";
var env = require('../../data/url');
var headersToSet = {
'CORPID': 'UserID',
'MEMBEROF': 'mensa'
}
BeforeAll(function (done) {
browser.params.proxy.addHeader(browser.params.proxyData.port, headersToSet, function(err, resp){
if(!err){
browser.params.proxy.startHAR(browser.params.proxyData.port, 'test', function(err, resp){
if(!err){
console.log("good for you");
done();
}else{
console.log("Start HAR failed");
}
});
} else{
console.error("Error setting up custom headers")
browser.params.proxy.stop(browser.params.proxyData.port, function(){
});
}
})
});
Before(async function () {
await browser.logger.info("inside before hook");
let testappURL = env.getURL();
await browser.get(testappURL);
await browser.sleep(20000);
});
After(async function (scenario) {
await browser.logger.info("inside after hook");
if (scenario.result.status === Status.FAILED) {
// screenShot is a base-64 encoded PNG
const screenShot = await browser.takeScreenshot();
this.attach(screenShot, "image/png");
}
// var harData = await browser.params.proxy.getHAR(browser.params.proxyData.port)
// await console.log('harData', harData);
});
AfterAll(function (done) {
console.log('after ALL');
browser.params.proxy.getHAR(browser.params.proxyData.port, function (err, harData) {
console.log('harData', harData);
browser.quit().then(function () {
done();
});
});
});
Вот мои conf.ts
let path = require('path');
import * as fs from "fs";
import { browser, Config } from "protractor";
import { Reporter } from "../support/reporter";
import { util } from "../utils/test";
var log4js = require("log4js");
import * as oracledb from 'oracledb';
const jsonReports = process.cwd() + "/reports/json";
const logs = process.cwd() + "/logger/lo.txt";
var baseDir = path.resolve(__dirname, '../..');
console.log("Base Dir: " + baseDir);
var Proxy = require('browsermob-proxy').Proxy,
proxyHost = 'localhost',
Q = require('q');
export const config: Config = {
params: {
environment: 'dit', //fdi or rit can be passed from cmd line
platform: 'browser'
},
seleniumAddress: "http://localhost:4444/wd/hub",
SELENIUM_PROMISE_MANAGER: false,
// baseUrl: env.get(browser.params.environment),
capabilities: {
'browserName': 'chrome',
'args': ['-disable-dev-shm-usage'],
shardTestFiles: false,
maxInstances: 5,
'chromeOptions': {
'perfLoggingPrefs': {
'enableNetwork': true,
'enablePage': true
//'enableTimeline': false
}
},
proxy: {
proxyType: 'manual',
httpProxy: 'localhost:8888'
},
loggingPrefs: {
performance: 'INFO',
browser: 'ALL'
}
},
framework: "custom",
frameworkPath: require.resolve("protractor-cucumber-framework"),
specs: [baseDir + '/features/automation/regression/*.feature'],
onPrepare: () => {
browser.ignoreSynchronization = true;
browser.manage().timeouts().implicitlyWait(12000);
browser.manage().window().maximize();
Reporter.createDirectory(jsonReports);
log4js.configure("./config/log4js.json");
browser.logger = log4js.getLogger("default");
browser.logger2 = log4js.getLogger("another");
browser.logger3 = log4js.getLogger("file");
var proxy = new Proxy();
return Q.ninvoke(proxy, 'start', 8888).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');
});
// hooks.createDirectory(logs);
//return env.get(browser.params.environment);
},
beforeLaunch: () => {
if (fs.existsSync('./logs/ExecutionLog.log')) {
fs.unlinkSync('./logs/ExecutionLog.log');
}
},
cucumberOpts: {
compiler: "ts:ts-node/register",
format: "json:./reports/json/cucumber_report.json",
require: [
baseDir + '/typeScript/stepdefinitions/*.js',
baseDir + '/typeScript/support/*.js',
baseDir + '/dbUtils/index',
baseDir + '/data/url'
],
strict: true,
tags: "@apptest",
restartBrowserBetweenTests: true
},
onComplete: () => {
Reporter.createHTMLReport();
return Q.ninvoke(browser.params.proxy, 'stop', browser.params.proxy);
},
};
Вот некоторые из использованных мной ресурсов: -https://github.com/afternoon/protractor-browsermob-test https://github.com/zzo/browsermob-node