Capybara: How to test the title of a page?

前端 未结 8 1599
一向
一向 2020-12-08 12:41

In a Rails 3 application using Steak, Capybara and RSpec how do I test the page\'s title?

相关标签:
8条回答
  • 2020-12-08 13:15

    I added this to my spec helper:

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

    Then I can just use:

    it 'should have the right title' do
      page.must_have_title('Expected Title')
    end
    
    0 讨论(0)
  • 2020-12-08 13:20

    In order to test for the title of a page with Rspec and Capybara 2.1 you could use

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

      another option is

    2. 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 option visible: false for the search to include non visible page elements.

    0 讨论(0)
  • 2020-12-08 13:24

    You just need to set the subject to page and then write an expectation for the page's title method:

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

    In context:

    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 讨论(0)
  • 2020-12-08 13:24

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

    0 讨论(0)
  • 2020-12-08 13:26

    Since the version 2.1.0 of capybara there are methods on the session to deal with the title. You have

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

    So you can test the title like:

    expect(page).to have_title "my_title"
    

    According to github.com/jnicklas/capybara/issues/863 the following is also working with capybara 2.0:

    expect(first('title').native.text).to eq "my title"
    
    0 讨论(0)
  • 2020-12-08 13:28

    This works under Rails 3.1.10, Capybara 2.0.2 and Rspec 2.12, and allows matching partial contents:

    find('title').native.text.should have_content("Status of your account::")
    
    0 讨论(0)
提交回复
热议问题