2012-02-13 15 views
8

Sto usando Ubuntu 11.04 e selenio 2.9.0 Ecco come è configurato nel mio pom root:Come posso configurare il selenio web per utilizzare l'installazione personalizzata di firefox per i test?

<dependency> 
    <groupId>org.seleniumhq.selenium</groupId> 
    <artifactId>selenium-java</artifactId> 
    <version>2.9.0</version> 
    <scope>test</scope> 
</dependency> 

Quando attemting per eseguire un test, ottengo un'eccezione:

org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output: 
*** LOG addons.xpi: startup 
*** LOG addons.xpi: Ignoring file entry whose name is not a valid add-on ID: > /tmp/anonymous3804893394247066972webdriver-profile/extensions/webdriver-staging 
*** LOG addons.xpi: checkForChanges 
*** LOG addons.xpi: No changes found 

    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:95) 
    .... 

Come Per quanto ho cercato su Google, il problema è che il driver firefox utilizzato dal selenio è incompatibile con la versione del browser. Tenendo presente i frequenti aggiornamenti delle versioni di Firefox, sarà difficile mantenere il mio ambiente di test locale.

Pertanto, ho deciso di installare un firefox statico con l'ultima versione compatibile nota a me e utilizzare selenio con esso, preservando il mio default firefox (non lo devo rimuovere).

Quindi, non sono sicuro di come configurare la configurazione del selenio per farlo funzionare con il firefox statico. Probabilmente devo configurare la mia app per ricevere il percorso del binario firefox da utilizzare per il driver? Mi piacerebbe sapere se è necessario anche qualcos'altro.

** Modifica

Sto usando le proprietà di configurazione per inizializzare il corretto WebDriver:

public abstract class SeleniumTestBase { 

    ... 

    public final void setUp() throws Exception { 
     String driverClass = getConfigurationProperty("selenium.webDriverClass"); 
     driver = (WebDriver) Class.forName(driverClass).newInstance(); 
     ... 
     doSetUp(); 
    } 

    public void doSetUp() { 
    } 

    ... 
} 

La proprietà "selenium.webDriverClass" è gestibile dal pom.xml profili quindi diverse possono avere un valore diverso. Attualmente è il FQN della classe driver da istanziare.

risposta

15

Finché io so che il comando java

WebDriver driver = new FirefoxDriver(); 

verrà eseguito il browser Firefox installato sul computer.

ma leggendo il JavaDoc a http://selenium.googlecode.com/svn/trunk/docs/api/java/index.html ho capito che non ci può essere modo come ignorare che:

FirefoxBinary binary = new FirefoxBinary(new File("path/to/binary")); 
FirefoxProfile profile = new FirefoxProfile(); 
WebDriver driver = new FirefoxDriver(binary, profile); 
+0

c'è un modo per farlo utilizzando l'API RemoteWebDriver? Non ho menzionato, ma stiamo usando la primavera per istanziare il driver web e quindi difficilmente capita quanto sopra. Un altro modo è utilizzare i metodi factory e factory con molla per ogni driver e 2 properteis per il nome e il valore della proprietà del percorso binario, in modo che ogni specifico driver venga configurato in modo appropriato dalla fabbrica. Comunque, preferirei farlo con meno codice, se possibile. –

+0

RemoteWebDriver è piuttosto nuovo per me. Puoi modificare la domanda e mostrarmi come inizializzi RemoteWebDriver? Spero di poter trovare qualcosa. Ma sill comunque: FirefoxDriver è sottoclasse di RemoteWebDriver ... –

+0

Ho rivisitato la domanda - ora c'è il codice per la classe di test del selenio di base. Sto pianificando di rimuovere l'inizializzazione basata sulla relfection con qualche logica di localizzazione di servizio basata sul nome del browser, quindi le proprietà pom.xml saranno il nome del browser e il percorso binario se necessario. Il metodo factory controllerà se viene fornito il percorso binario e creerà e configurerà l'oggetto driver concreto in modo appropriato. –

Problemi correlati