Подтвердить что ты не робот

Как проверить код ответа с Capybara + Selenium

У меня есть следующая спецификация:

it "deletes post", :js => true do 
...
...
page.status_code.should = '404'

end 

Линия page.status_code дает мне эту ошибку:

Capybara::NotSupportedByDriverError

Как проверить код состояния страницы?

4b9b3361

Ответ 1

status_code в настоящее время не поддерживается драйвером Selenium. Вам нужно будет написать другой тест, чтобы проверить код состояния ответа.

Ответ 2

В стороне. Эта строка

page.status_code.should = '404'

Должно быть

page.status_code.should == 404

Это работало для меня с capybara-webkit.

Ответ 3

Либо переключитесь на другой драйвер (например, rack-test) для этого теста, либо проверьте, что отображаемая страница - это страница 404 (в h1 должна быть содержимое "Не найдено" ).

Как сказал @eugen, Selenium не поддерживает коды статуса.

Ответ 4

Попробуйте

expect(page).to have_http_status(200)

Ответ 5

Selenium web driver doest не реализует status_code, и нет прямого способа протестировать response_code с селеном (выбор разработчика).

Чтобы проверить это, я добавил в свой макет /application.html.erb:

<html code="<%= response.try(:code) if defined?(response) %>">[...]</html>

И затем в моем тесте:

def no_error?
  response_code = page.first('html')[:code]
  assert (response_code == '200'), "Response code should be 200 : got #{response_code}"
end

Ответ 6

Используйте js для запроса и получения статуса, как показано ниже:

js_script = <<JSS
xhr = new XMLHttpRequest();
xhr.open('GET', '#{src}', true);
xhr.send();
JSS
actual.execute_script(js_script)
status = actual.evaluate_script('xhr.status') # get js variable value

Подробнее о https://gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db