Вопрос по webdriver, har, selenium, java, proxy – Как захватить все запросы, сделанные на странице в веб-драйвере? Есть ли альтернатива Browsermob?

19

Я использую Selenium2 / WebDriver для тестирования своих веб-приложений. Все тесты написаны на Java и работают с Maven.

При открытии страницы с помощью веб-драйвера я хотел бы захватить все запросы, сделанные страницей (изображения, файлы js и css и т. Д.). Я использую эти данные в основном по двум причинам

checking for 404 (and other errors) in calls checking if analytics code is working (checking if it's sending proper requests)

В зависимости от проекта я использую Firebug с Netexport или прокси Browsermob. В обоих случаях я могу легко получить файл HAR (Html ARchive), проанализировать его и извлечь нужные данные.

Вот проблема: Я не доволен ни одним из этих решений. У меня особенно возникают проблемы с получением файла HAR, когда на странице содержится видео, которое загружается слишком долго. Я ищу что-то более стабильное.

Итак, вопросы:

Есть ли альтернатива Browsermob? Я знаю о FiddlerCore, но это библиотека .NET, и мои тесты написаны на Java. Я также слышал об Ajax DynaTrace и знаю, что есть какой-то способ его интеграции с Selenium, но документация, которую я нашел, была для Selenium-RC, а не для WebDriver.

Есть ли способ интегрировать DynaTrace с WebDriver или использовать FiddlerCore с Java?

Есть ли другой способ достижения целей, о которых я говорил? Я ищу прокси, которым я могу легко управлять из своего кода. Экспорт данных в HAR был бы большим плюсом.

Вы можете использовать создать веб-сервис C # и вызвать его из Java Indraneel
Этот вопрос не совпадает, но вполне соответствует: «Как получить код ответа HTTP с помощью Selenium WebDriver & quot;stackoverflow.com/questions/6509628/… Ralph

Ваш Ответ

3   ответа
0

я все еще работаю над документацией, но, возможно, стоит проверить. Источники и примерыВот

Add dependency to your project
    <dependency>
       <groupId>com.moxproxy</groupId>
       <artifactId>moxproxy.core</artifactId>
       <version>1.0.2</version>
    </dependency>
Start proxy
    MoxProxy proxy = LocalMoxProxy.builder()
                .withPort(89)
                .build();
    proxy.startServer();

Setup selenium webdriver to use proxy on localhost with port 89 and run test

Collect traffic

    List<MoxProxyProcessedTrafficEntry> requestTraffic = proxy.getAllRequestTraffic();
    List<MoxProxyProcessedTrafficEntry> responseTraffic = proxy.getAllResponseTraffic();

Помимо сбора трафика прокси предоставляет возможность изменять запросы и ответы - подробности оGitHub

5

есть дополнение под названием 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);

и выполнение следующего скрипта даст нам все ответы на запросы

 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"));
Я попробовал приведенный выше код. он говорит ~ org.openqa.selenium.JavascriptException: ReferenceError: HAR не определен ~ Как мне включить эту зависимость. Selenium 3.0.0, FF 51, Mac OS.
11
Я нашел этот ответ очень полезным:stackoverflow.com/a/20984973/661414

Похожие вопросы