2013-03-13 3 views
15

Ich habe eine Auswahlbox, mit einem Label:ein behindertes Feld mit Capybara Finding

<label for="slide_orientation">Slide orientation</label> 
<select disabled="" class="property" id="slide_orientation" name="slide_orientation"> 
    <option value="horizontal">Horizontal</option> 
    <option value="vertical" selected="selected">Vertical</option> 
</select> 

Wie Sie das Auswahlfeld deaktiviert ist zu sehen. Wenn ich versuche, es mit field_labeled("Slide orientation") zu finden, gibt es eine Fehlermeldung:

Capybara::ElementNotFound: Unable to find field "Slide orientation" 
from /Users/pascal/.rvm/gems/ruby-1.9.3-p392/gems/capybara-2.0.2/lib/capybara/result.rb:22:in `find!' 

Wenn das Auswahlfeld nicht deaktiviert ist, field_labeled("Slide orientation") gerade fein das select-Element zurückgibt.

Ist das erwartete Verhalten? Und wenn ja, wie würde ich ein behindertes Element finden? In meinem Fall muss ich testen, ob es deaktiviert ist oder nicht.

+1

Die Situation ist das gleiche für Schaltflächen: http://stackoverflow.com/questions/12917227/how-do-i-write-a-capybara-assertion-that-checks-for-the-presence-of-a -button-and –

Antwort

2

Andreas und this answer setzte mich auf der Strecke bis zur endgültigen Lösung verwenden können. Die Suche nach einem deaktivierten Feld mit einem bestimmten Label (anstelle von HTML-id) auf diese Weise erreicht werden kann:

label_field = all("label").detect { |l| (l.text =~ /#{label}/i).present? } 
raise Exception.new("Couldn't find field '#{label}'") if label_field.nil? 
the_actual_field = first("##{label_field[:for]}") 

prüfen, ob das Feld mit einer Aussage gemacht werden kann deaktiviert ist:

page.should have_css("##{label_field[:for]}[disabled]") 

Es fühlt sich immer noch wie ein Workaround anstelle der besten Capybara-ähnlichen Lösung, aber es funktioniert!

+0

autsch, funktioniert leider nur für

9

Dieser wird bestanden, wenn er das deaktivierte Attribut hat.

Mit js: true und page.evaluate_script laufen.

it "check slider orientation", js: true do 
    disabled = page.evaluate_script("$('#slide_orientation').attr('disabled');") 
    disabled.should == 'disabled' 
end 

aktualisieren

oder Sie have_css

page.should have_css("#slide_orientation[disabled]") 

(gestohlen Form this excellent answer)

30

Capybara 2.1.0 supports disabled filter. Sie können damit leicht deaktivierte Felder finden.

field_labeled("Slide orientation", disabled: true) 

Sie müssen es explizit angeben, da die disabled Filter standardmäßig deaktiviert ist.