使用Selenium测试Firefox无头模式时遇整数参数错误,如何解决?
解决Firefox无头模式下SessionNotCreatedException的问题
根据我处理这类问题的经验,你遇到的这个SessionNotCreatedException(附带InvalidArgumentError: Expected [object Undefined] undefined to be an integer提示),主要是版本兼容性不匹配或者无头模式参数配置错误导致的,下面给你几个具体的解决方向:
1. 检查Selenium、Firefox、GeckoDriver的版本兼容性
你当前使用的Selenium是3.8.1,这是2017年底的老版本,它对Firefox的兼容性仅覆盖到Firefox 57-60左右。如果Travis环境默认安装的Firefox版本过高,就会出现这种不兼容的报错。
解决办法:
- 要么升级Selenium版本:比如升级到4.x系列(当前主流版本),同时搭配对应版本的Firefox(比如Firefox 100+)和GeckoDriver(v0.30+),三者版本必须匹配。
- 要么降级Firefox版本:在Travis的配置文件(
.travis.yml)里指定和Selenium 3.8.1兼容的Firefox版本,示例配置:
同时确保GeckoDriver使用v0.19.0左右的版本,这个版本和Selenium 3.8.1是匹配的。addons: firefox: "57.0"
2. 检查无头模式的参数配置是否正确
错误提示里的“Expected ... to be an integer”,说明你在设置无头模式参数时,可能传递了非整数的数值(比如带单位的窗口大小字符串),或者参数格式不符合要求。
正确的Java代码配置无头模式示例:
FirefoxOptions options = new FirefoxOptions(); // 启用无头模式 options.setHeadless(true); // 设置窗口大小,确保参数是纯整数格式的字符串 options.addArguments("--width=1920", "--height=1080"); // 初始化驱动 WebDriver driver = new FirefoxDriver(options);
检查你自己的代码,有没有类似把窗口大小写成"width=1920px"(带px单位)或者其他非纯整数的参数,这类错误会触发这个InvalidArgumentError。
3. 确认Travis环境的依赖配置
在Travis里运行测试时,默认的GeckoDriver版本可能不匹配,你可以在.travis.yml里手动指定GeckoDriver的安装步骤,示例:
before_install: - wget https://github.com/mozilla/geckodriver/releases/download/v0.19.0/geckodriver-v0.19.0-linux64.tar.gz - tar -xzf geckodriver-v0.19.0-linux64.tar.gz - chmod +x geckodriver - sudo mv geckodriver /usr/local/bin/
这样能确保使用的GeckoDriver版本和你的Selenium、Firefox版本兼容。
按照这几个方向排查,应该能解决你遇到的问题。
内容的提问来源于stack exchange,提问作者Phyxx
相关产品推荐
相关产品推荐

