J'utilise Selenium2/WebDriver pour tester mes applications Web. Tous les tests sont écrits en Java et exécutés avec Maven.
Lors de l'ouverture d'une page avec un webdriver, j'aimerais capturer toutes les demandes faites par page (images, fichiers js et css, etc.). J'utilise ces données principalement pour deux raisons
Selon le projet, j'utilise Firebug avec Netexport ou le proxy Browsermob. Dans les deux cas, je peux facilement obtenir un fichier HAR (Html ARchive), l'analyser et extraire les données que je veux.
Voici le problème: je ne suis satisfait d'aucune de ces solutions. J'ai particulièrement des problèmes pour obtenir le fichier HAR lorsqu'une page contient une vidéo qui est chargée trop longtemps. Je cherche quelque chose de plus stable.
Donc, les questions sont:
Existe-t-il une alternative à Browsermob? Je connais FiddlerCore mais c'est une bibliothèque .NET et mes tests sont écrits en Java. J'ai également entendu parler d'Ajax DynaTrace et je sais qu'il existe un moyen de l'intégrer à Selenium, mais la documentation que j'ai trouvée concernait Selenium-RC et non WebDriver.
Existe-t-il un moyen d'intégrer DynaTrace à WebDriver ou d'utiliser FiddlerCore avec Java?
Existe-t-il un autre moyen d'atteindre les objectifs que j'ai mentionnés? Je recherche un proxy que je peux facilement contrôler à partir de mon code. L'exportation de données vers HAR serait un grand avantage.
J'ai trouvé une discussion Google Groupes sur le sujet . Ces liens semblent être une alternative prometteuse à Browsermob:
Il existe une alternative avec firefox ver 42+, il existe un addon appelé 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);
et exécuter le script suivant nous donnera toutes les réponses aux demandes
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"));
J'ai récemment travaillé sur ce type de proxy. Le projet est assez frais, je travaille toujours sur la documentation mais ça vaut peut-être la peine d'être vérifié. Les sources et exemples sont ici
<dependency>
<groupId>com.moxproxy</groupId>
<artifactId>moxproxy.core</artifactId>
<version>1.0.2</version>
</dependency>
MoxProxy proxy = LocalMoxProxy.builder()
.withPort(89)
.build();
proxy.startServer();
Configurer le pilote Web Selenium pour utiliser le proxy sur l'hôte local avec le port 89 et exécuter le test
Recueillir du trafic
List<MoxProxyProcessedTrafficEntry> requestTraffic = proxy.getAllRequestTraffic();
List<MoxProxyProcessedTrafficEntry> responseTraffic = proxy.getAllResponseTraffic();
Outre la collecte de proxy de trafic, il est possible de modifier les demandes et les réponses - détails sur github