如何阻止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
相关产品推荐
相关产品推荐

