2013-03-13 17 views
15

ho una casella di selezione, con un'etichetta:Trovare un campo disabile con Capybara

<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> 

Come si può vedere la casella di selezione è disabilitata. Quando cerco di trovare con field_labeled("Slide orientation"), restituisce un errore:

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!' 

Quando la casella di selezione non è disattivato, field_labeled("Slide orientation") restituisce l'elemento di selezione più che bene.

È questo comportamento previsto? E se sì, come potrei fare per trovare un elemento disabilitato? Nel mio caso ho bisogno di testare se è disabilitato o no.

+1

La situazione è la stessa per i pulsanti: http://stackoverflow.com/questions/12917227/how-do-i-write-a-capybara-assertion-that-checks-for-the-presence-of-a -button-e –

risposta

2

Andreas e this answer mi ha messo in pista per la soluzione finale. Trovare un campo disabile con una certa etichetta (invece di HTML id) può essere raggiunto in questo modo:

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]}") 

Verificando che il campo è disabilitato può essere fatto con una dichiarazione:

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

si sente ancora come soluzione alternativa invece della migliore soluzione simile a Capybara, ma funziona!

+0

ahi, sfortunatamente funziona solo per

9

Questo passa se ha l'attributo disabilitato.

Eseguire con js: true e page.evaluate_script.

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

Aggiornamento

oppure è possibile utilizzare have_css

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

(forma rubato this excellent answer)

30

Capybara 2.1.0 supports disabled filter. Puoi facilmente trovare campi disabilitati con esso.

field_labeled("Slide orientation", disabled: true) 

è necessario specificare in modo esplicito perché il filtro disabled è disattivata per impostazione predefinita.

Problemi correlati