更改默认 Capybara 浏览器窗口大小

Posted

技术标签:

【中文标题】更改默认 Capybara 浏览器窗口大小【英文标题】:Change default Capybara browser window size 【发布时间】:2013-08-25 18:02:50 【问题描述】:

所以,关于使用 Capybara 和 RSpec 的集成测试,我知道我可以这样做:

page.driver.browser.manage.window.resize_to(x,y)

根据How to set Browser Window size in Rspec (Selenium) 进行特定的 RSpec 测试,但有没有办法在全局范围内执行此操作,以便受媒体查询影响的每个测试都不必定义这个?

【问题讨论】:

【参考方案1】:

对所有 js 测试执行此操作的正确方法是在 spec_helper.rb RSpec.configure 块中添加以下内容

config.before(:each, js: true) do
  Capybara.page.driver.browser.manage.window.maximize
end

最大化窗口。更改为resize_to(x,y) 以设置任何窗口大小。

编辑:如果你碰巧在使用 Poltergeist,那么正确的做法是

config.before(:each, js: true) do
  Capybara.page.driver.browser.resize(x,y)
end

【讨论】:

这似乎不适用于 Capybara 和 Poltergeist:undefined method 'manage' for #<Capybara::Poltergeist::Browser:0x007fd4e76ec828> 嘿@tirdadc 你用的是什么版本? 好的,我可以看到没有管理 Poltergeist 但有一种方法可以调整大小,更新答案!【参考方案2】:

你可以在before(:all)下定义

describe "Test" do
  before(:all) do
    ...
    ...
    page.driver.browser.manage.window.resize_to(x,y) #Mention it here
  end

  it "should find everything" do
    ...
  end

  after(:all) do
   ...
  end
end

【讨论】:

那么我需要在每个规范文件中都这样做吗?我该如何处理所有的事情 您可以使用 RSpec.configure 在示例中包含或扩展模块,然后将 before :all/:each 放在您要包含/扩展的模块中:relishapp.com/rspec/rspec-core/docs/helper-methods/…【参考方案3】:

也许是由于最近水豚的变化,对我有用的是:

before do
  Capybara.page.current_window.resize_to(x, y)
end

【讨论】:

这是目前唯一至少做某事的人,但我收到 Capybara::NotSupportedByDriverError 错误。我尝试了 poltergeist 和 webkit。我正在运行 Ubuntu 16.04,有人知道出了什么问题吗? @Aurimas 您可以尝试更改您的驱动程序,尝试在您的规范中使用js: true【参考方案4】:

对于 Capybara 2.2.4 版本中的测试运行时,您可以通过这样做来实现此目的

before do
  handle = Capybara.page.driver.current_window_handle
  Capybara.page.driver.resize_window_to(handle, height, width)
end

或者

before do   
  Capybara.page.current_window.resize_to(height, width)
end

如果您收到 Capybara::NotSupportedByDriverError: Capybara::Driver::Base#current_window_handle 您必须更改您的驱动程序以作为示例使用 javascript 驱动程序

before do   
  Capybara.page.current_window.resize_to(height, width)
end

scenario js: true do
  # your test here
end

【讨论】:

【参考方案5】:

@tirdadc 如果你正在使用 Poltergeist,你可以在你的 rails_helper.rb 文件中添加这样的内容:

Capybara.register_driver :poltergeist do |app|
  options = 
    # js_errors: true,
    # cookies: true,
    window_size: [320, 568] # iphone 5
  
  Capybara::Poltergeist::Driver.new(app, options)
end

【讨论】:

试过这个Capybara::Poltergeist::Driver.new(app, js_errors: false, window_size: [1280, 800]) 并且成功了。

以上是关于更改默认 Capybara 浏览器窗口大小的主要内容,如果未能解决你的问题,请参考以下文章

嵌入视频仅在更改浏览器窗口大小时出现

根据浏览器窗口大小更改 Django 模板循环行为

如何在 Protractor/WebdriverJS 中设置默认浏览器窗口大小

用 JavaScript 控制浏览器窗口大小?

如何更改分屏emacs窗口的大小?

怎么设置浏览器大小