如何使用 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 #<Capybara::Session:0x00007fabb8a439e8> 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 拖放