You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下Selenium+Geckodriver运行Java自动化测试报错求助

Linux下Java-Selenium无法加载Geckodriver连接Firefox的问题

环境配置

  • 操作系统:Fedora Linux 36(Workstation Edition)x86_64
  • Firefox版本:106.0.1(64位),路径验证命令:
    [bans@bans-note ~]$ which firefox
    /usr/bin/firefox 
    
    文件存在验证:
    [bans@bans-note ~]$ ls /usr/bin |grep firefox
    firefox
    
    浏览器可正常启动:
    [bans@bans-note bin]$ ./firefox
    

Driver初始化代码片段

case "linux_firefox":{
    System.setProperty("webdriver.gecko.driver", PATH_LINUX_FIREFOX_DRIVER);
    System.setProperty("webdriver.firefox.bin", PATH_LINUX_FIREFOX);
    FirefoxOptions firefoxOptions = new FirefoxOptions();
    firefoxOptions.addArguments("--headless");
    firefoxOptions.addArguments("--no-sandbox");
    driver = new FirefoxDriver();

    break;
}

注:PATH_LINUX_FIREFOX_DRIVER和PATH_LINUX_FIREFOX均指向已确认存在的对应文件路径

报错信息

java.lang.IllegalStateException: Specified firefox binary location does not exist or is not a real file: /usr/bin/firefox

    at com.google.common.base.Preconditions.checkState(Preconditions.java:504)
    at org.openqa.selenium.firefox.Executable.<init>(Executable.java:43)
    at org.openqa.selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.java:123)
    at common.CommonActions.createDriver(CommonActions.java:65)
    at tests.base.BaseTest.<init>(BaseTest.java:15)
    at tests.TestLogin.positive.LoginTest.<init>(LoginTest.java:12)
    at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
    at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)

Process finished with exit code 255

已尝试无效的方案

  • 修改Driver初始化代码,改用FirefoxBinary和DesiredCapabilities配置
  • 重新安装Firefox
  • 安装Firefox snap版本

解决方案

1. 确认Firefox真实二进制路径

Fedora下/usr/bin/firefox通常是软链接,并非真实二进制文件。执行以下命令查看真实路径:

ls -l /usr/bin/firefox

示例输出:lrwxrwxrwx. 1 root root 29 Oct 12 09:45 /usr/bin/firefox -> /usr/lib64/firefox/firefox,此时真实路径为/usr/lib64/firefox/firefox。

2. 调整初始化代码,指定真实路径

统一使用FirefoxOptions配置,避免混用系统属性,同时添加Linux下常见的参数:

case "linux_firefox":{
    System.setProperty("webdriver.gecko.driver", PATH_LINUX_FIREFOX_DRIVER);
    FirefoxOptions firefoxOptions = new FirefoxOptions();
    // 替换为上一步获取的真实Firefox二进制路径
    firefoxOptions.setBinary("/usr/lib64/firefox/firefox");
    firefoxOptions.addArguments("--headless");
    firefoxOptions.addArguments("--no-sandbox");
    firefoxOptions.addArguments("--disable-dev-shm-usage"); // 解决共享内存不足问题
    driver = new FirefoxDriver(firefoxOptions);
    break;
}

3. 验证权限

确保运行测试的用户对Geckodriver和Firefox二进制文件有执行权限:

chmod +x PATH_LINUX_FIREFOX_DRIVER
chmod +x /usr/lib64/firefox/firefox

4. 检查Geckodriver版本兼容性

Firefox 106需要搭配Geckodriver 0.31.0及以上版本,如果版本不匹配,下载对应版本替换即可。


内容的提问来源于stack exchange,提问作者bans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:20:30