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

Posted

技术标签:

【中文标题】如何使用 Capybara + Selenium 测试响应代码【英文标题】:How to test the response code with Capybara + Selenium 【发布时间】:2011-12-16 01:43:54 【问题描述】:

我有以下规格:

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

end 

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

Capybara::NotSupportedByDriverError

如何查看页面的状态码?

【问题讨论】:

相关:groups.google.com/forum/?fromgroups=#!topic/ruby-capybara/… How to get HTTP Response Code using Selenium WebDriver with Java?的可能重复 【参考方案1】:

Selenium 驱动程序当前不支持status_code。您将需要编写不同的测试来检查响应状态代码。

【讨论】:

【参考方案2】:

要么切换到另一个驱动程序(如rack-test)进行该测试,要么测试显示的页面是 404 页面(应该在 h1 中包含内容“未找到”)。

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

【讨论】:

【参考方案3】:

顺便说一句。这一行

page.status_code.should = '404'

应该是

page.status_code.should == 404

这对 capybara-webkit 很有效。

【讨论】:

另一个 capybara-webkit 用户在这里,但 expect(page.status_code).to be(200) 返回 Capybara::NotSupportedByDriverError。你知道为什么吗?【参考方案4】:

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

【讨论】:

【参考方案5】:

试试看

expect(page).to have_http_status(200)

【讨论】:

嗨,阿杰;您的代码可能是正确的,但在某些上下文中它会做出更好的答案;例如,您可以解释这个提议的更改如何以及为什么会解决提问者的问题,可能包括指向相关文档的链接。这将使它对他们更有用,对正在寻找类似问题的解决方案的其他网站读者也更有用。 我收到expected #&lt;Capybara::Session:0x00007fabb8a439e8&gt; to respond to 'has_http_status?' (RSpec::Expectations::ExpectationNotMetError) 注意:这不是Capybara提供的,而是RSpec提供的。 relishapp.com/rspec/rspec-rails/docs/matchers/…【参考方案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了解更多详情

【讨论】:

以上是关于如何使用 Capybara + Selenium 测试响应代码的主要内容,如果未能解决你的问题,请参考以下文章

Cucumber + Capybara + Selenium:选择文本

在 Rails 中使用 Capybara 和 Selenium 测试 Google 地图标记

配置 Capybara + Selenium 以通过 SSL 进行测试

使用 selenium ruby​​ capybara 拖放

Cucumber, capybara and selenium - 无需按钮即可提交表单

存根谷歌地方调用 selenium v​​s capybara-webkit