2013-03-13 3 views
15

У меня есть поле выбора, с меткой:Нахождение отключенного поля с Капибара

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

Как вы можете видеть окно выбора отключен. Когда я пытаюсь найти его с field_labeled("Slide orientation"), он возвращает ошибку:

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

Когда выберите поле не отключается, field_labeled("Slide orientation") возвращает выберите элемент просто отлично.

Ожидается ли такое поведение? И если да, то как я могу найти отключенный элемент? В моем случае мне нужно его проверить, отключено или нет.

+1

Ситуация такая же для кнопок: http://stackoverflow.com/questions/12917227/how-do-i-write-a-capybara-assertion-that-checks-for-the-presence-of-a -button- и –

ответ

2

Andreas и this answer поставить меня на пути к окончательному решению. Нахождение отключенного поля с определенным ярлыком (вместо HTML идентификатор) может быть достигнуто таким образом:

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

Проверка, если это поле отключено может быть сделано с помощью одного оператора:

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

Он по-прежнему чувствует себя как обходное решение вместо лучшего решения Capybara, но оно работает!

+0

ouch, к сожалению, работает только для структур

9

Это проходит, если у него есть отключенный атрибут.

Пробег с js: true и page.evaluate_script.

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

Update

или вы можете использовать have_css

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

(украденные формы this excellent answer)

30

Capybara 2.1.0 supports disabled filter. Вы можете легко найти отключенные поля.

field_labeled("Slide orientation", disabled: true) 

Вы должны указать его в явном виде, поскольку disabled фильтр отключен по умолчанию.

Смежные вопросы