2011-10-08 1 views
12

Uso la sintassi WebDriver selenio. Lo so, che nella sintassi basata su server selenio, è possibile generare un evento javascript facendo:Come licenziare l'evento JS nel selenio?

Selenium selenium = new DefaultSelenium("localhost", server.getPort(), 
      "*iexplore", "http://www.eviltester.com"); 
selenium.fireEvent("lteq30", "blur"); 

come faccio a fare lo stesso in un'applicazione, creata con WebDriver (ad esempio, FirefoxDriver)?

risposta

17

Purtroppo i progettisti Selenio WebDriver esplicitamente decided not to include questa funzionalità in selenio 2.

E 'una scelta deliberata di non includere questa funzione in WebDriver, dal momento che è di solito un trucco per lavorare gli eventi intorno sintetizzati non si comportano correttamente . Preferiremmo eliminare questa esigenza fornendo un ottimo supporto per gli eventi nativi con lo , quindi continueremo a migliorarlo andando in avanti con lo . Un utente non attiverebbe mai un evento di messa a fuoco, farebbe clic sul controllo del modulo . Questo è ciò che dovrebbero fare anche i tuoi test.

Detto questo, si può eseguire qualsiasi codice javascript che si desidera. Pertanto, è necessario esaminare come attivare eventi con javascript. Dai un'occhiata a this StackOverflow question per l'ispirazione.

Poi si può fare qualcosa di simile:

FirefoxDriver driver = new FirefoxDriver(); 
driver.ExecuteScript("[your fire event javascript code]"); 

Sono sicuro che si potrebbe creare una funzione wrapper per ottenere fondamentalmente la stessa cosa di fireEvent.

+0

sarà semplicemente eseguendo il() evento click in JS fare il lavoro o ho veramente bisogno per eseguire la funzione specifica nel codice? Se è il secondo, sembra una brutta dipendenza da introdurre nei test. –

5

Un'altra soluzione:

((JavascriptExecutor) driver).executeScript("return document.getElementById('element').blur()"); 
+1

perché hai una dichiarazione di ritorno in questo? non funzionerebbe senza il ritorno? –

+1

L'istruzione return non è necessaria per la funzionalità. Ma con la dichiarazione di ritorno, ottieni anche la risposta. –