Как я могу имитировать попадание в поле ввода с 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>'