Настройте WebDriverIO с помощью BrowserMobProxy
У кого-нибудь есть хороший пример того, как настроить BrowserMobProxy с WebDriverIO? Это так, я могу захватить сетевой трафик. Раньше он работал с WebDriverJS, который по сути является устаревшей версией WebDriverIO.
1 ответ
Вы можете использовать приведенный ниже код, чтобы сделать это. Убедитесь, что ваш browsermob proxy
а также selenium server
бежит. Затем скопируйте вставьте код ниже в test.js
файл и положить его в webdriverio
установленная папка. От cmd
перейдите в эту папку и запустите node test.js
, stuff.har
должно быть сгенерировано где test.js
расположен.
var Proxy = require('browsermob-proxy').Proxy
, webdriverio = require("./node_modules/webdriverio/")
, fs = require('fs')
, proxy = new Proxy()
;
proxy.cbHAR('search.yahoo.com', doSeleniumStuff, function(err, data) {
if (err) {
console.error('ERR: ' + err);
} else {
fs.writeFileSync('stuff.har', data, 'utf8');
}
});
function doSeleniumStuff(proxy, cb) {
var browser = webdriverio.remote({
host: 'localhost'
, port: 4444
, desiredCapabilities: { browserName: 'firefox', seleniumProtocol: 'WebDriver', proxy: { httpProxy: proxy } }
});
browser
.init()
.url("http://search.yahoo.com")
.setValue("#yschsp", "javascript")
.submitForm("#sf")
.end().then(cb);
}
Если вы просто хотите захватить сетевой трафик, есть еще один способ сделать это.
Webdriverio позволяет использовать протокол Chrome Dev Tools.
Пожалуйста, прочтите блог webdriverio
Это один из примеров использования инструментов Chrome dev вместе с webdriverio, дайте мне знать, если вам понадобится дополнительная помощь.
const { remote } = require('webdriverio')
let browser;
(async () => {
browser = await remote({
automationProtocol: 'devtools',
capabilities: {
browserName: 'chrome'
}
})
await browser.url('https://webdriver.io')
await browser.call(async () => {
const puppeteerBrowser = browser.getPuppeteer()
const page = (await puppeteerBrowser.pages())[0]
await page.setRequestInterception(true)
page.on('request', interceptedRequest => {
if (interceptedRequest.url().endsWith('webdriverio.png')) {
return interceptedRequest.continue({
url: 'https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png'
})
}
interceptedRequest.continue()
})
})
// continue with WebDriver commands
await browser.refresh()
await browser.pause(2000)
await browser.deleteSession()
})().catch(async (e) => {
console.error(e)
await browser.deleteSession()
})
Поскольку мне не удалось решить эту проблему с помощью browsermob proxy
(AFAIK он не обновлялся некоторое время)
Я создал небольшой модуль npm для записи тестов на селен в виде файлов HAR - https://www.npmjs.com/package/har-recorder
Я взял предложение @Raulster24 и реализовал его с помощью протокола Chrome Dev Tools - https://github.com/loadmill/har-recorder/blob/master/index.js