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

发布于 2024-12-12 00:21:38 字数 255 浏览 0 评论 0原文

我有以下规范:

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

end 

page.status_code 行给我这个错误:

Capybara::NotSupportedByDriverError

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

I have the following spec:

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

end 

The page.status_code line is giving me this error:

Capybara::NotSupportedByDriverError

How do I check the page's status code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

夜还是长夜 2024-12-19 00:21:38

作为旁白。这行

page.status_code.should = '404'

应该是

page.status_code.should == 404

这对我来说与 capybara-webkit 一起工作。

As an aside. This line

page.status_code.should = '404'

Should be

page.status_code.should == 404

This worked for me with capybara-webkit.

你在看孤独的风景 2024-12-19 00:21:38

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

status_code is not currently supported by the Selenium driver. You will need to write a different test to check the response status code.

白云不回头 2024-12-19 00:21:38

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

Selenium web driver doest not implement status_code and there is no direct way to test response_code with selenium (developer's choice).

To test it I added in my layout/application.html.erb:

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

And then in my test:

def no_error?
  response_code = page.first('html')[:code]
  assert (response_code == '200'), "Response code should be 200 : got #{response_code}"
end
橘亓 2024-12-19 00:21:38

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

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

Either switch to another driver (like rack-test) for that test, or test that the displayed page is the 404 page (should have content 'Not Found' in h1).

As @eugen said, Selenium doesn't support status codes.

第几種人 2024-12-19 00:21:38

尝试一下

expect(page).to have_http_status(200)

Try it out

expect(page).to have_http_status(200)
久隐师 2024-12-19 00:21:38

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

Use js to make a request and get status as below:

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

Check https://gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db for more details

前事休说 2024-12-19 00:21:38
expect(page).to have_http_status(:ok)

Ajay回答,如果您更喜欢状态符号而不是代码值,以提高可读性。

参考文献:

对于所有可用的状态代码/符号:

Rack::Utils::SYMBOL_TO_STATUS_CODE
       # or 
Rack::Utils::HTTP_STATUS_CODES
expect(page).to have_http_status(:ok)

is an acceptable variation to Ajay's answer, if you prefer the status symbol over the code value, for readability.

References:

For all available status codes / symbols:

Rack::Utils::SYMBOL_TO_STATUS_CODE
       # or 
Rack::Utils::HTTP_STATUS_CODES
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文