web-dev-qa-db-fra.com

Comment simuler une frappe en entrant dans un champ de saisie avec Capybara et ChromeDriver?

J'ai la méthode d'assistance suivante pour entrer une chaîne dans un champ de saisie et appuyer sur la touche Entrée, mais il semble que la touche Entrée n'est jamais enfoncée. Je vois la chaîne entrée dans le champ de saisie, mais les événements qui se produisent lors de la frappe ne sont jamais arrivés.

J'ai testé dans un navigateur réel que la touche Entrée déclenche correctement les événements attendus. Je ne suis pas sûr de ce que je manque.

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

MODIFIER:

J'ai également essayé ce qui suit en vain:

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

Ils ne causent aucune erreur, mais toujours aucune touche entrée enfoncée.

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

travaille pour moi. Je n'ai pas de nom ou d'identifiant pour mon champ mais le type est entré donc j'ai utilisé quelque chose comme 

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

fonctionne parfaitement bien! 

72
Mysterio Man

Ces jours-ci (version 2.5+ de Capybara), vous pouvez simuler la clé <enter> de la manière suivante:

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

Le \n est l'élément le plus important ici.

16
Paweł Gościcki

Habituellement, lorsque vous exécutez page.execute_script, vous obtenez les mêmes résultats que si vous exécutiez cela dans la console de la page. Essayez d’exécuter cela manuellement dans la console et voyez si vous obtenez les résultats escomptés. C’est d’habitude ce que je fais .. construisez le code js nécessaire dans la fenêtre de la console du navigateur et collez-le dans le code capybara quand il fonctionne, en utilisant execute_script.

6
Felipe Lima

Capybara ne prend pas en charge nativement un événement de type send_keys. Vous pourriez peut-être aller à Selenium pour le faire, ou vous pouvez essayer ce joyau https://github.com/markgandolfo/send-keys

4
DVG

Ça marche pour moi

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

@Page.selector.send_keys :return

Cela fonctionne pour moi, où selector est l'élément de votre objet de page Element :selector, '<css selector>'

0
Murali K