Capybara中page和page.body是啥意思

Posted

技术标签:

【中文标题】Capybara中page和page.body是啥意思【英文标题】:What's the meaning of page and page.body in CapybaraCapybara中page和page.body是什么意思 【发布时间】:2015-06-12 10:22:39 【问题描述】:

我是一个新手,尝试使用 Capybara 测试我的 Rails 项目,但是当我尝试从我的 div 中检测一些字符串时,我对 page 和 page.body 的含义感到困惑:(in :js=>true模式)

<div>"some content"</div>

我的一些测试将通过

page.should have_content "some content"

有些会通过

page.body.should have_content "some content"

我尝试放置内容,但只有“page.body”会给我一些有价值的信息,“page”本身什么也不会显示,而且我找不到任何关于 page 和 page.body 做了什么的可靠解释.谁能帮帮我?

【问题讨论】:

【参考方案1】:

page 是当前 Capybara 会话 - 调用 #find/#first/#visit/etc 与调用 page.find(...)、page.first(...) 等相同。

page.body 返回页面的 html 源代码。

大多数时候你不想在 page.body 上调用匹配器,所以 99.9% 的时间你应该使用

page.should have_content(...) 

或等效的期望语法。这是因为在 page.body 上调用匹配器实际上是通过解析器运行返回的字符串并对其进行查询,而不是在您正在测试的浏览器中进行查询。

【讨论】:

【参考方案2】:

我相信这种语法已被弃用,您应该改为:

expect(page).to have_content "some content"

这将检查您指定的内容呈现的页面。如果您不确定您是否正在呈现您期望的页面并且想要调试您的测试,您可以使用puts page.body 来执行此操作。

您可以了解更多关于应该和期待here。

【讨论】:

谢谢,我可以把“should”改成“expect..to”,但是我不知道page和page.body有什么区别。 它们的使用位置(参见答案中的示例)。在这两种情况下,都会检索完整的 HTML 页面。我意识到我的回答并不完全符合您的问题,但我觉得这是您真正需要的信息:)。

以上是关于Capybara中page和page.body是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

在 RSpec 请求规范中使用 Capybara 时设置自定义请求标头的最佳方法是啥?

如何在 Capybara 和 RSpec 中测试 CSV 文件下载?

Wagtail 页面中的字段权限

Capybara-Webkit CSS 支持

更改默认 Capybara 浏览器窗口大小

在单个语句中更改多个列[重复]