Capybara:如何测试页面的标题?
在使用 Steak、Capybara 和 RSpec 的 Rails 3 应用程序中,如何测试页面的标题?
In a Rails 3 application using Steak, Capybara and RSpec how do I test the page's title?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
从水豚2.1.0版本开始,会话中有处理标题的方法。
因此
,您可以测试标题,例如:
根据 github.com/jnicklas/capybara/issues/863 以下内容也适用于水豚 2.0:
Since the version 2.1.0 of capybara there are methods on the session to deal with the title.
You have
So you can test the title like:
According to github.com/jnicklas/capybara/issues/863 the following is also working with capybara 2.0:
您应该能够搜索
title
元素以确保它包含您想要的文本:You should be able to search for the
title
element to make sure it contains the text you want:这适用于 Rails 3.1.10、Capybara 2.0.2 和 Rspec 2.12,并允许匹配部分内容:
This works under Rails 3.1.10, Capybara 2.0.2 and Rspec 2.12, and allows matching partial contents:
我将其添加到我的规范助手中:
然后我可以使用:
I added this to my spec helper:
Then I can just use:
为了使用 Rspec 和 Capybara 2.1 测试页面标题,您可以使用
expect(page).to have_title 'Title text'
另一个选项是
expect(page).to have_css 'title', text: '标题文本',可见: false
从 Capybara 2.1 开始,默认值为
Capybara.ignore_hidden_elements = true
,并且由于 title 元素不可见,您需要使用选项visible: false
来进行搜索以包含不可见的页面元素。In order to test for the title of a page with Rspec and Capybara 2.1 you could use
expect(page).to have_title 'Title text'
another option is
expect(page).to have_css 'title', text: 'Title text', visible: false
Since Capybara 2.1 the default is
Capybara.ignore_hidden_elements = true
, and because the title element is invisible you need the optionvisible: false
for the search to include non visible page elements.使用 RSpec 可以更轻松地测试每个页面的标题。
Testing the Title of each page can be done in a much easier way with RSpec.
您只需将
subject
设置为page
,然后编写对该页面的title
方法的期望:在上下文中:
You just need to set the
subject
topage
and then write an expectation for the page'stitle
method:In context:
<代码>
it { should have_selector "title", text: full_title("这里是你的标题") }
it { should have_selector "title", text: full_title("Your title here") }