web-dev-qa-db-ja.com

カピバラ:CSSが見つかりません

私はカピバラを使用してチェックボックスをクリックしますが、私が何をしてもそれを見つけることができないようです。スパンとスパン内のラベルの両方を正しく見つけることはできますが、実際に必要な入力は見つけることができません。

ここにチェックボックスがあります

_<span class="checkbox tos">
  <input id="agreement" name="agreement" onclick="agreeValidate();" type="checkbox" value="false">
  <label for="agreement">I accept the <a href="http://www.dev.com:3000/terms" target="_blank">Terms of Use</a>, <a href="http://www.dev.com:3000/privacy" target="_blank">Privacy Policy</a>, and am at least 13 years old</label>
</span>
_

そして、ここに私が試したもののいくつかがあります

_page.check('agreement')
find(:css, '#agreement').set(true)
find('#agreement').set(true)
find('#agreement').click
_

しかし、それらはすべて私に同じエラーを与えます

_Unable to find css "#agreement" (Capybara::ElementNotFound)
_

また、チェックボックスをクリックすると、これらのメソッドのいずれかがonclickメソッドを起動するのではないかと思います。 find(:css, '#agreement').set(true)onclickイベントをトリガーしないようです。ただし、残りについてはわかりません。

更新

また、xpathを使用して要素を選択しようとしました。ここに私が見つけたさまざまなものがあります

_find(:xpath, '//*[@id="registration"]/span[2]')
_

これでspan要素を問題なく見つけることができます

_find(:xpath, '//*[@id="registration"]/span[2]/input')
_

これは必要な要素を見つけることができませんが、このxpathはchromeのコンソールで要素を正しく選択します

_find(:xpath, '//*[@id="agreement"]')
_

これは必要な要素を見つけることができませんが、xpathはchromeのコンソールで要素を選択します

_find(:xpath, '//*[@id="registration"]/span[2]/label')
_

これにより、label内のspan要素を問題なく見つけることができます。

34
user2158382

昨日正確な問題がありました。カピバラは入力が不可視であるため、入力を自動的に無視していました。私は次のように解決しました:

find('#agreement', :visible => false).click

以下をenv.rbに追加して、Capybaraがすべての非表示要素と対話できるようにすることもできます。

Capybara.ignore_hidden_elements = false
36
parad1gm

Falseに設定された:visibleオプションを追加してみてください。

find('#agreement', visible: false).click

デフォルトでは、Capybaraは表示されている要素のみを検索します。基になるドライバーがこの入力を非表示として識別したため、Capybaraによって検出されなかったようです。

:visibleオプションは、他のほとんどのCapybaraメソッド(checkhas_css?have_selectorなど)でもサポートされています。

10
Andrei Botalov

これを試してくださいpage.execute_script("$('#agreement').attr('checked', true)")。これを機能させるには、サンプルにjs: trueのタグを付ける必要があります

3
Siva Gollapalli

私は同じ問題を抱えています...私はそれがうまくいく以下を試しました...

find('#tos', visible: false).set(true)
1
ratnakar

問題は、他のページに移動しているため、ページがレンダリングされていないことです。これを解決するために、カピバラのコードを変更する必要はありません。おそらく、コントローラーコードにいくつかの変更を加える必要があります。

このアイデアは、save_and_open_page代わりに。内部サーバーに表示される内容の詳細を教えてください。そこに表示されるエラーメッセージはありますか?また、チェックボックスをオンにするビューのコントローラーアクションのコードと、そのコントローラーアクションで呼び出される定義済みの他のコードを提供してください。

0
Gjaldon