如何使用Capybara + Selenium测试响应代码

时间:2011-10-26 21:04:33

标签: ruby-on-rails selenium rspec capybara

我有以下规格:

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

end 

page.status_code行给了我这个错误:

Capybara::NotSupportedByDriverError

如何查看页面的状态代码?

6 个答案:

答案 0 :(得分:44)

暂且不说。这一行

page.status_code.should = '404'

应该是

page.status_code.should == 404

这对我来说适用于capybara-webkit。

答案 1 :(得分:18)

Selenium驱动程序目前不支持

status_code。您需要编写不同的测试来检查响应状态代码。

答案 2 :(得分:3)

切换到该测试的另一个驱动程序(如rack-test),或者测试显示的页面是否为404页面(在h1中应该包含“Not Found”内容)。

正如@eugen所说,Selenium不支持状态码。

答案 3 :(得分:3)

Selenium web驱动程序没有实现status_code,也没有直接的方法来测试使用selenium的response_code(开发人员的选择)。

为了测试它,我在layout / 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

答案 4 :(得分:2)

试一试

expect(page).to have_http_status(200)

答案 5 :(得分:1)

使用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了解详情