selenium2.53不适用于Firefox 47

使用WebDriver使用Firefox时出现错误。

org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. 
  • Firefox版本:47.0
  • selenium:2.53.0
  • Windows 10 64位

有没有人得到类似的问题或任何想法这是什么解决scheme? Chrome浏览器工作正常,但Firefox浏览器没有任何URL正在加载。

不幸的是Selenium WebDriver 2.53.0与Firefox 47.0不兼容。 处理Firefox浏览器( FirefoxDriver )的WebDriver组件将停止使用。 从3.0版开始,Selenium WebDriver将MarionetteDriver作为Firefoxtesting的默认运行实现。 更多信息在这里和这里 。

因此,为了在Selenium WebDriver 2.53.0中使用Firefox 47.0作为浏览器,需要下载Marionette驱动程序 (这是一个名为geckodriver的二进制文件,版本号为0.8.0,以前是wires ),并将其绝对path导出到variableswebdriver.gecko.driver作为Java代码中的系统属性:

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

幸运的是,图书馆的WebDriverManager可以为你做这个工作,也就是为你的机器(Linux,Mac或Windows)下载适当的Marionette二进制文件,并导出适当系统属性的值。 要使用这个库,你需要在你的项目中包含这个依赖项:

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

…然后在使用WebDriver之前在程序中执行这一行:

 FirefoxDriverManager.getInstance().setup(); 

使用WebDriver和Marionette的JUnittesting用例的完整运行示例如下所示:

 public class FirefoxTest { protected WebDriver driver; @BeforeClass public static void setupClass() { FirefoxDriverManager.getInstance().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将是未来的唯一select(对于WebDriver 3+和Firefox 48+),但目前(写入时版本0.9.0)并不是非常稳定。 看看木偶路线图了解更多细节。

UPDATE

Selenium WebDriver 2.53.1已于2016年6月30日发布FirefoxDriver再次以Firefox 47.0.1作为浏览器。

尝试使用Firefox 46.0.1。 它与selenium2.53最匹配

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

我有同样的问题,并发现你需要切换驱动程序,因为支持被删除 。 而不是使用Firefox驱动程序 ,您需要使用木偶驱动程序来运行您的testing。 我目前正在通过设置自己,并可以张贴一些build议的步骤,如果你想当我有一个工作的例子。

下面是我在Mac上使用Java环境的步骤(在Linux安装(Fedora,CentOS和Ubuntu)中为我工作):

  1. 从发布页面下载夜间可执行文件
  2. 解压档案
  3. 创build一个木偶目录(即, mkdir -p /opt/marionette
  4. 将解包的可执行文件移到您创build的目录
  5. 更新$PATH以包含可执行文件(如果需要,也可以编辑.bash_profile
  6. :bangbang:确保你是chmod +x /opt/marionette/wires-xxx这样它就可以执行了
  7. 在你的启动中,请确保你使用下面的代码(这是我在Mac上使用的)

快速注意

仍然没有按预期工作,但至less现在启动浏览器。 需要弄清楚为什么 – 现在看起来像我需要重写我的testing,以使其工作。

Java代码片段

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

如果您使用Homebrew在OSX上,则可以通过brew cask安装旧的Firefox版本:

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

安装完成后,您只需将Applications目录中的FF可执行文件重命名为“Firefox”即可。

更多的信息可以在git repo homebrew-firefoxfind 。 道具为了创造原始的木桶 。

如果你在Mac上做brew install geckodriver并离开你去!

如果有人想知道如何在C#中使用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提供的function,添加额外的function,并设置火狐configuration文件,因为seleniumv53不提供该function呢。

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

注意:使用configuration文件启动并不适用于FF 47,它适用于FF 50 Nightly。

但是,我们试图将我们的testing转换为使用Marionette,目前还不能实现,因为驱动程序的实现要么没有完成,要么没有完成。 我build议人们现在降级他们的Firefox。

新的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。

作为一个侧面说明,我能够通过运行./go //javascript/firefox-driver:webdriver:run – 从GitHub的master分支构buildwebdriver.xpi Firefox扩展,它给出了一个错误消息,但是构build了构build/javascript/firefox-driver/webdriver.xpi文件,我可以重命名(以避免名称冲突),并成功加载FirefoxProfile.AddExtension方法。 这是一个合理的解决方法,无需重新编译整个Selenium库。

它的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上,正如此线程中的其他人所build议使用brew。

Firefox 47.0停止使用Webdriver。

最简单的解决scheme是切换到Firefox 47.0.1和Webdriver 2.53.1。 这个组合再次起作用。 事实上,根据https://www.mozilla.org/en-US/firefox/47.0.1/releasenotes/ ,恢复Webdriver兼容性是47.0.1版本背后的主要原因。

你可以尝试使用这个代码,

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

我升级到selenium3.0.0和Firefox版本是49.0.1

您可以从https://github.com/mozilla/geckodriver/releases下载geckodriver.exe

确保你只下载压缩文件,geckodriver-v0.11.1-win64.zip文件或win32一个按照你的系统,并提取它在一个文件夹。

将该文件夹的path放在“您的驱动程序的path”引号中。别忘了将geckodriver.exe放在path中。

我最终安装了一个额外的老版本的Firefox(仅用于testing)来解决这个问题,除了我最新的Firefox(安全的,最新的)安装。

这需要webdriver知道它在哪里可以findFirefox二进制文件,可以通过webdriver.firefox.bin属性来设置。

对我来说(mac,maven, /tmp/ff46作为安装文件夹)是:

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

要将旧版本的Firefox安装在专用文件夹中,请创build该文件夹,在该文件夹中打开Finder,下载Firefox dmg,然后将其拖至该Finder。

这是Wireshar k中的问题

只需加载2.53.1,每件事情都可以工作。

截至2016年9月

Firefox 48.0selenium==2.53.6工作正常,没有任何错误

Ubuntu 14.04上升级Firefox

 sudo apt-get update sudo apt-get upgrade firefox 

在我看来,最好的解决办法是更新到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(); 

我可以确认selenium 2.53.6在Ubuntu 15上适用于我的firefox 44