Имитировать закрытие/повторное открытие браузера в огурцах/капибаре?

Я пишу тесты огурца, чтобы проверить функциональность типа "Запомнить меня", и для этого в реальной жизни пользователь закроет свой браузер, снова откроет браузер и вернется на сайт.

Мой тест до сих пор выглядит следующим образом:

Scenario: 'Remember me' checked
  Given I have checked "Remember me"
  And I am logged in as "[email protected]"
  When I close and re-open my browser
  And I come back to the dashboard
  Then I should be on the dashboard

Однако я не знаю, что заполнить для параметра "Когда я закрываю и снова открываю определение браузера".

Кто-нибудь знает, как я буду это делать (или если это не то, что я должен делать, как я должен его тестировать?)

Ответ 1

Я использую Покажи мне файлы cookie.

Добавьте в пакет с gem 'show_me_the_cookies', а затем добавьте World(ShowMeTheCookies) в свой features/support/env.rb

Затем просто определите шаг:

When /^I reopen the browser$/ do
  expire_cookies
  visit [ current_path, page.driver.request.env['QUERY_STRING'] ].reject(&:blank?).join('?')
end

Ответ 3

Вы можете просто удалить файлы cookie.

When /^I clear cookies$/ do
  browser = Capybara.current_session.driver.browser
  browser.manage.delete_all_cookies
end

Ответ 5

Я пытался проверить одно и то же, заработал вот так:

When(/^I close and reopen the browser$/) do
  # Get cookies we want to keep
  remember_me_cookie = page.driver.browser.manage.cookie_named('remember_user_token')

  # Close the window and delete the cookies
  page.driver.quit

  # Reopen the window
  page.driver.switch_to_window(page.driver.current_window_handle)

  # Go to our domain and add our cookies back in
  visit('/') 
  remember_me_cookie.nil? ? @current_user = nil : page.driver.browser.manage.add_cookie(remember_me_cookie) 

  # Refresh the domain to activate the cookies
  visit('/') 
end

Несколько вещей:

  • page.driver.quit удаляет файлы cookie, вот почему я делаю танец с файлами cookie.
  • Я попытался закрыть окно с помощью page.driver.close_window(page.driver.current_window_handle), а затем вернуться к нему с помощью page.driver.switch_to_window(handle), но это не сработало
  • Я попытался закрыть окно с помощью page.driver.close_window(page.driver.current_window_handle), а затем перейти в новое окно page.driver.switch_to_window(page.driver.open_new_window), но это не сработало

Мне кажется, что я действительно не понимаю, как отношения browser/window работают в Capybara. Также похоже, что копирование файлов cookie - это обман моего теста интеграции. Надеюсь, в будущих версиях есть лучший способ достичь этого.