2012-09-24 4 views
10

Hintergrund auszuführen:
Ich bin mit Selen-Server-2.25.0 in Verbindung mit J-Unit 4 laufen durch eine Handvoll UI-Testszenarien für meine GWT-App. In meiner IDE (Netbeans 7.2) kann ich mit der rechten Maustaste auf mein Projekt klicken, "Test" wählen und sehen, wie Firefox-Fenster mit den Selenium-Tests wie erwartet geöffnet werden. Über die Befehlszeile kann ich auch mvn integration-test ausführen und dasselbe sehen.Wie man richtig die Selenium Maven Plugin konfigurieren mit Xvfb zu arbeiten ohne Kopf

Ziel:
Ich versuche, diese Tests zu bekommen ohne Kopf in einem Xvfb Anzeige laufen, aber ich scheinen Schwierigkeiten zu haben dies immer mit Maven zu arbeiten. Ich kann export display=:2 manuell ausführen (: 2 ist meine Xvfb-Anzeige) zuvor, und dann die Tests werden dann erfolgreich in der unsichtbaren Anzeige ausgeführt.

Ausgabe:
Nichts scheint bei allen zu ändern, wenn ich den vollen <plugin> Eintrag von here in meinem pom.xml umfassen und mvn integration-test laufe. Ich sehe immer noch, dass Windows überall auftaucht und die Tests laufen nicht in der Xvfb-Anzeige. Wenn ich es raushole und wieder laufe, gleiche Ergebnisse. Wenn ich die Phase von pre-integration-test zu qwertyasdf jedoch ändere, meckert Maven über eine ungültige Lebenszyklusphase - so weiß ich, dass es es nicht vollständig ignoriert, und ich bearbeite die passende pom.xml.

Danke!

Antwort

8

Es stellt sich heraus, dass die Ziele 'Start-Server' und 'Stop-Server' zum Starten/Stoppen von SeleniumRC-Servern dienen. Das ist NICHT was ich wollte, da alle meine Tests stattdessen die WebDriver API verwenden.

Offensichtlich startet das "xvfb" -Ziel im POM eine Xvfb-Sitzung während der angegebenen Lebenszyklusphase - ich glaube, ich habe es vorher nicht gesehen. Und in seiner Konfiguration geben Sie an, wo eine Props-Datei geschrieben werden soll, in der genau beschrieben wird, auf welchem ​​Display Xvfb läuft. Im Java-Code kann diese Datei gelesen und der Wert an die bei der Erstellung des WebDrivers verwendete FirefoxBinary übergeben werden.

Die relevanten pom.xml Bits sind wie folgt:

<properties> 
    <displayProps>target/selenium/display.properties</displayProps> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <systemPropertyVariables> 
        <display.props>${displayProps}</display.props> 
       </systemPropertyVariables> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>selenium-maven-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
       <execution> 
        <id>xvfb</id> 
        <phase>test-compile</phase> 
        <goals> 
         <goal>xvfb</goal> 
        </goals> 
        <configuration> 
         <displayPropertiesFile>${displayProps}</displayPropertiesFile> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Das beginnt Xvfb auf dem ersten freien Display (: 20 oder höher) und schreibt den Wert auf die Requisiten-Datei, die ich gelesen und später verwenden in mein Java-Code.

String xvfbPropsFile = System.getProperty("display.props"); 

FirefoxBinary ffox = new FirefoxBinary(); 
ffox.setEnvironmentProperty("DISPLAY", /*read value from xvfbPropsFile*/); 
WebDriver driver = new FirefoxDriver(ffox); 

Jetzt wird der Fahrer die Kontrolle über die Firefox-Instanz in der entsprechenden Anzeige gesteuert. Voila!

+0

Ich kann nicht diese laufen, habe ich noch ein „keine Anzeige“ Fehler bekommen :( –

+0

ausgezeichnet, dank es mein Tag gerettet. –

+1

mir bitte zeigen, den Inhalt der Datei 'Soll/Selen/display.properties' –

Verwandte Themen