Capybara+Selenium+Firefox配置默认窗口大小不生效如何解决?
问题原因
Firefox 无头模式下的 --window-size 命令行参数生效逻辑与 Chromium 存在差异,该参数仅在浏览器启动瞬间生效,后续会被 GeckoDriver 的默认窗口配置覆盖,最终还原为系统默认视口尺寸,这是 GeckoDriver 已知的行为特性,并非配置代码存在语法错误。
解决方案
无需额外手动调用调整方法,也不需要配置全局 before 钩子,直接修改驱动注册代码,在驱动实例化后立刻执行一次窗口大小调整即可,修改后的代码如下:
RSpec.configure do |config| Capybara.register_driver :selenium_headless do |app| version = Capybara::Selenium::Driver.load_selenium options_key = Capybara::Selenium::Driver::CAPS_VERSION.satisfied_by?(version) ? :capabilities : :options browser_options = ::Selenium::WebDriver::Firefox::Options.new.tap do |opts| opts.add_argument '-headless' opts.add_argument '--window-size=1920,1080' end # 先实例化驱动 driver = Capybara::Selenium::Driver.new(app, **{ :browser => :firefox, options_key => browser_options }) # 驱动启动后立刻调整窗口大小,仅执行一次 driver.browser.manage.window.resize_to(1920, 1080) driver end end
该方案仅在驱动首次注册启动时执行一次大小调整,不会在每个测试用例前重复执行,性能损耗可以忽略,也和原有注册逻辑耦合度最低。
内容的提问来源于stack exchange,提问作者Erik Jacobs
相关产品推荐
相关产品推荐

