2013-04-29 10 views
5

Ho problemi con la scrittura del test al selenio per controllare la mia applicazione. Quello che voglio testare è quando l'utente digita login/password corretti, viene visualizzata la pagina corretta e l'utente ha effettuato il login.Il selenio non vede elementi di pagina AngularJS

Il problema principale è che il mio modulo di login è generato come una direttiva AngularJS (ho due pagine di accesso diverse e questa direttiva viene riutilizzata in entrambe le posizioni) e Selenium sembra non essere in grado di vedere gli elementi da questo markup generato dalla direttiva. Ciò che è più importante, i test stavano passando su questa pagina prima di aver sostituito il normale markup con generato dalla direttiva.

Quindi sembra che in qualche modo Selenium non sia in grado di vedere gli elementi HTML generati dalla direttiva.

Qualche suggerimento su come risolvere questo problema? Tranne naturalmente la modifica di questa modifica all'introduzione della direttiva :)

+0

Sto avendo lo stesso problema esatto. Ho un sito Web angolare che sto cercando di testare ma quando eseguo i test della junit, l'elemento non viene trovato. Ho provato vari localizzatori di elementi. Nessuno ha funzionato. – Automationtested

risposta

1

Ok, sembra come se fosse me abusando Geb con selenio. Non ho specificato il driver predefinito e Geb ne ha scelto uno che non funziona con AngularJS. Dopo aver modificato manualmente il driver in Chrome, tutto ha iniziato a funzionare.

1

L'origine della pagina mostrerà il modello prima che sia stato compilato da Angular. Dovresti essere in grado di vedere il modello compilato utilizzando la console per sviluppatori di Chrome: prova a fare clic con il pulsante destro del mouse su un elemento e seleziona "ispeziona elemento" per aprirlo.

driver.getPageSource() non riuscirà per lo stesso motivo (ottiene il modello non compilato), ma driver.findElement() dovrebbe funzionare correttamente.

<input id="username" type="text" ng-model="foo"/> 

dovrebbe essere trovata utilizzando

driver.findElement(By.id("username")); 
+0

Sfortunatamente non è così. Ho modificato la domanda per essere più chiara. Il problema è che i miei test stavano passando questa pagina prima di aver aggiunto questo markup generato dalla direttiva. –

Problemi correlati