ruby on rails bindings Wie man den Antwortcode mit Capybara+Selenium prüft




capybara selenium headless (5)

Ich habe folgende Spezifikation:

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

end 

Die page.status_code Zeile gibt mir diesen Fehler:

Capybara::NotSupportedByDriverError

Wie überprüfe ich den Statuscode der Seite?


Answer #1

status_code wird derzeit vom Selenium-Treiber nicht unterstützt. Sie müssen einen anderen Test schreiben, um den Antwortstatuscode zu überprüfen.


Answer #2

Versuch es

expect(page).to have_http_status(200)

Answer #3

Verwenden Sie js, um eine Anfrage zu stellen und den Status wie folgt zu erhalten:

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

Weitere Informationen finden Sie unter https://gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db


Answer #4

Nebenbei. Diese Linie

page.status_code.should = '404'

Sollte sein

page.status_code.should == 404

Dies funktionierte für mich mit Capybara-Webkit.


Answer #5

Selenium-Webtreiber implementieren status_code nicht und es gibt keine direkte Möglichkeit, response_code mit Selenium zu testen (Entscheidung des Entwicklers).

Um es zu testen, habe ich in meinem Layout / application.html.erb hinzugefügt:

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

Und dann in meinem Test:

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




capybara