2008-09-19 17 views
16

Ich wollte nur ein paar Meinungen von Menschen, die Selenium betrieben haben (http://selenium.openqa.org) Ich hatte viel Erfahrung mit WaTiN und schrieb sogar eine Aufnahme-Suite dafür. Ich hatte es einen gut strukturierten Code zu produzieren, aber nur von mir gepflegt wird, scheint es, dass meine Firma es fast aufgegeben hat. Wenn Sie Selen gelaufen sind, hatten Sie viel Erfolg? Ich werde .NET 3.5 verwenden, funktioniert Selenium gut? Ist der Code sauber oder einfach eine Liste aller Interaktionen? (http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx) Wie gut ist die verteilte Testsuite?Selenium Critique

Alle anderen Meckern oder Komplimente auf dem System würden sehr geschätzt werden!

Antwort

26

Wenn Sie Selenium IDE verwenden, um Code zu generieren, erhalten Sie nur eine Liste aller Aktionen, die Selen ausführen wird. Selenium IDE ist für mich eine gute Möglichkeit, um zu beginnen oder einen schnellen Test zu machen. Wenn Sie jedoch über Wartbarkeit und besser lesbaren Code nachdenken, müssen Sie Ihren eigenen Code schreiben.

Ein guter Weg, um guten Selen Code zu erreichen, ist die Page Object Pattern in einer Weise, dass der Code Ihren Navigationsfluss darstellt. Hier ist ein gutes Beispiel, das ich in Coding Dojo Floripa (aus Brasilien) sehen:

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); 
    } 
} 

Hoffe, das hilft

+0

Hallo marcospereira, ich bin neu in Selen. Ich habe dieses Beispiel versucht, aber wenn ich anfange, bekomme ich "Kann Serverproblem nicht verbinden". Ich verstehe nicht, wo ich falsch liege. Bitte hilf mir. Vielen Dank –

7

Ich verwende Selenium Remote Control, um ASP.Net-Anwendungen zu testen (das ist, was ich Ich nehme an, Sie werden auch zielen), und es funktioniert großartig.

Wenn Sie Selenium noch nie verwendet haben, sehen Sie sich einige der screencasts für die Verwendung von Selenium IDE an. Dies gibt Ihnen eine gute Vorstellung davon, wie "Selenium" funktioniert. Die IDE ist ein Firefox-Plugin, mit dem Sie im Prinzip schnelle Record-and-Play-Tests entwickeln können. Für größere Testsuites oder für wirklich wartbare Tests empfehle ich Selenium Remote Control. (Die IDE ist grandios, wenn Sie nur einen Anfang haben.)

Selenium Remote Control können Sie Ihre bevorzugten Sprache und Unit Testing Framework verwenden, um einen Webbrowser zu fahren, um Ihre Tests auszuführen. Wenn Sie sich am besten mit C#/NUnit auskennen, können Sie Ihre Tests auf diese Weise schreiben und alle NUnit-Extras verwenden, die Ihnen gefallen. (Zum Beispiel das Test-Driven.net Plugin). Da Ihre Tests in einer höheren Programmiersprache geschrieben sind, können Sie auch Dinge von einer bestimmten Testklasse erben, die Sie verwenden können, um Ihren tatsächlichen Testmethodencode sauberer zu machen. (Oder zumindest das ist die Art, wie ich meine Tests schreibe. Es lässt mich komplexe Szenarien testen, in denen meine Testmethode eine vernünftige Anzahl hält.)

Sie erwähnen Distributed Testing. Leider habe ich keine Möglichkeit gefunden, das Selenium Grid Projekt mit NUnit zu verwenden. Mit Selenium Grid können Sie Ihre Testsuite über mehrere verschiedene Maschinen und Browser-Instanzen hinweg ausführen. Anstatt also 200 Testmethoden nacheinander (dh seriell) zu durchlaufen, könnten Sie die Last über vier Grid-Instanzen (dh in vier verschiedenen Browser-Instanzen gleichzeitig) auf einer einzelnen Maschine oder mehreren Maschinen verteilen wie verteilt du bekommen willst.

Wenn Sie Ihre Tests in Java oder PHP schreiben, haben Sie vielleicht mehr Glück. Ich erwarte, dass dies über NUnit mit der Veröffentlichung von NUnit2.5 verfügbar sein wird, die pNUnit für parallele Tests enthalten wird.

Wenn Sie weitere Fragen zu Selen haben, klären Sie einfach Ihre ursprüngliche Frage und ich werde mich freuen, Ihnen zu helfen. (Selenium ist nur eines jener Werkzeuge, die ich jeden Tag benutze, also genieße ich es, neue Leute damit zu beginnen.)

3

Ich begann mit Selenium IDE und Selenium Core.Das sind definitiv gute Tools, um loszulegen. Aber sie sind nicht sehr leistungsfähig, da Sie Selenese, Seleniums HTML-basierte Befehl-für-Befehl-Sprache nur verwenden können.

Jetzt verwende ich Selenium Remote Control mit dem Ruby-Treiber, der es mir erlaubt, das zu nutzen, was Ruby bietet. Ich teste viele Umgebungen: Windows 2000, XP, Vista, Mac 10.4/10.5, und für jeden, der zutrifft, Safari 2/3, Firefox 2/3, Internet Explorer 6/7.

Selenium behauptet, mit all diesen Betriebssystemen und Browsern kompatibel zu sein, obwohl ich gerade Probleme mit Internet Explorer habe (meine erste Frage zu StackOverflow ist das eigentlich). Aber ich kenne keine anderen Werkzeuge, die so mächtig sind und mit so vielen Plattformen arbeiten.

Das größte Problem, das ich mit Selenium hatte, ist das DOM-Parsing. JavaScript's childNodes ist unzuverlässig, da Safari/Firefox Whitespace & Kommentarknoten ignoriert, während Internet Explorer dies nicht tut. XPath in Internet Explorer ist 10-20 Mal langsamer als in SF/FF. innerHTML ist im IE nicht immer zuverlässig.

1

Selen ist ziemlich anständig Werkzeug, aber es gibt einige Dinge zu achten:

  • Selenium IDE und Selen Kern nicht 100% gleiche Funktionalität teilen. Zum Beispiel wird das Klicken mit der rechten Maustaste von der IDE unterstützt, aber die aktuelle Kernversion hat es nicht. Die Verwendung einer neueren Version aus ihrem Repository löst dies jedoch.

  • Im Falle von ext js, gwt etc stellen Sie sicher, dass Sie richtige IDs für Ihre Anzeigeelemente anstelle von automatisch generierten (zufälligen) haben.

  • Testfälle warten. Ich habe Fälle gesehen, in denen Selenium-Tests und eine gute Abdeckung sehr viel Mühe gekostet haben. Später begannen die Tests zu scheitern, da die Person, die sie erstellte, mit anderen Aufgaben beschäftigt war und niemand sie anfassen wollte. Aber das war ein Problem mit dem Management, nicht mit Selenium.

1

Ich bin ein großer Fan von Selenium. Eine wichtige Sache, die man im Voraus wissen sollte, ist, dass Selenium IDE mit Popup-Fenstern viel Ärger hat. Diese Probleme bestehen in Selenium RC nicht, aber es kann die Entwicklung ein wenig Kopfschmerzen machen.