2013-08-22 5 views
24

Таким образом, по отношению к интеграционному тестированию с использованием Capybara и RSpec, я знаю, что могу это сделать:Изменить размер по умолчанию Капибара окно браузера

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

на How to set Browser Window size in Rspec (Selenium) для конкретных испытаний RSpec, но есть способ сделать это глобально, так что каждый тест, на который влияют медиа-запросы, не должен определять это?

ответ

12

Вы можете определить, что под 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 
+0

Тогда мне нужно сделать это в каждом файле спецификации правильно? Как это сделать для * всего *? – CDub

+1

Вы можете использовать RSpec.configure для включения или расширения модулей в своих примерах, а затем разместить перед: all /: каждый в модуле, который вы включаете/расширяете: https://www.relishapp.com/rspec/rspec-core/docs/helper-methods/define-helper-methods-in-a-module –

+0

@CDub см. мой ответ. Выше это тоже не работало для меня –

34

Правильный способ сделать это для всех Js тестов, чтобы добавить следующие внутри spec_helper.rbRSpec.configure блока

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

, чтобы развернуть окно. Перейдите на resize_to(x,y), чтобы установить любой размер окна.

EDIT: Если вам случится использовать полтергейст правильный способ сделать это

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

Это не похоже на Capybara и Poltergeist: 'undefined method 'manage' для # ' – tirdadc

+0

Эй, @tirdadc какая версия вы используете? –

+0

ОК, я вижу, что для Полтергейста не обойтись, но есть способ изменить размер, обновив ответ! –

8

Возможно, в связи с недавним изменением Капибара, что сработало для меня было:

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

Это единственное, что делает хоть что-то в настоящее время, но я получаю ошибку Capybara :: NotSupportedByDriverError. Я попробовал как poltergeist, так и webkit. Я запускаю Ubuntu 16.04, у кого есть идея, что не так? – Aurimas

+0

@Aurimas Вы можете попробовать изменить свой драйвер, попробуйте использовать 'js: true' в вашей спецификации – ilgam

0

@tirdadc, если вы используете Полтергейст, вы можете добавить что-то вроде этого в ваш файл 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 
2

Для тестового выполнения в 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 

Если вы получаете водосвинку :: NotSupportedByDriverError: Capybara :: Водитель :: Base # current_window_handle ВЫ ДОЛЖНЫ ИЗМЕНИТЬ ВАШ ДРАЙВЕР ДЛЯ ПРИМЕРА ИСПОЛЬЗОВАНИЯ JAVASCRIPT DRIVER!

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

scenario js: true do 
    # your test here 
end 
Смежные вопросы