Selenium 2.53 non funziona su Firefox 47


107

Ricevo un errore durante l'utilizzo di Firefox con WebDriver.

org.openqa.selenium.firefox.NotConnectedException: Unable to connect
to host 127.0.0.1 on port 7055 after 45000 ms.
  • Versione Firefox: 47.0.0
  • Selenio: 2.53.0
  • Windows 10 64 bit

Qualcuno sta riscontrando un problema simile o ha idea di quale sia la soluzione per questo? Funziona bene con Chrome ma con Firefox nessuno degli URL viene caricato.


1
Sì anch'io ricevo lo stesso errore. Lo sto disinstallando e reinstallando di nuovo. Se il tuo browser è aperto, ripristinalo e prova.
Kishan Patel

Ciao Kishan, ho provato come hai detto ma ho sempre lo stesso errore ... quindi ho effettuato il downgrade a 46.0.1
veena k

Si. si è verificato un problema con lo show stopper da mozilla. hanno aggiornato la versione. Puoi di nuovo tornare a 47. :-)
Kishan Patel


1
Questo problema si manifesta su OSX con un errore, "" Firefox.bin "non può essere aperto perché non è possibile confermare l'identità dello sviluppatore:". Il downgrade a 46 lo ha risolto.
hoosteeno

Risposte:


93

Purtroppo Selenium WebDriver 2.53.0 non è compatibile con Firefox 47.0. Il componente WebDriver che gestisce i browser Firefox ( FirefoxDriver) verrà interrotto. A partire dalla versione 3.0, Selenium WebDriver avrà bisogno del geckodriverbinario per gestire i browser Firefox. Maggiori informazioni qui e qui .

Pertanto, per utilizzare Firefox 47.0 come browser con Selenium WebDriver 2.53.0, è necessario scaricare il driver Firefox (che è un file binario chiamato a geckodriverpartire dalla versione 0.8.0, e precedentemente wires) ed esportare il suo percorso assoluto alla variabile webdriver.gecko.drivercome una proprietà di sistema nel codice Java:

System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");

Fortunatamente, la libreria WebDriverManager può fare questo lavoro per te, cioè scaricare il binario Marionette appropriato per la tua macchina (Linux, Mac o Windows) ed esportare il valore della proprietà di sistema appropriata. Per utilizzare questa libreria, devi includere questa dipendenza nel tuo progetto:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>4.1.0</version>
</dependency>

... e quindi eseguire questa riga nel programma prima di utilizzare WebDriver:

WebDriverManager.firefoxdriver().setup();

Un esempio di esecuzione completo di un test case JUnit 4 utilizzando WebDriver potrebbe essere il seguente:

public class FirefoxTest {

    protected WebDriver driver;

    @BeforeClass
    public static void setupClass() {
        WebDriverManager.firefoxdriver().setup();
    }

    @Before
    public void setupTest() {
        driver = new FirefoxDriver();
    }

    @After
    public void teardown() {
        if (driver != null) {
            driver.quit();
        }
    }

    @Test
    public void test() {
        // Your test code here
    }
}

Tieni presente che Marionette sarà l'unica opzione per il futuro (per WebDriver 3+ e Firefox 48+), ma attualmente (versione 0.9.0 al momento della scrittura) non è molto stabile. Dai un'occhiata alla roadmap di Marionette per ulteriori dettagli.

AGGIORNARE

Selenium WebDriver 2.53.1 è stato rilasciato il 30 giugno 2016. FirefoxDriverfunziona di nuovo con Firefox 47.0.1 come browser.


9
Questo non è corretto. MarionetteDriver in realtà NON è supportato in 47, nonostante il fatto che FirefoxDriver sia rotto. Apparentemente verrà rilasciato (a volte) 47.0.1 in cui FirefoxDriver funzionerà di nuovo. MarionetteDriver funzionante non è riuscito a diventare 47 come previsto. Vedi github.com/mozilla/geckodriver/issues/89 e bugzilla.mozilla.org/show_bug.cgi?id=1279950 - Nota: non sto dicendo che MarionettDriver non funzionerà affatto, solo che è rotto per una tonnellata di casi d'uso con 47. Il downgrade è l'unica opzione a partire da oggi.
dmansfield

7
Ho aggiornato a 47.0.1 e Selenium non si connette ancora a Firefox. Firefox non si arresta più in modo anomalo, ma continuo a non riuscire a connettersi a 127.0.0.1:7055. Quando eseguo TcpView, non è presente alcun listener della porta 7055 dopo l'avvio di Firefox.
BardMorgan

2
Vedo lo stesso comportamento di BardMorgan, utilizzando Mac, Mono e Selenium .NET 2.53.0. Firefox 47.0.1 si avvia, ma ottengo l'errore di timeout OpenQA.Selenium.WebDriverException: Impossibile avviare il socket entro 45000 millisecondi. Tentativo di connessione ai seguenti indirizzi: 127.0.0.1:7055 - netstat non mostra alcun listener su quella porta.
Otto G

1
E ora ho anche testato con Windows 10 e .NET nativo, e il problema è lo stesso. Netstat mostra che Selenium cerca di connettersi, ma nessun servizio è in ascolto:C:\Windows\system32>netstat -ano | find "7055" TCP 127.0.0.1:2896 127.0.0.1:7055 SYN_SENT 2052
Otto G,

1
Per la cronaca, quando si visita about: addons in Firefox 47.0.1 lanciato da Selenium 2.53.0, la scheda Extensions mostrerà "Firefox WebDriver is incompatible with Firefox 47.0.1." Ciò è dovuto al fatto che la versione massima è 47.0 in github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/javascript/… - la versione principale è stata corretta, quindi una build dell'ultimo codice Selenium da GitHub dovrebbe risolvere il problema.
Otto G

18

Prova a utilizzare Firefox 46.0.1. Si abbina al meglio con Selenium 2.53

https://ftp.mozilla.org/pub/firefox/releases/46.0.1/win64/en-US/

Grazie Rahman .. ora funziona ... ma cosa succede se il requisito è lavorare con l'ultima versione.
veena k

Se la soluzione funziona, puoi accettare la risposta? :-)
Mahbub Rahman,

8
questa non è una soluzione, è il downgrade a una versione precedente.
TiGreX

1
Anch'io l'ho fatto (ma sono passato alla v45): se segui questo percorso, assicurati di rinominare <percorso> \ Mozilla Firefox \ updater.exe in updater.exe.disable per evitare che la versione sottoposta a downgrade venga aggiornata alla versione corrente automaticamente. Potrebbero esserci anche altri modi per ottenere questo risultato, ma disabilitare gli aggiornamenti nelle impostazioni delle opzioni non ha funzionato per me.
Drew

10

Ho avuto lo stesso problema e ho scoperto che è necessario cambiare driver perché il supporto è stato abbandonato . Invece di utilizzare Firefox Driver , è necessario utilizzare Marionette Driver per eseguire i test. Attualmente sto lavorando personalmente alla configurazione e posso pubblicare alcuni passaggi suggeriti se lo desideri quando ho un esempio funzionante.

Ecco i passaggi che ho seguito per farlo funzionare sul mio ambiente Java su Mac (ha funzionato per me anche nelle mie installazioni Linux (Fedora, CentOS e Ubuntu)):

  1. Scarica l'eseguibile notturno dalla pagina delle versioni
  2. Disimballare l'archivio
  3. Crea una directory per Marionette (cioè mkdir -p /opt/marionette)
  4. Sposta il file eseguibile decompresso nella directory che hai creato
  5. Aggiorna il tuo $PATHper includere l'eseguibile (anche, modifica il tuo .bash_profilese vuoi)
  6. : bangbang: assicurati chmod +x /opt/marionette/wires-x.x.xche sia eseguibile
  7. Nel tuo lancio, assicurati di utilizzare il seguente codice di seguito (è quello che ho usato su Mac)

Nota rapida

Ancora non funziona come previsto, ma almeno ora il browser viene avviato. Ho bisogno di capire perché - in questo momento sembra che abbia bisogno di riscrivere i miei test per farlo funzionare.

Snippet Java

WebDriver browser = new MarionetteDriver();
System.setProperty("webdriver.gecko.driver", "/opt/marionette/wires-0.7.1-OSX");

6

Se sei su OSX utilizzando Homebrew, puoi installare le vecchie versioni di Firefox tramite brew cask:

brew tap goldcaddy77/firefox
brew cask install firefox-46 # or whatever version you want

Dopo l'installazione, dovrai solo rinominare il tuo eseguibile FF nella directory Applicazioni in "Firefox".

Maggiori informazioni possono essere trovate nel repository git homebrew-firefox . Puntelli a smclernon per creare la botte originale .



3

Nel caso qualcuno si chieda come usare Marionette in C #.

FirefoxProfile profile = new FirefoxProfile(); // Your custom profile
var service = FirefoxDriverService.CreateDefaultService("DirectoryContainingTheDriver", "geckodriver.exe");
// Set the binary path if you want to launch the release version of Firefox.
service.FirefoxBinaryPath = @"C:\Program Files\Mozilla Firefox\firefox.exe";
var option = new FirefoxProfileOptions(profile) { IsMarionette = true };
var driver = new FirefoxDriver(
    service,
    option,
    TimeSpan.FromSeconds(30));

Ignorare FirefoxOptions per fornire la funzione per aggiungere ulteriori funzionalità e impostare il profilo di Firefox perché selenium v53 non fornisce ancora quella funzione.

public class FirefoxProfileOptions : FirefoxOptions
{
    private DesiredCapabilities _capabilities;

    public FirefoxProfileOptions()
        : base()
    {
        _capabilities = DesiredCapabilities.Firefox();
        _capabilities.SetCapability("marionette", this.IsMarionette);
    }

    public FirefoxProfileOptions(FirefoxProfile profile)
        : this()
    {
        _capabilities.SetCapability(FirefoxDriver.ProfileCapabilityName, profile.ToBase64String());
    }

    public override void AddAdditionalCapability(string capabilityName, object capabilityValue)
    {
        _capabilities.SetCapability(capabilityName, capabilityValue);
    }

    public override ICapabilities ToCapabilities()
    {
        return _capabilities;
    }
}

Nota: l'avvio con il profilo non funziona con FF 47, funziona con FF 50 Nightly.

Tuttavia, abbiamo provato a convertire il nostro test per utilizzare Marionette, e al momento non è fattibile perché l'implementazione del driver non è completata o presenta dei bug. Suggerirei alle persone di eseguire il downgrade del proprio Firefox in questo momento.


2

Le nuove librerie Selenium sono ora disponibili, secondo: https://github.com/SeleniumHQ/selenium/issues/2110

La pagina di download http://www.seleniumhq.org/download/ sembra non essere ancora aggiornata, ma aggiungendo 1 alla versione minore nel link, potrei scaricare la versione C #: http: // selenium-release. storage.googleapis.com/2.53/selenium-dotnet-2.53.1.zip

Per me funziona con Firefox 47.0.1.

Come nota a margine , sono stato in grado di creare solo l' estensione webdriver.xpi per Firefox dal ramo principale in GitHub, eseguendo ./go //javascript/firefox-driver:webdriver:run- che ha fornito un messaggio di errore ma ha creato il file build / javascript / firefox-driver / webdriver.xpi , che ho potrebbe rinominare (per evitare un conflitto di nomi) e caricarsi correttamente con il metodo FirefoxProfile.AddExtension. Questa è stata una soluzione ragionevole senza dover ricostruire l'intera libreria Selenium.


Posso confermare che l'aggiornamento del selenio a 2.53.1 ha risolto il problema per me.
Disper

Questa è ora la risposta migliore.
Holistic Developer

2

È un numero di FF47 https://github.com/SeleniumHQ/selenium/issues/2110

Effettua il downgrade a FF 46 o inferiore (o prova lo sviluppatore FF48 https://developer.mozilla.org/en-US/Firefox/Releases/48 )

Istruzioni su come eseguire il downgrade: https://www.liberiangeek.net/2012/04/how-to-install-previous-versions-of-firefox-in-ubuntu-12-04-precise-pangolin/ O se lo sei su Mac, come suggerito da qualcun altro in questo thread, usa brew.


Secondo un commento di 19 ore fa: “ Firefox 47.0.1 è stato rilasciato con una correzione. Ora dobbiamo rilasciare le librerie client per rilevare un aumento della versione nell'XPI utilizzato da FirefoxDriver ". Questo sembra spiegare perché ci sono ancora problemi con 2.53.0 e 47.0.1.
Otto G

2

Firefox 47.0 ha smesso di funzionare con Webdriver.

La soluzione più semplice è passare a Firefox 47.0.1 e Webdriver 2.53.1. Questa combinazione funziona di nuovo. In effetti, il ripristino della compatibilità con Webdriver è stato il motivo principale alla base del rilascio 47.0.1, secondo https://www.mozilla.org/en-US/firefox/47.0.1/releasenotes/ .


Ora Firefox 47.0.1 funziona bene anche con Webdriver 2.53.0. Ho testato questa combinazione.
veena k

2

Puoi provare a usare questo codice,

private WebDriver driver;
System.setProperty("webdriver.firefox.marionette","Your path to driver/geckodriver.exe");        
driver = new FirefoxDriver();

Ho aggiornato a selenio 3.0.0 e la versione di Firefox è 49.0.1

Puoi scaricare geckodriver.exe da https://github.com/mozilla/geckodriver/releases

Assicurati di scaricare solo il file zip, il file geckodriver-v0.11.1-win64.zip o win32 uno secondo il tuo sistema ed estrailo in una cartella.

Metti il ​​percorso di quella cartella tra le virgolette "Il tuo percorso al driver". Non dimenticare di inserire geckodriver.exe nel percorso.


1

Alla fine ho installato una vecchia versione aggiuntiva di Firefox (utilizzata solo per i test) per risolvere questo problema, oltre alla mia ultima installazione regolare (sicura e aggiornata) di Firefox.

Ciò richiede che il webdriver sappia dove può trovare il file binario di Firefox, che può essere impostato tramite la webdriver.firefox.binproprietà.

Quello che ha funzionato per me (mac, maven, /tmp/ff46come cartella di installazione) è:

mvn -Dwebdriver.firefox.bin=/tmp/ff46/Firefox.app/Contents/MacOS/firefox-bin verify

Per installare una vecchia versione di Firefox in una cartella dedicata, crea la cartella, apri Finder in quella cartella, scarica il dmg di Firefox e trascinalo in quel Finder.



1

A partire da settembre 2016

Firefox 48.0e selenium==2.53.6funziona bene senza errori

Per aggiornare solo Firefox suUbuntu 14.04

sudo apt-get update
sudo apt-get upgrade firefox

1

Mi sembra che la soluzione migliore sia aggiornare a Selenium 3.0.0, scaricare geckodriver.exe e utilizzare Firefox 47 o superiore.

Ho cambiato l'inizializzazione di Firefox in:

 string geckoPathTest = Path.Combine(Environment.CurrentDirectory, "TestFiles\\geckodriver.exe");
 string geckoPath = Path.Combine(Environment.CurrentDirectory, "geckodriver.exe");
 File.Copy(geckoPathTest, geckoPath);
 Environment.SetEnvironmentVariable("webdriver.gecko.driver", geckoPath);
 _firefoxDriver = new FirefoxDriver();

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.