题 Capybara:如何测试页面的标题?


在使用Steak,Capybara和RSpec的Rails 3应用程序中,如何测试页面标题?


66
2018-02-26 20:06


起源




答案:


自版本 2.1.0 水豚的会议方法有处理标题的方法。 你有

page.title
page.has_title? "my title"
page.has_no_title? "my not found title"

所以你可以测试标题:

expect(page).to have_title "my_title"

根据 github.com/jnicklas/capybara/issues/863 以下也与水豚合作 2.0

expect(first('title').native.text).to eq "my title"

98
2018-01-03 13:24





这适用于Rails 3.1.10,Capybara 2.0.2和Rspec 2.12,并允许匹配部分内容:

find('title').native.text.should have_content("Status of your account::")

14
2018-02-06 20:14



谢谢!我实际上用它来修补Capybara,请参阅下面的答案。 - Jake


你应该能够搜索到 title 元素,以确保它包含您想要的文本:

page.should have_xpath("//title", :text => "My Title")

13
2018-02-26 20:27



我得到一个失败/错误:page.should have_xpath(“// title”,“home”)错误的参数数量(3为2) - Nerian
代码是:场景“用户已登录并可以看到他的主页”请访问('/')page.should have_xpath(“// title”,“home”)结束 - Nerian
哎呀,忘了第二个参数应该是哈希...检查我的修改后的答案。 - Dylan Markow
有用!谢谢 :) - Nerian
这个代码不再适用于水豚2: github.com/jnicklas/capybara/issues/863 - Mic92


我把它添加到我的规范助手:

class Capybara::Session
  def must_have_title(title="")
    find('title').native.text.must_have_content(title)
  end
end

然后我可以使用:

it 'should have the right title' do
  page.must_have_title('Expected Title')
end

3
2018-02-28 21:50



这是规范助手的一个很好的补充! - jpwynn


使用RSpec可以更轻松地测试每个页面的标题。

require 'spec_helper'

describe PagesController do
  render_views

  describe "GET 'home'" do
    before(:each) do
      get 'home'
      @base_title = "Ruby on Rails"
    end

    it "should have the correct title " do
      response.should have_selector("title",
                                :content => @base_title + " | Home")
    end
  end
end

2
2018-02-26 21:44



这比page.should have_xpath(“// title”,:text =>“My Title”)更容易? - Mike Blyth
控制器测试中的渲染视图不是我的一杯茶。我投票赞成使用集成测试(和capybara)进行头衔验证。 - Grimmo
capybara 2,只接受:文字不:内容作为参数。使用最新的水豚无法检查标题标签的内容: github.com/jnicklas/capybara/issues/863 - Mic92


为了测试使用Rspec和Capybara 2.1的页面标题,您可以使用

  1. expect(page).to have_title 'Title text'

    另一种选择是

  2. expect(page).to have_css 'title', text: 'Title text', visible: false
    由于Capybara 2.1的默认值是 Capybara.ignore_hidden_elements = true,因为title元素是不可见的,你需要选项 visible: false 搜索包括不可见的页面元素。


2
2017-09-15 13:40





你只需要设置 subject 至 page 然后写一个页面的期望 title 方法:

subject{ page }
its(:title){ should eq 'welcome to my website!' }

在上下文中:

require 'spec_helper'

describe 'static welcome pages' do
  subject { page }

  describe 'visit /welcome' do
    before { visit '/welcome' } 

    its(:title){ should eq 'welcome to my website!'}
  end
end

0
2018-02-21 19:31





it { should have_selector "title", text: full_title("Your title here") }


-1
2018-03-17 01:22