java - ¿Cómo capturar todas las solicitudes realizadas por página en webdriver? ¿Hay alguna alternativa a Browsermob?
selenium proxy (2)
Estoy utilizando Selenium2 / WebDriver para probar mis aplicaciones web. Todas las pruebas están escritas en Java y se ejecutan con Maven.
Al abrir una página con webdriver me gustaría capturar todas las solicitudes realizadas por página (imágenes, archivos js y css, etc.). Utilizo estos datos principalmente por dos razones
- Comprobación de 404 (y otros errores) en llamadas
- verificando si el código analítico está funcionando (verificando si está enviando solicitudes apropiadas)
Dependiendo del proyecto, uso Firebug con Netexport o Browsermob proxy. En ambos casos, puedo obtener fácilmente un archivo HAR (Html ARchive), analizarlo y extraer los datos que deseo.
Aquí está el problema: no estoy contento con ninguna de estas soluciones. Tengo problemas especialmente para obtener el archivo HAR cuando una página contiene un video que se está cargando demasiado tiempo. Estoy buscando algo más estable.
Entonces, las preguntas son:
¿Hay alguna alternativa a Browsermob? Sé sobre FiddlerCore pero es una biblioteca .NET y mis pruebas están escritas en Java. También escuché sobre Ajax DynaTrace y sé que hay alguna manera de integrarlo con Selenium, pero la documentación que encontré fue para Selenium-RC no para WebDriver.
¿Hay alguna forma de integrar DynaTrace con WebDriver o usar FiddlerCore con Java?
¿Hay alguna otra manera de lograr los objetivos que mencioné? Estoy buscando un proxy que pueda controlar fácilmente desde mi código. Exportar datos a HAR sería una gran ventaja.
Encontré una discusión de grupos de google sobre el tema . Estos enlaces parecen una alternativa prometedora para Browsermob:
Hay una alternativa con Firefox ver 42+, hay un complemento llamado 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);
y ejecutar el siguiente script nos dará todas las respuestas de solicitud
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"));