2012-04-22 10 views
8

ich benutze capybara anstelle von webrat in schienen. Ich habe Capybara installiert und benutze gem 'Capybara' in Gemfile. wenn icherwartet css "titel" mit text in capybara

page.should have_selector("title", :text => "anything title") 

verwenden ist es ein Fehler

Failure/Error: page.should have_selector("title", :text => "anything title") 
expected css "title" with text "anything title" to return something 

Testdatei, wie unten geben:

require 'spec_helper' 

describe "Test pages" do 
    describe "Home page" do  
    it "should have the content 'Demo App'" do 
    visit '/test_pages/home'  
    page.should have_selector("title", :text => "anything title")    
    end 
end 
end 
+1

Haben Sie 'save_and_open_page' direkt vor Ihrer Testbehauptung versucht, um zu sehen, was Capybara denkt, dass es sieht? – nmott

Antwort

12

nicht sicher, welche Version von Edelsteinen Sie verwenden, aber ich lief in ein ähnliches Beispiel wo verwendet: Text fehlgeschlagen, aber wenn ich verwendet: Inhalt hat es den Test bestanden. Ich benutze Schienen 3.2.3, rspec-Schienen 2.9.0, Capybara 1.1.2 und therubyracer Edelsteine ​​auf Ubuntu Lucid Lynx.

Versuchen ersetzt

page.should have_selector("title", :text => "anything title") 

mit

page.should have_selector("title", :content => "anything title") 
+0

Hey! Ich benutze gem 'rails', '3.2.3', gem 'rspec-rails', '2.9.0', sowie gem 'capybara', '1.1.2' unter Ubuntu und auch Windows. Ich habe verwendet: Inhalt und es funktioniert gut! Vielen Dank. – vajapravin

+0

Froh, dass es funktionierte, aber ich habe seitdem bekommen: Text zu arbeiten und nach der Dokumentation mit: Text ist der richtige Weg, dies zu tun. Ich hatte einen Geist in der Maschine, da ich das Problem nicht neu erstellen kann. Siehe [rubydoc: Capybara :: RSpecMatchers # have_selector] (http://rubydoc.info/github/jnicklas/capybara/Capybara/RSpecMatchers#have_selector-instance_method) – rbnewb

+0

Ich habe das gleiche Problem. Aus irgendeinem Grund funktioniert ': content' nur für das Titelelement, aber': text' ist nicht ... so komisch. –

1

Ich habe ein ähnliches Problem, nur damit Sie wissen, ist die Verwendung von: Inhalt wird nicht in Capybara unterstützt, sollte es sein: Text.

Das Problem mit: Inhalt ist, dass es von Capybara nicht erkannt wird und dann ignoriert und als BESTANDEN angezeigt wird, aber das ist ein falsches Verhalten.

Also, wenn Sie Capybara verwenden, wechseln Sie alle: Inhalt zu: Text, um zu sehen, ob der Test wirklich besteht, vielleicht gibt es Fehler nicht bemerkt.

4

Das Problem hier ist, dass Browser die <title> Tags als unsichtbar behandeln. (Danke DreadPirateShawn für die Verknüpfung mit der issue zu diesem Thema).

Es gibt keine ‚saubere‘ Weg, um den Titel zu bekommen, aber mit ein bisschen wie ein Hack können Sie immer noch den Titel des Wert testen, indem Sie folgendermaßen vorgehen:

first('head title').native.text.should == "WhateverYourTitleNeedsToBe" 

nicht das :content Symbol Verwenden Sie da bei älteren Versionen von Capybara-ungültigen Tags würden ignoriert und es würde erscheinen, als ob Ihr Test bestanden hat. Die neuere Version gibt Ihnen eine nette Fehlermeldung wie:

ArgumentError: invalid keys :content, should be one of :text, :visible, :between, :count, :maximum, :minimum

+0

Ich glaube das ist der sauberste Weg Um den Titel zu bekommen, benutzen Sie xpath. Wie folgt: 'page.find: xpath, '// title', visible: false' – etagwerker

0

Ich stieß auf die gleichen Probleme. Empirisch ist die folgende, was ich gefunden:

page.should have_selector("title", :text => "AnyTitle") 

erwarten, dass Ihre HTML-Ausgabe, wie unten um einen Tag enthalten:

<title text="AnyTitle"/> 

jedoch, wenn Sie verwenden: Inhalte statt: Der Text ist wie unter

page.should have_selector("title", :content => "AnyTitle") 

dann wird es Ihre hTML-Ausgabe erwartet einen Tag enthält, wie unten

<title>AnyTitle</title> 

Wenn das resultierende HTML-Rendering <title text="AnyTitle"/> Tag enthält, sollten Sie Folgendes verwenden: text Wenn das resultierende HTML-Rendering <title>AnyTitle</title> Tag enthält, können Sie stattdessen stattdessen content verwenden.

P.S. mein Gem Umgebungen: Capybara-2.0.2, Schienen-3.2.12, rspec-Schienen-2.12.2, webrat-0.7.3 wenn entfernen webrat, dann ist das ": conetnt" Schlüsselwort wird von Capybara unerkannt allein.

Aber die saubere Art und Weise, es zu beheben ist: von webrat loszuwerden und eine stabile Capybara-1.1.2 installieren, das heißt in der Gemfile

#gem webrat 
gem 'capybara', '1.1.2' 

finden Sie in prusswan's answer