32

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

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

per How to set Browser Window size in Rspec (Selenium) for specific RSpec testing,但是有没有办法在全局范围内做到这一点,以便每个受媒体查询影响的测试都不必定义这个?

4

5 回答 5

37

对所有 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
于 2014-11-17T17:01:11.217 回答
21

你可以在下面定义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
于 2013-08-22T22:23:07.063 回答
14

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

before do
  Capybara.page.current_window.resize_to(x, y)
end
于 2016-06-09T00:07:30.913 回答
7

对于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
于 2018-02-21T10:54:19.197 回答
2

@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
于 2017-09-26T23:01:07.680 回答