Ответ 1
Я нашел обсуждение групп google в теме. Эти ссылки выглядят как перспективная альтернатива Browsermob:
Я использую Selenium2/WebDriver для тестирования своих веб-приложений. Все тесты написаны на Java и работают с Maven.
При открытии страницы с webdriver я хотел бы захватить все запросы, сделанные страницей (изображения, js и css файлы и т.д.). Я использую эти данные главным образом по двум причинам.
В зависимости от проекта я использую Firebug с Netexport или прокси-сервером Browsermob. В обоих случаях я могу легко получить файл HAR (Html ARchive), проанализировать его и извлечь нужные данные.
Здесь проблема: Я не доволен ни одним из этих решений. У меня есть особые проблемы с получением файла HAR, когда на странице слишком много загружаемого видео. Я ищу что-то более стабильное.
Итак, вопросы:
Есть ли альтернатива Browsermob? Я знаю о FiddlerCore, но это библиотека .NET, и мои тесты написаны на Java. Я также слышал об Ajax DynaTrace, и я знаю, что есть способ интегрировать его с Selenium, но документация, которую я нашел, была для Selenium-RC, а не для WebDriver.
Есть ли способ интегрировать DynaTrace с WebDriver или использовать FiddlerCore с Java?
Есть ли другой способ достижения целей, о которых я говорил? Я ищу прокси, который я могу легко контролировать из своего кода. Экспорт данных в HAR будет большим плюсом.
Я нашел обсуждение групп google в теме. Эти ссылки выглядят как перспективная альтернатива Browsermob:
Существует альтернатива с firefox ver 42+, есть аддон под названием Firefox HarExport
File harExportApi = new File(System.getProperty("user.dir")
+ "/src/main/resources/firebug/harexporttrigger-0.5.0-beta.7.xpi");
netExportProfile.addExtension(harExportApi);
netExportProfile.setPreference("extensions.netmonitor.har.enableAutomation", true);
netExportProfile.setPreference("extensions.netmonitor.har.contentAPIToken", "test");
netExportProfile.setPreference("extensions.netmonitor.har.autoConnect", true);
cap.setCapability(FirefoxDriver.PROFILE, netExportProfile);
и работающий после script даст нам все ответы на запрос
String getHarLogScript = "var options = {\n" +
" token: \"test\",\n" +
" getData: true,\n" +
" title: \"my custom title\",\n" +
" jsonp: false,\n" +
" };\n" +
"\n" +
" HAR.triggerExport(options).then(result => {\n" +
" var har = JSON.parse(result.data);\n" +
"\n" +
" // Use performance.timing to provide onContentLoad\n" +
" +
" +
" var t = performance.timing;\n" +
" var pageTimings = har.log.pages[0].pageTimings;\n" +
" pageTimings.onContentLoad = t.domContentLoadedEventStart - t.navigationStart;\n" +
" pageTimings.onLoad = t.loadEventStart - t.navigationStart;\n" +
"\n" +
" window.HarEntries=har.log.entries\n" +
"\n" +
" console.log(\"HAR log (\" + result.data.length + \") \", har.log);\n" +
" }, err => {\n" +
" console.error(err);\n" +
" });"
LOG.info("Loading HAR log entries object into browser HarEntries object");
SeleniumUtils.executeScript(driver, getHarLogScript);
harEntries = ((List<Object>) SeleniumUtils.executeScript(driver, "return window.HarEntries"));