Как я могу имитировать попадание в поле ввода с Capybara и ChromeDriver?

У меня есть следующий вспомогательный метод для ввода строки в поле ввода и нажмите клавишу ввода, но кажется, что клавиша ввода никогда не была нажата. Я вижу, что строка введена в поле ввода, но события, которые происходят при нажатии, никогда не происходили.

Я тестировал в реальном браузере, что ключ ввода правильно запускает ожидаемые события. Я не уверен, что мне не хватает.

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

EDIT:

Я также пробовал следующее безрезультатно:

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

Они не вызывают каких-либо ошибок, но все еще не нажаты клавиши ввода.

Ответ 1

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

работает для меня. У меня нет имени или идентификатора для моего поля, но тип вводится, поэтому я использовал что-то вроде

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

работает отлично!

Ответ 2

В наши дни (Capybara версии 2.5+) вы можете имитировать клавишу <enter> следующим образом:

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

\n - это очень важный бит.

Ответ 3

Обычно при запуске page.execute_script вы получаете те же результаты, что и на панели справки. Попробуйте запустить это вручную в консоли и посмотреть, получите ли вы ожидаемые результаты. Обычно это то, что я делаю.. создайте необходимый код js в окне консоли браузера и вставьте его в код capybara, когда он работает, используя execute_script.

Ответ 4

Capybara не имеет встроенной поддержки события типа send_keys. Вы могли бы спуститься к селену, чтобы сделать это, или вы можете попробовать этот драгоценный камень https://github.com/markgandolfo/send-keys

Ответ 5

Это работает для меня

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

Ответ 6

@Page.selector.send_keys :return

Это работает для меня, где selector - это элемент в вашем объекте страницы элемент :selector, '<css selector>'