1

I have been trying to integrate browsermob-proxy-node with a protractor-cucumber-typescript framework. For the purpose of adding headers to the home page of my application. The scenario is such that the if the headers are added to the application, the user is able to SSO to home page.

it doesn't seem to be working, the headers don't get added therefore the page fails. Could someone validate my code to see if what I am doing is correct ?

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();
        });
    });
});

here is my 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);
    },
};

Some of the resources, I have used are :- https://github.com/afternoon/protractor-browsermob-test https://github.com/zzo/browsermob-node

Monnie_tester
  • 417
  • 1
  • 5
  • 15
  • did you get a solution for this while using cucumber , I am also not able to capture har file using protractor cucumber but works when dont use cucumber https://github.com/afternoon/protractor-browsermob-test - this repo works well not with cucumber – rarunp04 May 24 '20 at 11:37

0 Answers0