2008-09-19 10 views
16

Je voulais juste quelques opinions de gens qui ont lancé Selenium (http://selenium.openqa.org) J'ai eu beaucoup d'expérience avec WaTiN et j'ai même écrit une suite d'enregistrement pour cela. Je l'ai fait produire un code bien structuré, mais n'étant entretenu que par moi, il semble que ma compagnie l'ait abandonné. Si vous avez fait du sélénium, avez-vous eu beaucoup de succès? J'utiliserai .NET 3.5, Selenium fonctionne-t-il bien avec? Le code est-il propre ou simplement une liste de toutes les interactions? (http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx) Dans quelle mesure la suite de tests répartis est-elle équitable?Selenium Critique

Toutes les autres plaintes ou compliments sur le système seraient grandement appréciés!

Répondre

26

Si vous utilisez Selenium IDE pour générer du code, vous obtenez simplement une liste de toutes les actions que le sélénium va exécuter. Pour moi, Selenium IDE est un bon moyen de commencer ou de faire un test rapide "essayer et voir". Mais, quand vous pensez à la maintenabilité et à un code plus lisible, vous devez écrire votre propre code.

Une bonne façon d'obtenir un bon code sélénium est d'utiliser le code Page Object Pattern de sorte que le code représente votre flux de navigation. Voici un bon exemple que je vois dans Coding Dojo Floripa (Brésil):

public class GoogleTest { 

    private Selenium selenium; 

    @Before 
    public void setUp() throws Exception { 
      selenium = new DefaultSelenium("localhost", 4444, "*firefox", 
          "http://www.google.com/webhp?hl=en"); 
      selenium.start(); 
    } 

    @Test 
    public void codingDojoShouldBeInFirstPageOfResults() { 
      GoogleHomePage home = new GoogleHomePage(selenium); 
      GoogleSearchResults searchResults = home.searchFor("coding dojo"); 
      String firstEntry = searchResults.getResult(0); 
      assertEquals("Coding Dojo Wiki: FrontPage", firstEntry); 
    } 

    @After 
    public void tearDown() throws Exception { 
      selenium.stop(); 
    } 

} 


public class GoogleHomePage { 

    private final Selenium selenium; 

    public GoogleHomePage(Selenium selenium) { 
      this.selenium = selenium; 
      this.selenium.open("http://www.google.com/webhp?hl=en"); 
      if (!"Google".equals(selenium.getTitle())) { 
        throw new IllegalStateException("Not the Google Home Page"); 
      } 
    } 

    public GoogleSearchResults searchFor(String string) { 
      selenium.type("q", string); 
      selenium.click("btnG"); 
      selenium.waitForPageToLoad("5000"); 
      return new GoogleSearchResults(string, selenium); 
    } 
} 

public class GoogleSearchResults { 

    private final Selenium selenium; 

    public GoogleSearchResults(String string, Selenium selenium) { 
      this.selenium = selenium; 
      if (!(string + " - Google Search").equals(selenium.getTitle())) { 
        throw new IllegalStateException(
            "This is not the Google Results Page"); 
      } 
    } 

    public String getResult(int i) { 
      String nameXPath = "xpath=id('res')/div[1]/div[" + (i + 1) + "]/h2/a"; 
      return selenium.getText(nameXPath); 
    } 
} 

Hope qui aide

+0

Bonjour marcospereira, je suis nouveau dans le sélénium. J'ai essayé cet exemple mais quand je commence je reçois "Impossible de connecter le problème de serveur". Je ne comprends pas où je vais mal. Aidez-moi, s'il vous plaît. Merci –

7

J'utilise Sélénium Remote Control afin de tester des applications ASP.Net (qui est ce que je Je suppose que vous allez cibler aussi bien), et cela fonctionne très bien.

Si vous n'avez jamais utilisé Selenium, regardez certains des screencasts pour utiliser Selenium IDE. Cela vous donnera une bonne idée du fonctionnement de 'Selenium'. L'IDE est un plugin firefox qui vous permet de développer des tests rapides d'enregistrement et de lecture au fur et à mesure. Pour les suites de test plus volumineuses ou pour écrire des tests réellement maintenables, je recommande Selenium Remote Control. (L'EDI est formidable si vous commencez tout de suite.)

Vous pouvez utiliser votre langue préférée et votre environnement de test unitaire pour piloter un navigateur Web afin d'exécuter vos tests. Si vous êtes plus à l'aise avec C#/NUnit, vous pouvez écrire vos tests de cette façon et utiliser tous les goodies NUnit que vous aimez. (Par exemple, le plugin Test-Driven.net). De plus, puisque vos tests sont écrits dans un langage de haut niveau, vous pouvez faire des choses comme hériter d'une classe de test particulière que vous pouvez utiliser pour rendre votre code de méthode de test bien plus propre. (Ou du moins c'est la façon dont j'écris mes tests, cela me permet de tester des scénarios complexes qui maintiennent le nombre de lignes de mon test à un nombre raisonnable.)

Vous mentionnez les tests distribués. Malheureusement, je n'ai pas trouvé le moyen d'utiliser le projet Selenium Grid avec NUnit. Selenium Grid vous permet d'exécuter votre suite de tests sur plusieurs machines et instances de navigateur. Ainsi, plutôt que de parcourir 200 méthodes de test les unes après les autres (en série), vous pouvez répartir la charge sur quatre instances de la grille (c'est-à-dire en exécutant quatre instances de navigateurs différentes à la fois) sur une seule ou plusieurs machines. sur la répartition que vous voulez obtenir.

Si vous écrivez vos tests en Java ou en PHP, vous aurez peut-être plus de chance. Je m'attends à ce que ce soit disponible via NUnit avec la sortie de NUnit2.5 qui inclura pNUnit pour les tests en parallèle.

Si vous avez d'autres questions sur le sélénium, clarifiez simplement votre question initiale et je serai ravi de vous aider. (Le sélénium est juste un de ces outils que j'utilise tous les jours donc j'apprécie d'aider de nouvelles personnes à le faire.)

3

J'ai commencé avec Selenium IDE et Selenium Core.Ce sont certainement de bons outils pour vous aider à démarrer. Mais ils ne sont pas très puissants, puisque vous ne pouvez utiliser que Selenese, le langage de commande par commande basé sur HTML de Selenium. Maintenant, j'utilise Selenium Remote Control avec le pilote Ruby, ce qui me permet d'utiliser ce que propose Ruby. Je teste de nombreux environnements: Windows 2000, XP, Vista, Mac 10.4/10.5, et pour chacun de ceux qui s'appliquent, Safari 2/3, Firefox 2/3, Internet Explorer 6/7. Selenium prétend être compatible avec tous ces OS et navigateurs, même si j'ai actuellement des problèmes avec Internet Explorer (ma première question sur StackOverflow est à ce sujet, en fait). Mais je ne connais pas d'autres outils aussi puissants et qui fonctionnent avec autant de plateformes.

Le plus gros problème que j'ai eu avec Selenium est l'analyse DOM. Les nœuds childNodes de JavaScript ne sont pas fiables car Safari/Firefox ignore les espaces de commentaire &, contrairement à Internet Explorer. XPath dans Internet Explorer est 10-20 fois plus lent que dans SF/FF. innerHTML n'est pas toujours fiable dans IE.

1

Selenium est un outil assez décent, mais il y a des choses à surveiller quelques:

  • IDE Sélénium et le noyau Selenium ne partagent pas 100% même fonctionnalité. Par exemple, un clic droit est supporté par IDE mais la version de base actuelle ne l'a pas. Cependant, l'utilisation d'une version plus récente de leur référentiel résout cela.

  • Dans le cas d'ext js, gwt etc., assurez-vous d'avoir les ID appropriés pour vos éléments d'affichage au lieu des ID générés automatiquement (aléatoires).

  • Gestion des cas de test. J'ai vu des cas où beaucoup d'efforts ont été mis sur les tests de sélénium et une bonne couverture. Plus tard, les tests ont commencé à échouer car la personne qui les créait était occupée à d'autres tâches et personne d'autre ne voulait les toucher. Mais c'était un problème avec la direction, pas Selenium.

1

Je suis un grand fan de Selenium. Cependant, il est bon de savoir à l'avance que Selenium IDE a beaucoup de problèmes avec les fenêtres pop-up. Ces problèmes ne persistent pas dans Selenium RC, mais cela peut rendre le développement un peu difficile.