Почему тест после reset session и перехода на страницу показывает залогиненного юзера (хотя таких степов не было)

capybara
headless
Теги: #<Tag:0x00007f7b69ed87d0> #<Tag:0x00007f7b69ed8640>

(Larisa) #1

Тесты написаны на Capybara и крутятся на Убунту, headless Chrome.

В spec_config :
config.append_after(:each) do |example|
Capybara.reset_sessions!
end

Сам тест тестирует правильность еррор месседжа при неправильном конфирмейшн пароле:
scenario ‘password_do_not_match’ do
visit ‘/resetpassword’
fill_in ‘Password’, with: ‘87654321’
fill_in ‘Password Confirmation’, with: ‘88654321’
click_button ‘Reset Password’
expect(page).to have_content ‘*Password does not match’
end

Проблема: тест падает с ошибкой “Failure/Error: fill_in ‘Password’, with: ‘87654321’
Capybara::ElementNotFound:
Unable to find visible field “Password” that is not disabled”
а в скриншоте хоум пейдж для логгед юзера

Тесты ранятся в рендомном порядке и когда перед ним тест, где юзер залогинился, то этот тест падает, что очень странно, так как после каждого теста срабатывает ресет сешнс.

Добавила
scenario ‘password_do_not_match’ do
puts page.driver.browser.manage.all_cookies
puts URI.parse(current_url).to_s
visit ‘/resetpassword’
puts URI.parse(current_url).to_s

получаю в логах
about:blank
https://…/resetpassword
Test name: Reset_pass password_do_not_match
F

то есть ресет срабатывает, появляется пустая страница, кукисов нет, переходит на нужную страницу, но там вместо формы ресета оказывается хоумпедж для логгед юзера.

Вопрос: Как определить в чём проблема?


(Vladislav Abramov) #2

то есть вкладка не закрывается? вы в браузере сессию может и закончили, но приложение само целевое вас не отпускает и не рисует страницу логина, потому что вы для него залогинены


(Larisa) #3

Вкладку не закрывала, а открывала пустую страницу, потом переходила на нужную мне.
Если предположить что это и есть причина, то как это можно исправить?


(Larisa) #4

Апдейт:
добавила
scenario ‘password_do_not_match’ do
puts page.driver.browser.manage.all_cookies
puts URI.parse(current_url).to_s
visit ‘/resetpassword’
puts page.driver.browser.manage.all_cookies
puts URI.parse(current_url).to_s
puts page.driver.browser.manage.all_cookies

результат:
перед заходом на visit ‘/resetpassword’ кукисов нет, а сразу после неё они появляются


(Larisa) #5

Проблема решена
Local storage (где сохранялись данные логгед юзера) оказвается не чистился.
В конфиг файл было добавлено
config.after(:each) do
Capybara.execute_script ‘localStorage.clear()’
end

Теперь тест срабатывает норм.


(Soleh Saidmuradov) #6

Можете делать в
after(:each) do
Capybara.current_session.driver.quit
end
Но, если у вас прикручены скриншоты от капибары они могут выполняться не корректно, поэтому мы в тестах добавили не в after хук а в before хук, первой командой


(Larisa) #7

В конечном итоге добавила в описании браузера - работает всё норм
Capybara::Selenium::Driver.new app,
browser: :chrome, clear_local_storage: true, clear_session_storage: true,
desired_capabilities: capabilities
end

Да, скриншоты прикручены.


(Soleh Saidmuradov) #8

Судя по релиз ноутам в селениуме теперь по дефолту стоит clear_local_storage: true