2016-03-23 6 views
1

を使用してオプションを選択し、私は(以下、このコードをラップ「国」のIDを持つDIVがある)、HTML文書を持っており、その中で私がする必要があるの検証 -RSpecの+カピバラ:XPathの

  1. を選択項目のオプションを検証します。私はこれを試みたが、これは有効ではない。

    期待(ページ).TO have_xpath(( '// * // SELECT [ID = "国" @]')[1]、 :オプション=> [ '米国CAN GERのPOL'])

  2. 検証セレクト第二は、POLが最初に選択して選択されていることを

  3. 検証を選択するには、最初に無効になっているCAN

  4. 検証無効であること

  5. 変更最初

      <li> 
          <fieldset> 
          <select> 
           <option value="US">USA</option> 
           <option value="CAN" disabled>Canada</option> 
           <option value="GER">Germany</option> 
           <option value="POL" selected>Poland</option> 
          </select> 
          <fieldset> 
      <li> 
      <li> 
          <fieldset> 
          <select disabled> 
           <option value="US">USA</option> 
           <option value="CAN">Canada</option> 
           <option value="GER">Germany</option> 
           <option value="POL">Poland</option> 
          </select> 
          <fieldset> 
      <li> 
      

を選択におけるGERに選択されたオプション私はあなたが提供することができます任意の助けに感謝。ありがとう!

答えて

1

警告の単語、私は個人的にはまだrspecのためにshould構文を使用していますが、私はCSSセレクタとxpathを併用しています。私はそれらを読みやすくするだけです。

(1)あなたが他から1つを識別する任意の特定のIDやクラス名なしで2つのドロップダウンを持っているので、私はあなたの期待のコンテキストを制限するallを使用する

all('#countries select')[0].should have_text('USA Canada Germany Poland')

(2)同じ概念上記のように、スコープを制限します。 2番目のフィールドセットには無効なドロップダウンが含まれている必要があります。

all('#countries fieldset')[1].should have_css('select[disabled]')

(3)all('#countries select')[0].should have_css('option[disabled]', :text => 'Canada')

(4)#3としてではなく、別の属性とテキストと同じ答え

(5)all('#countries select')[0].find('option', :text => 'Germany').click

+1

あなたは天の恵みフィルです!ありがとう、私はこのもので数時間頭を壊している。 –

+0

選択肢(ID、名前、ラベル)などに何らかの識別子があった場合、これはすばらしい答えですが、capybaraはhas_select matcherとfind(:select、...)ファインダをサポートしていますあなたはもっと意味論的な言葉でほしいもののほとんどのオプション。 –

+1

@TomWalpole - 私のフォームでは、ランダムに生成された名前とIDを持つ行を動的に追加するので、テストで使用できませんでした。その結果、このアプローチは私のためにうまく機能します。 –