You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Serenity 1.1.42中如何指定Firefox二进制文件(Geckodriver之前)

解决Serenity 1.1.42指定Firefox二进制路径无效的问题

我太懂你这种无奈了——明明在配置里指定了旧版本Firefox的路径,结果Serenity还是自顾自打开默认的最新版,折腾半天没效果。结合Serenity 1.1.42和Mac OS的环境,给你梳理下正确的解决方法:

先纠正一个常见误区

你之前配置的webdriver.firefox.driver,其实是用来指定GeckoDriver驱动程序的路径,而不是Firefox应用本身的二进制文件路径!这就是为什么你的配置没生效的核心原因。

正确配置Firefox二进制路径的两种方式

方式1:直接在serenity.properties中配置

firefox.binary.path这个专属属性来指定Firefox二进制文件的路径,同时别忘了搭配对应版本的GeckoDriver:

# 指定Firefox 55的二进制路径
firefox.binary.path=/Users/myuser/Applications/Firefox55.app/Contents/MacOS/firefox-bin
# 指定匹配Firefox 55的GeckoDriver路径(比如v0.18.0,版本一定要对应!)
webdriver.firefox.driver=/path/to/your/geckodriver
webdriver.driver=firefox

方式2:自定义Driver类(更灵活)

如果需要更个性化的配置,可以写一个自定义的驱动类,通过FirefoxOptions来指定二进制路径:

import net.thucydides.core.webdriver.DriverSource;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import java.io.File;

public class CustomOldFirefoxDriver implements DriverSource {
    @Override
    public WebDriver newDriver() {
        // 设置Firefox二进制文件
        FirefoxOptions options = new FirefoxOptions();
        options.setBinary(new File("/Users/myuser/Applications/Firefox55.app/Contents/MacOS/firefox-bin"));
        
        // 设置对应版本的GeckoDriver
        System.setProperty("webdriver.firefox.driver", "/path/to/matching/geckodriver");
        
        return new FirefoxDriver(options);
    }

    @Override
    public boolean takesScreenshots() {
        return true; // 保持截图功能正常
    }
}

然后在serenity.properties里指定使用这个自定义驱动:

webdriver.driver.source=com.your.package.CustomOldFirefoxDriver
webdriver.driver=firefox

额外需要检查的细节

  • 路径验证:在终端执行open /Users/myuser/Applications/Firefox55.app,确认能打开目标版本的Firefox,避免路径写错。
  • 权限检查:确保firefox-bin有可执行权限,终端执行chmod +x /Users/myuser/Applications/Firefox55.app/Contents/MacOS/firefox-bin
  • 版本匹配:Firefox和GeckoDriver版本必须对应!比如Firefox 55要搭配GeckoDriver v0.18.0左右的版本,版本不匹配不仅会导致二进制指定无效,还可能直接启动失败。

内容的提问来源于stack exchange,提问作者j.barrio

火山引擎 最新活动