Selenium 2.53 nie działa w przeglądarce Firefox 47


107

Otrzymuję błąd podczas używania przeglądarki Firefox z WebDriver.

org.openqa.selenium.firefox.NotConnectedException: Unable to connect
to host 127.0.0.1 on port 7055 after 45000 ms.
  • Wersja przeglądarki Firefox: 47.0.0
  • Selen: 2,53,0
  • Windows 10 w wersji 64-bitowej

Czy ktoś ma podobny problem lub jakiś pomysł, jakie jest na to rozwiązanie? Działa dobrze w przeglądarce Chrome, ale w przeglądarce Firefox żaden z adresów URL nie jest ładowany.


1
Tak, ja też otrzymuję ten sam błąd. Odinstalowuję go i ponownie instaluję. Jeśli Twoja przeglądarka jest otwarta, zresetuj ją i spróbuj.
Kishan Patel

Cześć Kishan, próbowałem, jak wspomniałeś, ale nadal ten sam błąd ... więc obniżyłem ocenę do 46.0.1
veena k

Tak. Mozilla wystąpił problem z zatrzymaniem programu. zaktualizowali wersję. Możesz ponownie cofnąć się do 47. :-)
Kishan Patel


1
Ten problem objawia się w systemie OSX z błędem „Nie można otworzyć pliku„ Firefox.bin ”, ponieważ nie można potwierdzić tożsamości programisty:”. Obniżenie poziomu do 46 rozwiązało problem.
hoosteeno

Odpowiedzi:


93

Niestety Selenium WebDriver 2.53.0 nie jest kompatybilny z Firefoksem 47.0. Komponent WebDriver, który obsługuje przeglądarki Firefox ( FirefoxDriver), zostanie wycofany. Od wersji 3.0 Selenium WebDriver będzie potrzebował pliku geckodriverbinarnego do zarządzania przeglądarkami Firefox. Więcej informacji tutaj i tutaj .

Dlatego, aby używać Firefoksa 47.0 jako przeglądarki z Selenium WebDriver 2.53.0, musisz pobrać sterownik Firefoksa (który jest plikiem binarnym o nazwie geckodriverod wersji 0.8.0 i dawniej wires) i wyeksportować jego bezwzględną ścieżkę do zmiennej webdriver.gecko.driverjako właściwość systemowa w kodzie Java:

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

Na szczęście biblioteka WebDriverManager może wykonać tę pracę za Ciebie, tj. Pobrać odpowiedni plik binarny Marionette dla Twojej maszyny (Linux, Mac lub Windows) i wyeksportować wartość odpowiedniej właściwości systemu. Aby użyć tej biblioteki, musisz uwzględnić tę zależność w swoim projekcie:

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

... a następnie wykonaj tę linię w swoim programie przed użyciem WebDriver:

WebDriverManager.firefoxdriver().setup();

Kompletny działający przykład przypadku testowego JUnit 4 przy użyciu WebDriver mógłby wyglądać następująco:

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

Weź pod uwagę, że Marionette będzie jedyną opcją na przyszłość (dla WebDriver 3+ i Firefox 48+), ale obecnie (wersja 0.9.0 w momencie pisania) nie jest zbyt stabilna. Zapoznaj się z mapą drogową Marionette, aby uzyskać więcej informacji.

AKTUALIZACJA

Selenium WebDriver 2.53.1 został wydany 30 czerwca 2016 r. FirefoxDriverPonownie współpracuje z przeglądarką Firefox 47.0.1 .


9
To jest niepoprawne. MarionetteDriver w rzeczywistości NIE jest obsługiwany w 47, mimo że FirefoxDriver jest uszkodzony. Najwyraźniej zostanie wydana (kiedyś) wersja 47.0.1, w której FirefoxDriver znów będzie działał. Działająca MarionetteDriver nie dotarła do 47 zgodnie z oczekiwaniami. Zobacz github.com/mozilla/geckodriver/issues/89 i bugzilla.mozilla.org/show_bug.cgi?id=1279950 - Uwaga: nie mówię, że MarionettDriver w ogóle nie zadziała, tylko że jest zepsuty na TON przypadków użycia z 47. Downgrade jest obecnie jedyną opcją.
dmansfield

7
Zaktualizowałem do 47.0.1, a Selenium nadal nie łączy się z Firefoksem. Nie powoduje już awarii Firefoksa, ale nadal nie udaje mi się połączyć z adresem 127.0.0.1:7055. Kiedy uruchamiam TcpView, po uruchomieniu Firefoksa nie ma nasłuchiwania portu 7055.
BardMorgan

2
Widzę takie samo zachowanie jak BardMorgan, używając Mac, Mono i Selenium .NET 2.53.0. Firefox 47.0.1 uruchamia się, ale pojawia się błąd przekroczenia limitu czasu OpenQA.Selenium.WebDriverException: Nie udało się uruchomić gniazda w ciągu 45000 milisekund. Próbowano połączyć się z następującymi adresami: 127.0.0.1:7055 - netstat nie wyświetla nasłuchiwania na tym porcie.
Otto G

1
I teraz testowałem również pod Windows 10 i natywnym .NET, a problem jest taki sam. Netstat pokazuje, że Selenium próbuje się połączyć, ale żadna usługa nie nasłuchuje:C:\Windows\system32>netstat -ano | find "7055" TCP 127.0.0.1:2896 127.0.0.1:7055 SYN_SENT 2052
Otto G

1
Dla przypomnienia, podczas odwiedzania strony about: addons w przeglądarce Firefox 47.0.1 uruchomionej przez Selenium 2.53.0, na karcie Rozszerzenia pojawi się komunikat „Firefox WebDriver jest niezgodny z przeglądarką Firefox 47.0.1”. Wynika to z tego, że maksymalna wersja to 47.0 na github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/javascript/ ... - wersja główna została naprawiona, więc kompilacja najnowszego kodu Selenium z GitHub powinna rozwiązać problem.
Otto G

18

Spróbuj użyć przeglądarki Firefox 46.0.1. Najlepiej pasuje do Selenium 2.53

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

Dzięki Rahman… to działa teraz… ale co, jeśli wymaganie jest zgodne z najnowszą wersją.
Veena K.

Jeśli rozwiązanie działa, czy możesz zaakceptować odpowiedź? :-)
Mahbub Rahman

8
to nie jest rozwiązanie, jest to downgrade do poprzedniej wersji.
TiGreX

1
Ja też to zrobiłem (ale przeszedłem do v45) - jeśli pójdziesz tą ścieżką, upewnij się, że zmienisz nazwę <path> \ Mozilla Firefox \ updater.exe na updater.exe. Wyłącz, aby uniemożliwić uaktualnienie zdegradowanej wersji z powrotem do bieżącej wersji automatycznie. Mogą istnieć również inne sposoby, aby to osiągnąć - ale wyłączenie aktualizacji w ustawieniach opcji nie działa dla mnie.
Drew

10

Miałem ten sam problem i okazało się, że musisz zmienić sterowniki, ponieważ wsparcie zostało przerwane . Zamiast korzystać ze sterownika Firefox , musisz użyć sterownika Marionette , aby uruchomić testy. Obecnie sam pracuję nad konfiguracją i mogę opublikować kilka sugerowanych kroków, jeśli chcesz, gdy mam działający przykład.

Oto kroki, które wykonałem, aby to działało w moim środowisku Java na Macu (działało dla mnie również w moich instalacjach Linuksa (Fedora, CentOS i Ubuntu)):

  1. Pobierz plik wykonywalny nightly ze strony wersji
  2. Rozpakuj archiwum
  3. Utwórz katalog dla Marionette (tj. mkdir -p /opt/marionette)
  4. Przenieś rozpakowany plik wykonywalny do utworzonego katalogu
  5. Zaktualizuj swój $PATH aby zawierał plik wykonywalny (również edytuj, .bash_profilejeśli chcesz)
  6. : bangbang: Upewnij się, chmod +x /opt/marionette/wires-x.x.xże jest to plik wykonywalny
  7. Podczas uruchamiania upewnij się, że korzystasz z następującego kodu poniżej (właśnie tego użyłem na Macu)

Krótka notatka

Nadal nie działa zgodnie z oczekiwaniami, ale przynajmniej uruchamia przeglądarkę teraz. Muszę dowiedzieć się, dlaczego - teraz wygląda na to, że muszę przepisać moje testy, aby działały.

Fragment Java

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

6

Jeśli korzystasz z systemu OSX i korzystasz z Homebrew, możesz zainstalować stare wersje Firefoksa za pomocą beczki zaparzającej:

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

Po zainstalowaniu wystarczy zmienić nazwę pliku wykonywalnego FF w katalogu Aplikacje na „Firefox”.

Więcej informacji można znaleźć w repozytorium git homebrew-firefox . Rekwizyty do smclernon za stworzenie oryginalnej beczki .



3

Na wypadek, gdyby ktoś się zastanawiał, jak używać Marionette w 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));

Zastępowanie FirefoxOptions w celu udostępnienia funkcji dodania dodatkowych możliwości i ustawienia profilu Firefoksa, ponieważ selenium v53 nie zapewnia jeszcze tej funkcji.

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

Uwaga: uruchomienie z profilem nie działa z FF 47, działa z FF 50 Nightly.

Próbowaliśmy jednak przekonwertować nasz test na Marionette i obecnie nie jest to możliwe, ponieważ implementacja sterownika nie została zakończona lub zawiera błędy. Sugerowałbym teraz, aby ludzie obniżyli wersję ich Firefoksa.


2

Nowe biblioteki Selenium są już niedostępne, zgodnie z: https://github.com/SeleniumHQ/selenium/issues/2110

Strona pobierania http://www.seleniumhq.org/download/ wydaje się nie być jeszcze zaktualizowana, ale dodając 1 do wersji pomocniczej w linku, mogłem pobrać wersję C #: http: // selenium-release. storage.googleapis.com/2.53/selenium-dotnet-2.53.1.zip

U mnie działa z przeglądarką Firefox 47.0.1.

Na marginesie, mogłem zbudować tylko rozszerzenie webdriver.xpi do przeglądarki Firefox z głównej gałęzi w GitHub, uruchamiając ./go //javascript/firefox-driver:webdriver:run- co spowodowało komunikat o błędzie, ale zbudowało plik build / javascript / firefox-driver / webdriver.xpi , który ja można zmienić nazwę (aby uniknąć konfliktu nazw) i pomyślnie załadować za pomocą metody FirefoxProfile.AddExtension. To było rozsądne obejście, bez konieczności przebudowywania całej biblioteki Selenium.


Mogę potwierdzić, że podwyższenie poziomu selenu do 2.53.1 rozwiązało problem.
Disper

To jest teraz najlepsza odpowiedź.
Holistic Developer

2

To wydanie FF47 https://github.com/SeleniumHQ/selenium/issues/2110

Zmień wersję na FF 46 lub niższą (lub wypróbuj programistę FF48 https://developer.mozilla.org/en-US/Firefox/Releases/48 )

Instrukcje dotyczące obniżania wersji: https://www.liberiangeek.net/2012/04/how-to-install-previous-versions-of-firefox-in-ubuntu-12-04-precise-pangolin/ Lub jeśli jesteś na Macu, jak zasugerował ktoś inny w tym wątku, użyj naparu.


Według komentarza sprzed 19 godzin: „ Firefox 47.0.1 został wydany z poprawką. Musimy teraz zwolnić biblioteki klienckie, aby uzyskać zmianę wersji w xpi używanym przez FirefoxDriver . ” Wydaje się to wyjaśniać, dlaczego nadal występują problemy z wersjami 2.53.0 i 47.0.1.
Otto G

2

Firefox 47.0 przestał działać z Webdriverem.

Najłatwiejszym rozwiązaniem jest przejście na Firefox 47.0.1 i Webdriver 2.53.1. Ta kombinacja znowu działa. W rzeczywistości przywrócenie zgodności z Webdriver było głównym powodem wydania 47.0.1, zgodnie z https://www.mozilla.org/en-US/firefox/47.0.1/releasenotes/ .


Teraz Firefox 47.0.1 działa również dobrze z Webdriver 2.53.0. Przetestowałem tę kombinację.
veena k

2

Możesz spróbować użyć tego kodu,

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

Zaktualizowałem selenium do 3.0.0, a wersja Firefox to 49.0.1

Możesz pobrać geckodriver.exe z https://github.com/mozilla/geckodriver/releases

Upewnij się, że pobierasz tylko plik zip, plik geckodriver-v0.11.1-win64.zip lub plik win32 zgodnie z systemem i rozpakuj go do folderu.

Umieść ścieżkę do tego folderu w cudzysłowie „Twoja ścieżka do sterownika”. Nie zapomnij umieścić w ścieżce geckodriver.exe.


1

W końcu zainstalowałem dodatkową starą wersję Firefoksa (używaną tylko do testów), aby rozwiązać ten problem, oprócz mojej zwykłej (bezpiecznej, aktualnej) najnowszej instalacji Firefoksa.

To wymaga, aby webdriver wiedział, gdzie może znaleźć plik binarny przeglądarki Firefox, który można ustawić za pomocą webdriver.firefox.binwłaściwości.

To, co zadziałało dla mnie (Mac, Maven, /tmp/ff46jako folder instalacyjny) to:

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

Aby zainstalować starą wersję Firefoksa w dedykowanym folderze, utwórz folder, otwórz Finder w tym folderze, pobierz plik dmg Firefoksa i przeciągnij go do tego Findera.



1

Stan na wrzesień 2016 r

Firefox 48.0i selenium==2.53.6działa dobrze bez żadnych błędów

Aby zaktualizować tylko FirefoxaUbuntu 14.04

sudo apt-get update
sudo apt-get upgrade firefox

1

Wydaje mi się, że najlepszym rozwiązaniem jest aktualizacja do Selenium 3.0.0, pobranie geckodriver.exe i użycie przeglądarki Firefox 47 lub nowszej.

Zmieniłem inicjalizację Firefoksa na:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.