2012-05-25 22 views
17

Używam Selenium2/WebDriver do testowania aplikacji internetowych. Wszystkie testy są napisane w Javie i uruchamiane z Maven.Jak przechwytywać wszystkie żądania wykonane przez stronę w webdriverze? Czy jest jakaś alternatywa dla Browsermob?

Podczas otwierania strony z webdriverem chciałbym uchwycić wszystkie żądania wykonane przez stronę (obrazy, pliki js i css, itp.). I korzystać z tych danych, głównie z dwóch powodów

  • sprawdzanie 404 (i innych błędów) w połączeniach
  • sprawdzenie, czy kod Analytics pracy (sprawdzanie, czy to wysyłając odpowiednie wnioski)

W zależności od projekt Używam Firebug z Netexport lub proxy Browsermob. W obu przypadkach mogę łatwo uzyskać plik HAR (Html ​​ARchive), przeanalizować go i wyodrębnić żądane dane.

Oto problem: Nie jestem zadowolony z żadnego z tych rozwiązań. Mam szczególne problemy z pobieraniem pliku HAR, gdy strona zawiera zbyt długo ładowany film. Szukam czegoś bardziej stabilnego.

więc pytania są:

Czy istnieje alternatywa do Browsermob? Wiem o FiddlerCore, ale jest to biblioteka .NET, a moje testy napisane są w Javie. Słyszałem również o Ajax DynaTrace i wiem, że jest jakiś sposób na zintegrowanie go z Selenium, ale dokumentacja, którą znalazłem, dotyczyła Selenium-RC, a nie WebDriver.

Czy istnieje sposób na integrację DynaTrace z WebDriver lub użycie FiddlerCore z Javą?

Czy istnieje inny sposób na osiągnięcie celów, o których wspomniałem? Szukam proxy, które mogę łatwo kontrolować z mojego kodu. Eksport danych do HAR byłby ogromnym plusem.

+0

Można użyć utworzyć C# usługa i wywołać ją z java – Indraneel

Odpowiedz

5

Istnieje alternatywa z Firefox ver 42+, jest dodatek o nazwie 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); 

i uruchamianie po scr IPT dadzą nam wszystkie odpowiedzi żądania

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")); 
+0

Próbowałam powyższy kod. jest napisane ~ org.openqa.selenium.JavascriptException: ReferenceError: HAR nie jest zdefiniowany ~ Jak dołączyć tę zależność. Selenium3.0.0, FF 51, Mac OS. – user2649233