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 не загружается.
15 ответов
К сожалению, Selenium WebDriver 2.53.0 не совместим с Firefox 47.0. Компонент WebDriver, который обрабатывает браузеры Firefox (FirefoxDriver
) будет прекращено. Начиная с версии 3.0, Selenium WebDriver потребуется geckodriver
двоичный файл для управления браузерами Firefox. Больше информации здесь и здесь.
Поэтому, чтобы использовать 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.0.0</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 для получения более подробной информации.
ОБНОВИТЬ
Selenium WebDriver 2.53.1 был выпущен 30 июня 2016 года. FirefoxDriver
снова работает с Firefox 47.0.1 в качестве браузера.
Попробуйте использовать Firefox 46.0.1. Лучше всего сочетается с Selenium 2.53
https://ftp.mozilla.org/pub/firefox/releases/46.0.1/win64/en-US/
У меня была та же проблема, и я обнаружил, что вам нужно переключать драйверы, потому что поддержка была прекращена. Вместо того, чтобы использовать драйвер Firefox, вам нужно использовать драйвер Marionette для запуска ваших тестов. В настоящее время я сам работаю над настройкой и могу опубликовать некоторые предложенные шаги, если вы хотите, когда у меня есть рабочий пример.
Вот шаги, которые я выполнил, чтобы заставить это работать в моей среде Java на Mac (также работало для меня в моих установках Linux (Fedora, CentOS и Ubuntu)):
- Загрузите ночной исполняемый файл со страницы релизов
- Распакуйте архив
- Создать каталог для марионеток (т.е.
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");
Если вы используете OS Homebrew на OSX, вы можете установить старые версии Firefox через brew cask:
brew tap goldcaddy77/firefox
brew cask install firefox-46 # or whatever version you want
После установки вам просто нужно переименовать исполняемый файл FF в каталоге приложений в "Firefox".
Больше информации можно найти на git repo homebrew-firefox. Реквизит для smclernon для создания оригинальной бочки.
На случай, если кому-то интересно, как использовать марионетку в 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));
Переопределение 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 в данный момент.
Вы можете попробовать использовать этот код,
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.
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/.
Это проблема 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.
Новые библиотеки Selenium в настоящее время отсутствуют, согласно: https://github.com/SeleniumHQ/selenium/issues/2110
Страница загрузки http://www.seleniumhq.org/download/ кажется, еще не обновлена, но, добавив 1 к младшей версии в ссылке, я мог загрузить версию C#: http://selenium-release.storage.googleapis.com/2.53/selenium-dotnet-2.53.1.zip
У меня работает с Firefox 47.0.1.
Как примечание, я смог собрать только расширение Firefox webdriver.xpi из главной ветки в GitHub, запустив ./go //javascript/firefox-driver:webdriver:run
- который дал сообщение об ошибке, но собрал файл build/javascript/firefox-driver/webdriver.xpi, который я мог переименовать (чтобы избежать конфликта имен) и успешно загрузить с помощью метода FirefoxProfile.AddExtension. Это был разумный обходной путь без необходимости перестраивать всю библиотеку Selenium.
Вот как выглядела проблема в Wireshar k
Просто загрузите 2.53.1, и все будет работать.
Мне кажется, что лучшим решением является обновление до 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();
По состоянию на сентябрь 2016 года
Firefox 48.0
а также selenium==2.53.6
отлично работает без ошибок
Чтобы обновить Firefox на Ubuntu 14.04
только
sudo apt-get update
sudo apt-get upgrade firefox
В конце концов я установил дополнительную старую версию Firefox (используемую только для тестирования), чтобы решить эту проблему, помимо моей обычной (безопасной, актуальной) установки Firefox.
Для этого веб-драйверу необходимо знать, где он может найти бинарный файл Firefox, который можно установить через webdriver.firefox.bin
имущество.
Что сработало для меня (Mac, Maven, /tmp/ff46
как установочная папка) есть:
mvn -Dwebdriver.firefox.bin=/tmp/ff46/Firefox.app/Contents/MacOS/firefox-bin verify
Чтобы установить старую версию Firefox в отдельную папку, создайте ее, откройте Finder в этой папке, загрузите файл Firefox dmg и перетащите его в этот Finder.
Я могу подтвердить, что selenium 2.53.6
работает с firefox 44
для меня на Ubuntu 15.