web-dev-qa-db-fra.com

Pourquoi utilisons-nous WebDriver au lieu de Selenium IDE?

Pourquoi ne pouvons-nous pas simplement enregistrer tous nos tests dans Selenium IDE, les exporter vers Java/WebDriver et les exécuter dans WebDriver avec Eclipse?

J'ai besoin d'une explication claire car je suis très confus dans l'utilisation de WebDriver!

Et quelqu'un peut-il expliquer pourquoi les scripts enregistrés par IDE échouent dans WebDriver?

35
Sagar

Pourquoi ne pouvons-nous pas simplement enregistrer tous nos cas de test dans Selenium IDE, les exporter vers Java/WebDriver et les exécuter dans WebDriver avec Eclipse.

Vous pouvez le faites réellement avec Selenium IDE assez facilement. Enregistrez votre test case/suite de tests dans Selenium IDE, exportez-le au format "Java/JUnit 4/Webdriver" dans un fichier .Java. Cela générera un test JUnit que vous pourrez importer et exécuter à partir d’Eclipse (avec la version correcte de JUnit bien sûr).

Ce n'est pas fiable à 100% et vous devrez peut-être apporter des modifications/corrections manuelles, mais en général cela fonctionne plutôt bien. Commencez avec un seul petit test et travaillez à partir de là.

12
Marielle

Pourquoi ne pas simplement enregistrer dans IDE et lire l'enregistrement avec WebDriver ???

Le IDE ne sait pas quoi attendre

Supposons que Bob effectue des vérifications manuelles et enregistre son interaction avec Selenium IDE. Il effectue une opération qui met un certain temps à mettre à jour l'interface graphique puis, une fois l'opération terminée, il clique sur un bouton. Bob sait que la mise à jour de l'interface graphique est terminée, car une spinner qui était affichée au démarrage de l'opération est supprimée à la fin de l'opération. Comment IDE va-t-il capturer le fait que l'opération doit être terminée avant de cliquer sur le bouton? (Notez ici que ce n'est pas un cas où le bouton est désactivé tant que l'opération n'est pas terminée.) Ce n'est pas hypothétique: lorsque vous testez des tables dynamiques (comme celles gérées par DataTables), l'utilisateur peut modifier n'importe quoi temps.

Cela peut être l'une des raisons pour lesquelles une séquence de commandes créée avec IDE échouait avec WebDriver. Il ne sait tout simplement pas quoi attendre.

Il est possible d’ajouter manuellement des temps d’attente dans IDE, mais si vous procédez ainsi, vous ne vous contentez plus "d'enregistrer [tous] nos scénarios de test". Et ce que vous faites devient plus comme écrire du code pour WebDriver.

Les utilisateurs sont inefficaces

Il n'y a pas si longtemps, il y avait une question sur Selenium dans laquelle l'utilisateur souhaitait que Selenium clique sur le dernier enregistrement d'une table comportant plusieurs pages d'enregistrements. La question était donc: comment puis-je parcourir le tableau, de la fin à la dernière page, puis cliquer sur le dernier enregistrement? Quelqu'un (peut-être moi, peut-être quelqu'un d'autre) a fait remarquer que si le tableau est triable, il pourrait être trié dans l'ordre inverse, puis le code Sélénium pourrait cliquer sur le premier enregistrement. C’est deux opérations plutôt que des opérations p+1: cliquer sur p fois, où p est le nombre de pages, plus une fois pour le clic sur l’enregistrement.

Lorsque nous écrivons du code pour WebDriver, nous avons la possibilité d'écrire les tests pour éviter de prendre la route panoramique pour obtenir les résultats souhaités. Voir le point suivant pour les détails techniques expliquant pourquoi c'est important.

Les opérations de sélénium peuvent être coûteuses

Si le logiciel qui exécute vos commandes Selenium est local et que votre navigateur est local, vous ne sentirez peut-être pas que les opérations de Selenium peuvent être coûteuses, mais si vous exécutez vos commandes sur un ordinateur et que le navigateur est distant, vous remarquerez un ralentissement important. Par exemple, si vous créez votre navigateur dans un Sauce Labs VM ou un BrowserStack VM pour exécuter une suite de tests, les retards réseau vont allonger considérablement le temps nécessaire à son exécution. Pour une suite complète de tests d'application, cela peut signifier plusieurs minutes de plus.

Le IDE génère une séquence de commandes nécessitant chacune un aller-retour entre le script Selenium et le navigateur. Chaque aller-retour s'additionne. Supposons que je veuille vérifier que deux éléments contiennent le même texte. Je ne vais pas utiliser Selenese car je n'utilise généralement pas le IDE, mais en utilisant le code WebDriver en Python, le script pourrait être le suivant:

a = driver.find_element_by_id("a")
b = driver.find_element_by_id("b")
assert_equal(a.text, b.text)

Ce code nécessite 4 allers-retours: un aller-retour par find_element... et un par accès au champ text. Le même test pourrait être écrit:

a_text, b_text = driver.execute_script("""
var a = document.getElementById("a");
var b = document.getElementById("b");
return [a.textcontent, b.textContent];
""");
assert_equal(a_text, b_text);

Cela ne nécessite qu'un aller-retour. Lorsque vous utilisez le IDE pour enregistrer des actions, la séquence de commandes est semblable au fragment précédent: beaucoup d'allers-retours. Lorsque vous écrivez votre code pour WebDriver, vous avez la possibilité d’optimiser à mesure que vous codez.

Cela ne signifie pas que le Selenium IDE ne soit d'aucune utilité, mais je ne penserais jamais à simplement enregistrer des tests avec cet outil, puis à lire ces enregistrements avec WebDriver.

9
Louis

Si vous êtes un débutant , vous pouvez réellement utiliser 80% de votre script IDE en tant que script Java pour webdriver, il vous suffit d'improviser légèrement votre script IDE exporté. fonctionnera bien.

Mais lorsque vous commencez à tester des fonctionnalités complexes, vous devez apprendre quelques-unes des méthodes Java de base pour le résoudre! 

3
user2959294

webdriver vous permet d'exécuter vos scénarios de test capturés avec Selenium IDE sur un serveur Selenium ou via la RC vers plusieurs serveurs. Cela inclut des options d'intégration avec les fournisseurs activés par Selenium (voir lien en bas).

Par exemple, si vous avez capturé votre scénario de test dans IDE, vous pouvez facilement l'intégrer à votre propre serveur Selenium ou à un fournisseur comme Saucelabs pour gérer l'exécution de vos scénarios de test dans Firefox sous Ubuntu, Safari sous OSX et IE10 sous Windows 8. Comme pour tout scénario de test, vous pouvez le lancer depuis votre IDE (Eclipse/IDEA/etc) votre constructeur (maven/gradle /) et/ou via votre système de CI.

Consultez https://saucelabs.com/Selenium pour quelques exemples. Nous avons également utilisé nos scénarios de test Selenium pour les tests de charge avec Soasta - WebDriver permet d’utiliser des tests IDE simples dans de nombreux contextes différents.

1
Brett

Je ne suis pas d'accord. Je ne vois aucune raison de devoir conserver du code supplémentaire lorsqu'un enregistrement et une lecture simples peuvent produire les mêmes résultats en une fraction du temps. 

Je suis d'accord avec l'implication du script enregistré doit être agile. Cela ne peut pas être simplement aussi simple que les commandes de construction et il faut le rendre agile et même mettre en œuvre leurs propres macros (également appelées commandes/alias) spécifiques à l'application testée.

Néanmoins, si implémenté correctement et avec l’aide de quelques plugins Selenium IDE comme le contrôle de flux, il devient très facile de maintenir de telles combinaisons de test complexes et de les lire à l’aide du HTML Runner. J'ai utilisé les scripts Selenium IDE HTML pour couvrir intégralement des sites complexes et réutilisé le même script pour tous les modes réactifs de l'application. 

La maintenance est simple car IDE vous aidera à régler rapidement une cmd en échec et que les attentes AJAX peuvent facilement être correctement comptabilisées en attendant que le contenu du DOM soit modifié sur la page. Je ne suis toujours pas convaincu de cette excuse AJAX pour avoir écarté Selenium IDE. 

Pour une intégration Maven des commandes de contrôle de flux/alias/macros utilisées par Selenium IDE et le plug-in de test SureFire de Maven, voir: https://github.com/paulbors/sideflow

N'hésitez pas à l'utiliser dans votre produit et à l'améliorer au besoin. 

1
Paul Bors

Parce que lorsque la complexité de votre code augmentera, il vous sera difficile de le gérer avec IDE. La maintenance de vos scripts sera difficile avec IDE.

De plus, l'exportation de scénarios de test de IDE vers Webdriver n'est pas fiable à 100%.

1
Ankit

D'autres personnes ont dit beaucoup de réponses utiles. Une chose qui manque, c'est que si vous écrivez du code au lieu d'utiliser IDE], vous avez le pouvoir d'apporter des modifications à la base de données. Cela dépend du site Web que vous testez et de son utilité, mais voici quelques exemples utiles que j'ai expérimentés. Dans un cas, le site Web comportait plusieurs sections d'une classe. L'un de nos tests consistait à fusionner ces sections en une seule. Le IDE ne pouvait pas faire cela. Mais avec Webdriver, nous pouvons ajouter toutes nos données de test à la base de données, effectuer la fusion, puis supprimer les données de la base de données. 

Selenium Grid est un autre avantage de WebDriver. Avec Grid, vous pouvez exécuter vos tests en parallèle et sur plusieurs navigateurs. Cela accélère vos tests et vous permet de tester le code de manière plus approfondie. 

0
Alex Cook