7
votes

Sélénium ne voit pas les éléments de page angularjs

J'ai un problème avec l'écriture de test de sélénium pour vérifier mon application. Ce que je veux tester, c'est lorsque les types d'utilisateurs sont des mots de connexion / mot de passe corrects, la page correcte est affichée et que l'utilisateur est connecté.

Le problème principal est que mon formulaire de connexion est généré comme une directive angularjs (j'ai deux pages de connexion différentes et cette directive est réutilisée aux deux endroits) et sélénium semble être incapable de voir des éléments de ce marquage généré par la directive. Ce qui est le plus important, les tests passaient sur cette page avant d'avoir remplacé le balisage régulier avec générés par la directive.

Ainsi, on dirait que le sélénium n'est pas capable de voir des éléments HTML générés par la directive.

Toute suggestion comment je pourrais surmonter ce problème? Sauf entendre bien sûr, ce changement introduit la directive :)


1 commentaires

J'ai exactement le même problème. J'ai un site Web angulaire que j'essaie de tester, mais lorsque j'exécute les tests Junit, l'élément n'est pas trouvé. J'ai essayé divers localisateurs d'éléments. Aucun n'a travaillé.


3 Réponses :


1
votes

La source de la page indiquera le modèle avant d'avoir été compilé par angulaire. Vous devriez pouvoir voir le modèle compilé à l'aide de la console de développeur de Chrome: essayez de cliquer avec le bouton droit de la souris sur un élément et de sélectionner «Inspecter l'élément» pour l'ouvrir.

pilote.gepagesource () échouera pour la même raison (il obtient le non pondéré Modèle), mais pilote.findellement () devrait fonctionner juste bien. P>

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


1 commentaires

Malheureusement, ce n'est pas le cas. J'ai édité la question pour être plus clair. Le problème est que mes tests passaient sur cette page avant d'avoir ajouté ce marquage généré par la directive.



2
votes

OK, on ​​dirait que c'était moi avec moi-même Geb avec sélénium. Je n'ai pas spécifié le pilote par défaut et le GEB a choisi celui qui ne fonctionne pas avec AngularJS. Après avoir changé manuellement le conducteur à Chrome, tout a commencé à travailler.


0 commentaires

1
votes

Je ne pense pas que cela soit associé à l'angulaire, mais plutôt sélénium, le sélénium n'aura que le DOM initial avant toute manipulation de JavaScript de celui-ci.

Nous avons vu le même problème avec de simples plugins JQuery qui ont rendu des éléments DOM.

Voir si le conseil ici aide:

Pourquoi le sélénium peut-il trouver des éléments DOM ajoutés dynamiquement? Capybara ne reconnaît pas les éléments Dom ajoutés de manière dynamique?


0 commentaires