2017-07-13 2 views
0

データテーブルのラジオボタンを選択しようとしていますが、問題があります。私は1つのページに表示される唯一のものだから1つのデータテーブル行をフィルタリングすることができます...しかし、私は試したpage.choosepage.find(<xpath>)page.find(<css>)、私はまた、私は何を試して残っているのか分かりません。データテーブルのラジオボタンを選択できません

残念ながら、これは作業項目なので、すべてを投稿することはできません。私はIDを指定するとラベルをクリックすることができます:

find(:xpath, "//label[@for='approve_row_5']").clickこれは実際にラジオボタンを選択しているようには見えません。私は、データ・テーブルには、ここで、とにかく

を結果行が(ラジオボタンが列に存在する)

<td class=" align-middle"> 
     <div class="radio"> 
      <input type="radio" name="approve_deny_row_5" id="approve_deny_row_5_approve" value="person_approve" data-ui-verify-key="test_approve" data-ui-verify-title="2017-07-13 14:59:46 -0400"> 
      <label for="approve_deny_row_5_approve"> 
      <span>Approve</span> 
      </label> 
     </div> 

     <div class="radio"> 
      <input type="radio" name="approve_deny_row_5" id="approve_deny_row_5_deny" value="person_deny" data-ui-verify-key="test_deny" data-ui-verify-title="2017-07-13 14:59:46 -0400" data-ui-verify-url="/irrelevant/stuff"> 
      <label for="approve_deny_row_5_deny"> 
      <span>Deny</span> 
      </label> 
     </div> 
     </td> 
濾過された後に2つのラジオボタンのHTMLでフィルタリングした後、私はまた、待ち時間をやってみました

テキストでスパンを見つけてそれをクリックすると考えましたが、実際にはラジオボタンは選択されません。また、私はfind('input[value="test_approve"]').click経由で特定の値セレクタで検索しようとしましたが、どちらも運がなかった

アイデア?それらはあなたを教えている場合、このために働く必要があります方法は

choose("Approve") 
choose("Deny") 

または

choose("approve_deny_row_5_approve") 
choose("approve_deny_row_5_deny") 

ある実際の無線入力がページ上に表示されている(とスタイリングを可能にするために隠されていない)と仮定すると、

+0

test_approveに等しい 'value'属性を持つ' input'要素はありませんが、 'value =" person_approve "は少なくともHTMLで提供される部分にあります。あなたは 'find( 'input [value =" person_approve "]')をクリックしてみましたか、それとも' find( 'input [data-ui-verify-key = "test_approve"]' – Andersson

+0

'input'要素がページ上に実際に見えると仮定すると' choose( "approve_deny_row_5_approve")と 'choose(" approve_deny_row_5_deny ")'はどちらか一方のラジオボタンを選択する必要があります( '行にスコープがあれば ''拒否 ''を選択します。) - 正確に何のエラーが生成されますか? –

+0

@Anderssonはちょうど誤ったタイプだったので、私はいくつかの値を変更し、それを忘れてしまった。 @ThomasWalpole残念ながら、( '承認')を選択しても動作せず、 'Capybara :: ElementNotFound:ラジオボタンを見つけることができません。ページの他の場所(あらかじめテキスト形式)でフィルタを使用しているので、おそらくそれはスコープの問題です。 – msmith1114

答えて

1

彼らは要素を見つけることができませんし、入力要素が実際に隠されている可能性があります(スタイリングの理由で)

choose('Approve', allow_label_click: true) 

入力要素ではなく入力に関連付けられたラベル要素をクリックします。探している振る舞いが、(入力の変更イベントではなく)非常に特定の要素のクリックを探すJSに基づいていない限り、同じ結果(ラジオボタンの設定)が生成されるはずです。そのような場合は、JSがどの要素をクリックしているかを正確に把握するか、JSをより直感的に動作させるように修正する必要があります。

+0

これは興味深いことですが、ラベルをクリックしてモーダルを表示することはできますが、2回のクリックが必要です。これはフィルタ(テキストボックス)を入力した場合にのみ発生します。ですから、問題の原因となっているテキストボックスに焦点が当てられているので、私は推測しています。たとえば、テキストボックスに入力すると、ラベルの1回のクリックでラジオボタンが適切に選択されます。確かにそこに '(2回、それを入れてください) 、それが動作します...私にできるコードで : '選ぶ( '承認'、allow_label_click::真) ' '選ぶ(真の '承認'、allow_label_click)しかし、それほどハッキーではありません。 – msmith1114

+1

@ msmith1114手作業でラベルを1回クリックするだけで動作しますか?つまり、ユーザーがCapybaraに何をすべきかを正確に指示した場合(特定のフィールドを入力し、ラベルをクリックするなど)、モーダルが表示されますか? –

+0

いいえ、私は説明しようとしていたことをごめんなさい。テキストボックスに入力して、それが動作しないラベルをクリックすると、それを再びクリックして動作させるまでは表示されません。 テキストボックスに入力した後、ページ上の他の場所をクリックすると、ラベルを1回クリックするだけで作業が行われます。 (カピバラではなく手動でこれを行うことを参照してください)。ですから、私はCapybaraでは 'choose( 'Approve'、allow_label_click:true)を2回実行するだけで動作させることができました。それは明らかに一種のハッキーで厄介なものですが、私はそれがもっとクリーンな方法があるはずだと言っていました。 – msmith1114

関連する問題