web-dev-qa-db-ja.com

CapybaraとChromeDriverを使用して入力フィールドにEnterキーを押すことをシミュレートするにはどうすればよいですか?

入力フィールドに文字列を入力してEnterキーを押す次のヘルパーメソッドがありますが、Enterキーが押されていないようです。入力フィールドに文字列が入力されていますが、Enterキーを押したときに発生するイベントは発生しませんでした。

実際のブラウザで、Enterキーが予想されるイベントを正しく起動することをテストしました。何が欠けているのかわかりません。

def fill_and_trigger_enter_keypress(selector, value)
  page.execute_script %Q(
                          var input = $('#{selector}');
                          input.val('#{value}');
                          input.trigger("keypress", [13]);
                         )
end

編集:

私は次のことも試してみました:

find('#q_name').native.send_keys(:return)
find('#q_name').native.send_keys(:enter)

エラーは発生しませんが、Enterキーは押されません。

56
Eric M.
find('#q_name').native.send_keys(:return)

私のために働く。私は自分のフィールドに名前やIDを持っていませんが、タイプは入力されているので、次のようなものを使用しました

find('.myselector_name>input').native.send_keys(:return)

完璧に動作します!

76
Mysterio Man

最近(Capybaraバージョン2.5以降)、<enter>キーは次のようになります。

find('.selector').set("text\n")

\nはここで非常に重要なビットです。

18

通常、page.execute_scriptを実行すると、ページコンソールで実行した場合と同じ結果が得られます。コンソールで手動で実行してみて、期待どおりの結果が得られるかどうかを確認してください。それは通常私がしていることです..必要なjsコードをブラウザーのコンソールウィンドウで作成し、execute_scriptを使用してcapybaraコードに貼り付けます。

6
Felipe Lima

Capybaraはsend_keysタイプのイベントをネイティブでサポートしていません。あなたはそれを行うためにSeleniumに行くことができるかもしれません、またはあなたはこの宝石を試すことができます https://github.com/markgandolfo/send-keys

4
DVG

わたしにはできる

page.execute_script("$('form.css-class/#form_id').submit()")
1
Mary Dear

@Page.selector.send_keys :return

selectorはページオブジェクト要素の要素:selector, '<css selector>'

0
Murali K