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.
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!
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.
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.
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
Ça marche pour moi
page.execute_script("$('form.css-class/#form_id').submit()")
@Page.selector.send_keys :return
Cela fonctionne pour moi, où selector
est l'élément de votre objet de page Element :selector, '<css selector>'