Capybara: Wie teste ich den Titel einer Seite?


Antworten:


102

Seit der Version 2.1.0 von Capybara gibt es in der Sitzung Methoden, um mit dem Titel umzugehen. Du hast

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

So können Sie den Titel wie folgt testen:

expect(page).to have_title "my_title"

Laut github.com/jnicklas/capybara/issues/863 funktioniert Folgendes auch mit Capybara 2.0 :

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

14

Dies funktioniert unter Rails 3.1.10, Capybara 2.0.2 und Rspec 2.12 und ermöglicht den Abgleich von Teilinhalten:

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

1
Vielen Dank! Ich habe dies tatsächlich verwendet, um Capybara zu patchen, siehe meine Antwort unten.
— Jake

13

Sie sollten in der Lage sein, nach dem titleElement zu suchen , um sicherzustellen, dass es den gewünschten Text enthält:

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

Ich erhalte einen Fehler / Fehler: page.should have_xpath ("// title", "home") falsche Anzahl von Argumenten (3 für 2)
— Nerian

Und der Code lautet: Szenario "Der Benutzer ist angemeldet und kann seine Homepage sehen" besuchen Sie die Seite ('/'). Sollte have_xpath ("// title", "home") enden
— Nerian

Hoppla, ich habe vergessen, dass der zweite Parameter ein Hash sein soll ... Überprüfen Sie meine überarbeitete Antwort.
— Dylan Markow

Ich wollte das nicht wirklich als Antwort posten, obwohl ich denke, dass es sein könnte (ich weiß, dass es nicht sehr rubinrot ist). page.should have_content('<title>Your Title</title>')
— Tass

8
Dieser Code funktioniert nicht mehr mit Capybara 2: github.com/jnicklas/capybara/issues/863
— Mic92

3

Ich habe dies meinem Spezifikationshelfer hinzugefügt:

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

Dann kann ich einfach verwenden:

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

Das ist eine schöne Ergänzung zum Spezifikationshelfer!
— jpw

2

Das Testen des Titels jeder Seite kann mit RSpec viel einfacher durchgeführt werden.

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
Das ist einfacher als page.should have_xpath ("// title" ,: text => "My Title")?
— Mike Blyth

1
Das Rendern von Ansichten in Controller-Tests ist nicht meine Sache. Ich stimme für die Verwendung von Integrationstests (und Capybara) zur Überprüfung des Pastetentitels.
— Grimmo

2
Capybara 2 akzeptiert nur: Text nicht: Inhalt als Parameter. Der Inhalt eines Titel-Tags kann nicht mit der neuesten Capybara überprüft werden: github.com/jnicklas/capybara/issues/863
— Mic92

2

Um den Titel einer Seite mit Rspec und Capybara 2.1 zu testen, können Sie verwenden

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

    Eine andere Option ist

  2. expect(page).to have_css 'title', text: 'Title text', visible: false
    Seit Capybara 2.1 ist die Standardeinstellung Capybara.ignore_hidden_elements = trueund da das Titelelement unsichtbar ist, benötigen Sie die Option visible: falsefür die Suche, um nicht sichtbare Seitenelemente einzuschließen.


0

Sie müssen nur die festlegen , subjectum pagedann für die Seite eine Erwartung schreiben titleMethode:

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

Im Zusammenhang:

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

-1

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.