ラベルの付いた選択ボックスがあります。
_<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")
は選択要素を正常に返します。
これは予想される動作ですか?もしそうなら、無効な要素を見つけるにはどうすればよいですか?私の場合、無効になっているかどうかをテストするために必要です。
アンドレアスと この答え 私を最終的な解決への道に導いてください。 (HTML IDの代わりに)特定のラベルが付いた無効なフィールドを見つけるには、次の方法があります。
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]}")
そのフィールドが無効になっているかどうかの確認は、次の1つのステートメントで実行できます。
page.should have_css("##{label_field[:for]}[disabled]")
それでも、カピバラのような最高のソリューションではなく、回避策のように感じますが、機能します。
Capybara2.1.0はdisabled
フィルターをサポートします 。無効になっているフィールドを簡単に見つけることができます。
field_labeled("Slide orientation", disabled: true)
disabled
フィルターはデフォルトでオフになっているため、明示的に指定する必要があります。
これは、disabled属性がある場合に合格します。
js: true
およびpage.evaluate_script
で実行します。
it "check slider orientation", js: true do
disabled = page.evaluate_script("$('#slide_orientation').attr('disabled');")
disabled.should == 'disabled'
end
更新
または、have_css
を使用できます
page.should have_css("#slide_orientation[disabled]")
(盗まれたフォーム この優れた答え )
これに対する答えは古く、それ以来少し進んでいるので、ここに[〜#〜]更新[〜#〜]があります。
フィールドが無効になっているかどうかを確認したいだけの場合は、次のことができます。
expect(page).to have_field 'Slide orientation', disabled: true
このPRによると: https://github.com/teamcapybara/capybara/issues/982