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

如何阻止Capybara/Selenium Chrome窗口自动前置获取焦点?

解决Capybara/Selenium Chrome窗口自动前置的问题

哈哈,这个问题我太懂了——跑测试的时候Chrome窗口反复跳出来抢焦点,15分钟完全没法干别的,简直煎熬!别担心,有几个配置选项能帮你解决这个问题,看你需求选就行:

方案1:用无头模式(彻底隐藏窗口)

这是最省心的办法,Chrome完全在后台运行,连窗口都不会显示,完美不干扰你做其他事。只需要在你的Chrome启动参数里加上headless=new(新版Chrome推荐用这个,旧版可以用headless)。修改后的配置如下:

Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: {
      "chromeOptions" => {
        "args" => %w{ window-size=1740,768 headless=new }
      }
    }
  )
end

如果你的Chrome版本在v94之前,把headless=new换成headless就行。

方案2:保留窗口但禁止前置/移到屏幕外

如果你偶尔还需要看测试窗口的运行情况,不想完全无头,可以试试这两个参数:

  • --no-focus-window:让Chrome启动时不自动获取焦点,窗口会在后台打开,不会跳出来抢你当前的工作窗口
  • --window-position=-32000,-32000:把窗口移到屏幕可视区域外,相当于“隐藏”但其实还在运行,你需要的时候可以手动拖回来

修改后的配置示例(选其中一个参数就行):

Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: {
      "chromeOptions" => {
        "args" => %w{ window-size=1740,768 --no-focus-window }
        # 或者用这个:"args" => %w{ window-size=1740,768 --window-position=-32000,-32000 }
      }
    }
  )
end

额外提示

如果你用的是较新版本的Capybara(3.x+),可以用更简洁的语法配置Chrome选项,代码可读性更高:

Capybara.register_driver :selenium do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument("window-size=1740,768")
  options.add_argument("headless=new") # 或者替换成--no-focus-window
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:58