Selenium 2.53 не работает на Firefox 47

Я получаю ошибку при использовании Firefox с WebDriver.

org.openqa.selenium.firefox.NotConnectedException: Unable to connect
to host 127.0.0.1 on port 7055 after 45000 ms.
  • Версия Firefox: 47.0
  • Селен: 2.53.0
  • Windows 10 64 бит

Есть ли у кого-то подобная проблема или какая-либо идея, каково решение для этого? Он отлично работает с Chrome, но с Firefox ни один из URL-адресов не загружается.

Ответ 1

К сожалению, Selenium WebDriver 2.53.0 не совместим с Firefox 47.0. Компонент WebDriver, который обрабатывает браузеры Firefox (FirefoxDriver), будет прекращен. Начиная с версии 3.0, для управления браузерами Firefox Selenium WebDriver потребуется двоичный файл geckodriver. Подробнее здесь и здесь.

Поэтому, чтобы использовать Firefox 47.0 в качестве браузера с Selenium WebDriver 2.53.0, вам необходимо загрузить драйвер Firefox (это двоичный файл с именем geckodriver начиная с версии 0.8.0 и ранее wires) и экспортируйте его абсолютный путь в переменную webdriver.gecko.driver как системное свойство в вашем коде Java:

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

К счастью, библиотека WebDriverManager может выполнить эту работу за вас, то есть загрузить соответствующий двоичный файл Marionette для вашей машины (Linux, Mac или Windows) и экспортировать значение соответствующего системного свойства. Чтобы использовать эту библиотеку, вам нужно включить эту зависимость в ваш проект:

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

... а затем выполните эту строку в своей программе перед использованием WebDriver:

WebDriverManager.firefoxdriver().setup();

Полный пример выполнения теста JUnit 4 с использованием WebDriver может быть следующим:

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

Примите во внимание, что Marionette будет единственным вариантом на будущее (для WebDriver 3+ и Firefox 48+), но в настоящее время (версия 0.9.0 на момент написания) не очень стабильна. Посмотрите дорожную карту Marionette для получения дополнительной информации.

UPDATE

Selenium WebDriver 2.53.1 был выпущен 30 июня 2016 года. FirefoxDriver снова работает с Firefox 47.0.1 в качестве браузера.

Ответ 2

Попробуйте использовать firefox 46.0.1. Он лучше всего подходит для Selenium 2.53

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

Ответ 3

У меня была такая же проблема и выяснили, что вам нужно переключать драйверы, потому что была удалена поддержка. Вместо использования драйвера Firefox вам необходимо использовать драйвер Marionette, чтобы выполнить ваши тесты. В настоящее время я работаю над настройкой и могу опубликовать некоторые предлагаемые шаги, если вы хотите, чтобы у меня был рабочий пример.

Ниже приведены шаги, которые я выполнил для работы с моей средой Java на Mac (работал у меня в моих установках Linux (Fedora, CentOS и Ubuntu)):

  • Загрузите ночной исполняемый файл с страницы выпуска
  • Распаковать архив
  • Создайте каталог для Marionette (т.е. mkdir -p /opt/marionette)
  • Переместите распакованный исполняемый файл в каталог, который вы создали.
  • Обновите свой $PATH, чтобы включить исполняемый файл (также, если хотите, отредактируйте .bash_profile)
  • : bangbang: убедитесь, что вы chmod +x /opt/marionette/wires-x.x.x, чтобы он выполнялся
  • В своем запуске убедитесь, что вы используете следующий код ниже (это то, что я использовал на Mac)

Быстрая заметка

По-прежнему не работает, как ожидалось, но, по крайней мере, теперь запускается браузер. Нужно выяснить, почему - сейчас кажется, что мне нужно переписать мои тесты, чтобы заставить его работать.

Java Snippet

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

Ответ 4

Если вы используете OSX с помощью Homebrew, вы можете установить старые версии Firefox через brew cask:

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

После установки вам просто нужно переименовать исполняемый файл FF в каталог приложений в "Firefox".

Дополнительную информацию можно найти на git repo homebrew-firefox. Подтверждает smclernon для создания исходного .

Ответ 5

Если вы находитесь на Mac do brew install geckodriver и уходите!

Ответ 6

Если кто-то задается вопросом, как использовать Marionette в С#.

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

Переопределение FirefoxOptions для предоставления функции добавления дополнительных возможностей и настройки профиля Firefox, поскольку selenium v53 еще не предоставляет эту функцию.

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

Примечание. Запуск с профилем не работает с FF 47, он работает с FF 50 Nightly.

Тем не менее, мы попытались преобразовать наш тест, чтобы использовать Marionette, и он просто не жизнеспособен на данный момент, потому что реализация драйвера либо не завершена, либо ошибочна. Я предлагаю людям понизить их Firefox в данный момент.

Ответ 7

Это вопрос FF47 https://github.com/SeleniumHQ/selenium/issues/2110

Пожалуйста, понижайтесь до FF 46 или ниже (или попробуйте разработчика FF48 https://developer.mozilla.org/en-US/Firefox/Releases/48)

Инструкции о том, как понизить рейтинг: https://www.liberiangeek.net/2012/04/how-to-install-previous-versions-of-firefox-in-ubuntu-12-04-precise-pangolin/ Или, если вы находитесь на Mac, как предложил кто-то из этого потока, используйте brew.

Ответ 8

Новые библиотеки Selenium теперь выходят, согласно: https://github.com/SeleniumHQ/selenium/issues/2110

Страница загрузки http://www.seleniumhq.org/download/, похоже, пока не обновляется, но добавив 1 к второстепенной версии в ссылке, я мог бы скачать версию С#: http://selenium-release.storage.googleapis.com/2.53/selenium-dotnet-2.53.1.zip

Он работает для меня с Firefox 47.0.1.

В качестве дополнительной заметки я смог создать только расширение webdriver.xpi Firefox из главного ветки в GitHub, запустив ./go //javascript/firefox-driver:webdriver:run -, который дал сообщение об ошибке, но создал сборку /javascript/firefox -driver/webdriver.xpi, который я мог бы переименовать (чтобы избежать столкновения имен) и успешно загрузить с помощью метода FirefoxProfile.AddExtension. Это было разумное обходное решение без необходимости перестраивать всю библиотеку Селена.

Ответ 9

Firefox 47.0 перестает работать с Webdriver.

Самое простое решение - перейти на Firefox 47.0.1 и Webdriver 2.53.1. Эта комбинация снова работает. Фактически, восстановление совместимости Webdriver стало основной причиной выпуска 47.0.1, согласно https://www.mozilla.org/en-US/firefox/47.0.1/releasenotes/.

Ответ 10

Вы можете попробовать использовать этот код,

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

Я обновился до версии selenium 3.0.0 и Firefox версии 49.0.1

Вы можете скачать geckodriver.exe из https://github.com/mozilla/geckodriver/releases

Убедитесь, что вы загружаете только zip файл, файл geckodriver-v0.11.1-win64.zip или win32 один в соответствии с вашей системой и извлекаете его в папку.

Поместите путь для этой папки в кавычки "Ваш путь к драйверу". Не забудьте положить geckodriver.exe в путь.

Ответ 11

В конце концов я установил дополнительную старую версию Firefox (только для тестирования), чтобы решить эту проблему, помимо моей обычной (безопасной, обновленной) последней установки Firefox.

Для этого требуется, чтобы webdriver знал, где он может найти двоичный код Firefox, который можно установить через свойство webdriver.firefox.bin.

Что работало для меня (mac, maven, /tmp/ff46 в качестве установочной папки):

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

Чтобы установить старую версию Firefox в выделенную папку, создайте папку, откройте Finder в этой папке, загрузите dmg Firefox и перетащите ее в этот Finder.

Ответ 13

По состоянию на сентябрь 2016 года

Firefox 48.0 и selenium==2.53.6 работают без ошибок

Чтобы обновить firefox только Ubuntu 14.04

sudo apt-get update
sudo apt-get upgrade firefox

Ответ 14

Мне кажется, что лучшим решением является обновление до Selenium 3.0.0, загрузка geckodriver.exe и использование Firefox 47 или выше.

Я изменил инициализацию Firefox на:

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

Ответ 15

Я могу подтвердить, что selenium 2.53.6 работает с firefox 44 для меня на ubuntu 15.