Se non è possibile modificare il contenuto della pagina, è possibile utilizzare un proxy o utilizzare uno script di contenuto in un'estensione installata nel browser. Facendolo all'interno del selenio si scriverà del codice che inietta lo script come uno dei figli di un elemento esistente, ma non sarà possibile eseguirlo prima che la pagina venga caricata (quando la chiamata get()
del driver viene restituita)
String name = (String) ((JavascriptExecutor) driver).executeScript(
"(function() { ... })();" ...
La documentazione lascia non specificato il momento in cui il codice inizia l'esecuzione. Lo si vorrebbe prima che il DOM inizi a caricarsi in modo tale che la garanzia possa essere soddisfatta solo con il proxy o il percorso di script del contenuto dell'estensione.
Se è possibile strumentare la pagina con un'imbracatura minima, è possibile rilevare la presenza di un parametro di query url speciale e caricare contenuto aggiuntivo, ma è necessario farlo utilizzando uno script incorporato. Pseudocode:
<html>
<head>
<script type="text/javascript">
(function() {
if (location && location.href && location.href.indexOf("SELENIUM_TEST") >= 0) {
var injectScript = document.createElement("script");
injectScript.setAttribute("type", "text/javascript");
//another option is to perform a synchronous XHR and inject via innerText.
injectScript.setAttribute("src", URL_OF_EXTRA_SCRIPT);
document.documentElement.appendChild(injectScript);
//optional. cleaner to remove. it has already been loaded at this point.
document.documentElement.removeChild(injectScript);
}
})();
</script>
...
fonte
2015-11-23 00:15:14
Ma la mia domanda è che come posso iniettare codice JS utilizzando Selenium Webdriver prima del caricamento della pagina. Non ho accesso al contenuto di tali pagine, quindi non posso inserire un codice JS in esse, a meno che non utilizzi un proxy per riscrivere il contenuto della pagina. – Alex
Penso, ho trovato la risposta. Secondo http://grokbase.com/t/gg/selenium-users/12a99543jq/is-there-a---to-inject-javascripts-before-page-onload, non possiamo farlo se non utilizziamo un proxy iniettare uno script all'inizio della pagina. – Alex
Sarebbe possibile installare un'applicazione come GreaseMonkey o Tampermonkey per iniettare gli script? https://addons.mozilla.org/en-us/firefox/addon/greasemonkey/ –