20

ラベル付きの選択ボックスがあります:

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

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

4

4 に答える 4

37

Capybara 2.1.0 はdisabledfilterをサポートしています。無効なフィールドを簡単に見つけることができます。

field_labeled("Slide orientation", disabled: true)

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

于 2013-09-03T01:42:35.070 に答える
11

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

(この優れた回答から盗まれた)

于 2013-03-13T23:22:33.867 に答える
6

これに対する答えは古く、物事はそれ以来少し進んでいるので、ここにUPDATEがあります。

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

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

この PR に従って: https://github.com/teamcapybara/capybara/issues/982

于 2018-07-20T13:55:26.057 に答える
3

アンドレアスとこの回答により、私は最終的な解決策への道を歩み始めました。特定のラベル (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]") 

最高のカピバラのような解決策ではなく、回避策のように感じますが、うまくいきます!

于 2013-03-14T15:14:58.907 に答える