web-dev-qa-db-ja.com

カピバラで無効なフィールドを見つける

ラベルの付いた選択ボックスがあります。

_<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")は選択要素を正常に返します。

これは予想される動作ですか?もしそうなら、無効な要素を見つけるにはどうすればよいですか?私の場合、無効になっているかどうかをテストするために必要です。

19

アンドレアスと この答え 私を最終的な解決への道に導いてください。 (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]") 

それでも、カピバラのような最高のソリューションではなく、回避策のように感じますが、機能します。

2

Capybara2.1.0はdisabledフィルターをサポートします 。無効になっているフィールドを簡単に見つけることができます。

field_labeled("Slide orientation", disabled: true)

disabledフィルターはデフォルトでオフになっているため、明示的に指定する必要があります。

33
Shuhei Kagawa

これは、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]") 

(盗まれたフォーム この優れた答え

10

これに対する答えは古く、それ以来少し進んでいるので、ここに[〜#〜]更新[〜#〜]があります。

フィールドが無効になっているかどうかを確認したいだけの場合は、次のことができます。

expect(page).to have_field 'Slide orientation', disabled: true

このPRによると: https://github.com/teamcapybara/capybara/issues/982

2
rmaspero