Selenium 2.53无法在Firefox 47上运行

vee*_*a k 106 java firefox selenium selenium-firefoxdriver selenium-webdriver

我在使用Firefox和WebDriver时遇到错误.

org.openqa.selenium.firefox.NotConnectedException: Unable to connect
to host 127.0.0.1 on port 7055 after 45000 ms.
Run Code Online (Sandbox Code Playgroud)
  • Firefox版本:47.0
  • 硒:2.53.0
  • Windows 10 64位

有人得到类似的问题或任何想法是什么解决方案?它适用于Chrome,但使用Firefox时,没有任何网址被加载.

Bon*_*cía 92

不幸的是,Selenium WebDriver 2.53.0与Firefox 47.0不兼容.处理Firefox浏览器(FirefoxDriver)的WebDriver组件将停止使用.从版本3.0开始,Selenium WebDriver将需要geckodriver二进制文件来管理Firefox浏览器.更多信息在这里这里.

因此,为了将Firefox 47.0用作Selenium WebDriver 2.53.0的浏览器,您需要下载Firefox驱动程序(这是一个名为geckodriver0.8.0及以前版本的二进制文件wires)并将其绝对路径导出为变量webdriver.gecko.driveras Java代码中的系统属性:

System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");
Run Code Online (Sandbox Code Playgroud)

幸运的是,库WebDriverManager可以为您完成这项工作,即为您的机器(Linux,Mac或Windows)下载适当的Marionette二进制文件并导出适当系统属性的值.要使用此库,您需要将此依赖项包含在项目中:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>3.7.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

...然后在使用WebDriver之前在程序中执行此行:

WebDriverManager.firefoxdriver().setup();
Run Code Online (Sandbox Code Playgroud)

使用WebDriver的JUnit 4测试用例的完整运行示例如下:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑到Marionette将是未来的唯一选择(适用于WebDriver 3+和Firefox 48+),但目前(写作时版本0.9.0)不是很稳定.请查看Marionette路线图以获取更多详细信息.

UPDATE

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

  • 这是不正确的.MarionetteDriver其实并没有在47,支持尽管FirefoxDriver被打破.显然47.0.1将被释放(有时),其中FirefoxDriver将再次合作.工作MarionetteDriver没能进47的预期.见https://github.com/mozilla/geckodriver/issues/89和https://bugzilla.mozilla.org/show_bug.cgi?id=1279950 - 注:我不是说MarionettDriver不会在所有的工作,只是它被打破了的用例47.降级TON是今天的唯一选择. (9认同)
  • 我更新到47.0.1并且Selenium仍未连接到Firefox.它不再崩溃Firefox,但我仍然无法连接到127.0.0.1:7055.当我运行TcpView时,Firefox启动后没有端口7055的监听器. (7认同)
  • 我看到了与BardMorgan相同的行为,使用Mac,Mono和Selenium .NET 2.53.0.Firefox 47.0.1启动,但是我收到超时错误_OpenQA.Selenium.WebDriverException:无法在45000毫秒内启动套接字.尝试连接到以下地址:127.0.0.1:7055_ - netstat显示没有该端口的侦听器. (2认同)

Mah*_*man 18

尝试使用firefox 46.0.1.它最适合Selenium 2.53

https://ftp.mozilla.org/pub/firefox/releases/46.0.1/win64/en-US/
Run Code Online (Sandbox Code Playgroud)

  • 这不是解决方案,降级到以前的版本. (8认同)

el *_*00b 10

我有同样的问题,发现你需要切换驱动程序,因为 支持被删除了.您需要使用Marionette驱动程序来运行测试,而不是使用Firefox驱动程序.我目前正在完成设置,如果你有一个有效的例子,可以发布一些建议的步骤.

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

  1. 发布页面下载每晚可执行文件
  2. 解压缩档案
  3. 为Marionette创建一个目录(即mkdir -p /opt/marionette)
  4. 将解压缩的可执行文件移动到您创建的目录
  5. 更新你$PATH的包含可执行文件(.bash_profile如果你想,也可以编辑你的)
  6. :bangbang:请确保chmod +x /opt/marionette/wires-x.x.x它是可执行的
  7. 在您的发布中,请确保使用下面的代码(这是我在Mac上使用的代码)

快速注意

仍然没有按预期工作,但至少现在启动浏览器.需要找出原因 - 现在看来我需要重写我的测试才能使它工作.

Java片段

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


Dan*_*gan 6

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

brew tap goldcaddy77/firefox
brew cask install firefox-46 # or whatever version you want
Run Code Online (Sandbox Code Playgroud)

安装后,您只需将Applications目录中的FF可执行文件重命名为"Firefox"即可.

更多信息可以在git repo homebrew-firefox找到.用于创建原始桶的smclernon的道具.


The*_* Oz 6

如果你在Mac上brew install geckodriver,你就去吧!