Поздновато танцевать. Мне удалось интегрировать браузермоб в nightwatch. Вот подробные шаги
- Скачать прокси для браузера https://bmp.lightbody.net/
- Откройте ваш cmd и перейдите в папку bin, а затем запустите browsermob, используя «browsermob-proxy».
Я предполагаю, что у вас есть базовые настройки ночного дозора. Также вам понадобится мобпрокси. Установите его из "npm i browsermob-proxy-api"
Создайте глобальный хук в nightwatch. Скажите «globalmodule.js» и укажите путь к этому файлу в globals_path в nightwatch.json.
В globalmodule создайте глобальные хуки, как описано в http://nightwatchjs.org/guide#external-globals а>
В хуке beforeEach добавьте следующий код: //если вы не используете корпоративный прокси и вам не нужно связываться с вышестоящим прокси
var MobProxy = require('browsermob-proxy-api');
var proxyObj = new MobProxy({'host': 'localhost', 'port': '8080'});
//при условии, что вы запустили browsermob на порту 8080. То есть на шаге 2.
//если вы работаете под корпоративным прокси, возможно, вам придется связать свой запрос. Это требует редактирования в пакете browsermob-proxy-api. Следуйте инструкциям, приведенным в конце этого раздела.
Запустить прокси на новом порту
proxyObj.startPort (порт, функция (ошибка, данные) { if (ошибка) { console.log (ошибка); } else { console.log («Новый порт запущен») } })
Как только у нас появится новый порт, мы должны запустить наш браузер Chrome на указанном выше порту, чтобы все запросы браузера пересылались через прокси-сервер browsermob.
proxyObj.startPort (порт, функция (ошибка, данные) { if (ошибка) { console.log (ошибка); } else { console.log («Новый порт запущен») var dataInJson = JSON.parse (данные);
//Шаг 8:
this.test_settings.desiredCapabilities = {
"browserName": "chrome",
"proxyObj": proxyObj, //for future use
"proxyport": dataInJson.port, //for future use
"proxy": {
"proxyType": "manual",
"httpProxy": "127.0.0.1:" + dataInJson.port,
"sslProxy": "127.0.0.1:" + dataInJson.port //important is you have https site
},
"javascriptEnabled": true,
"acceptSslCerts": true,
"loggingPrefs": {
"browser": "ALL"
}
}
}
})
Попробуйте запустить с указанными выше настройками, вы можете проверить, идет ли cmd [созданный на шаге 2 для подтверждения запроса через указанный выше порт. Будет немного активности]
Для создания HAR и получения созданного HAR browsermob-proxy-api предоставляет отличный API.
добавьте createHAR.js в любой путь и укажите этот путь в nightwatch.json[раздел custom_commands]
exports.command = функция (обратный вызов) { var self = this;
if (!self.options.desiredCapabilities.proxyObj) { console.error('Нет настройки прокси - вы вызывали setupProxy() ?'); }
this.options.desiredCapabilities.proxyObj.createHAR(this.options.desiredCapabilities.proxyport, { 'captureHeaders': 'true', 'captureContent': 'true', 'captureBinaryContent': 'true', 'initialPageRef': 'homepage' }, function (err, result){ if(err){ console.log(err) }else{ console.log(result) if (typeof callback === "function") { console.log(this.options.desiredCapabilities .proxyObj); console.log(this.options.desiredCapabilities.proxyport); // console.log(result); callback.call(self, result); } } });
вернуть это; };
затем, чтобы получитьHAR, добавьте getHAR.js, добавьте код ниже.
var parsedData;
exports.command = function(callback) {
var self = this;
if (!self.options.desiredCapabilities.proxy) {
console.error('No proxy setup - did you call setupProxy() ?');
}
self.options.desiredCapabilities.proxyObj.getHAR(self.options.desiredCapabilities.proxyport, function (err, data) {
console.log(self.options.desiredCapabilities.proxyObj);
console.log(self.options.desiredCapabilities.proxyport);
//console.log(result);
if(err){
console.log(err)
}else{
parsedData = JSON.parse(data)
console.log(parsedData.log.entries)
}
if (typeof callback === "function") {
console.log(self.options.desiredCapabilities.proxyObj);
console.log(self.options.desiredCapabilities.proxyport);
callback.call(self, parsedData);
}
});
return this;
};
В начале теста createHAR не будет иметь proxyObj, поэтому этот шаг должен выполняться синхронно. Оберните этот шаг с помощью browser.perform()
browser.perform(function(){ browser.createHAR() }) ////некоторая навигация
browser.perform(функция(){browser.getHAR()})
Примечание. Если вы работаете за корпоративным прокси, возможно, вам придется использовать цепочку прокси, которую предлагает browsermob. Согласно документации по прокси-серверу browsermob, перейдите в раздел API, -> /proxy может иметь параметры запроса «proxyUsername» и «proxyPassword».
В node_modules->browsermob-proxy-api->index.js добавьте следующую строку после строки 22:
this.proxyUsername = cfg.proxyUsername || '';
this.proxyPassword = cfg.proxyPassword || '';
this.queryString = cfg.queryString || 'httpProxy=yourupstreamProxy:8080'; //you will get this from pac file
then at line 177, where package is making request '/proxy' to browser.
replace
path: url
to
path: url + '?proxyUsername=' +this.proxyUsername + '&proxyPassword=' + this.proxyPassword + '&' + this.queryString
person
Rajesh
schedule
18.01.2018