2010-08-19 2 views
9

Durante l'utilizzo di FirefoxDriver per scrivere i test,FirefoxDriver: come disabilitare javascript, css e rendere instantKeys di tipo istantaneo?

Ho scoperto che il caricamento delle pagine è molto lento a causa del javascript e del css in esecuzione. C'è un modo per disabilitarlo ? possibile installare anche il plugin Noscript sul profilo?

Inoltre, sendKeys(), in realtà digita il testo. tuttavia, questo è abbastanza lento per il testo lungo, in ogni caso per digitare istantaneamente tutta la stringa nella casella di input?

+1

Si sta sovvertendo WebDriver facendo apparire l'intera stringa in una volta. WebDriver è progettato per emulare un utente, un utente non scrive magicamente il testo, lo digita. Potrebbe richiedere un po 'più di tempo, ma è un'emulazione accurata di una persona reale. – Ardesco

+0

Se si disabilita JS, CSS, l'intera pagina potrebbe interrompersi in modo che alcuni test funzionali che verranno eseguiti da Selenium WebDriver potrebbero essere interrotti. Lo scopo del test è Funzionale, non Prestazionale. –

risposta

17

È possibile disattivare JavaScript in FirefoxProfile:

FirefoxProfile profile = new FirefoxProfile(); 
profile.setPreference("javascript.enabled", false); 
WebDriver driver = new FirefoxDriver(profile); 

Non credo che ci sia un modo per disattivare i CSS e questo non è quello che si dovrebbe fare - questo può rompere la vostra applicazione web, e la disattivazione può fare questo JavaScript pure.

Non c'è modo di impostare direttamente il valore del campo di testo - WebDriver è progettato per simulare l'utente reale che "guida" il browser - ecco perché ci sono solo sendKeys.

Tuttavia è possibile impostare il valore dell'elemento tramite chiamata JavaScript (se non lo si disabilita, ovviamente). Questo è più veloce per la lunga prova, ma questo non è l'emulazione del interazione con l'utente in modo da alcuni convalide non possono essere attivati, in modo da utilizzare con cautela:

private void setValue(WebElement element, String value) { 
    ((JavascriptExecutor)driver).executeScript("arguments[0].value = arguments[1]", element, value); 
} 

e usarlo:

WebElement inputField = driver.findElement(By...); 
setValue(inputField, "The long long long long long long long text......"); 
0

anche puoi usare PhantomJS è un browser WebKit senza interfaccia utente, quindi è molto più veloce di FireFox o Chrome. È disponibile il supporto per i driver Web per PhantomJS.