如何使用Capybara和ChromeDriver模拟输入字段中的输入?

Eri*_* M. 57 javascript jquery ruby-on-rails capybara selenium-chromedriver

我有以下帮助方法将字符串输入到输入字段并按Enter键,但似乎从未按下回车键.我看到字符串输入到输入字段中,但是在命中输入时发生的事件从未发生过.

我在实际的浏览器中测试过,输入键正确地触发了预期的事件.我不确定我错过了什么.

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

编辑:

我也试过以下无济于事:

find('#q_name').native.send_keys(:return)
find('#q_name').native.send_keys(:enter)
Run Code Online (Sandbox Code Playgroud)

它们不会导致任何错误,但仍然没有按下回车键.

Mys*_*Man 76

find('#q_name').native.send_keys(:return)
Run Code Online (Sandbox Code Playgroud)

适合我.我的字段没有名称或ID,但输入类型,所以我使用了类似的东西

find('.myselector_name>input').native.send_keys(:return)
Run Code Online (Sandbox Code Playgroud)

工作得很好!

  • @Mysterio Man此解决方案不适用于Capybara 2.5.它抛出`NoMethodError:未定义的方法`send_keys'为"5":String`错误. (4认同)

Paw*_*cki 19

这些天(Capybara版本2.5+)您可以<enter>通过以下方式模拟密钥:

find('.selector').set("text\n")
Run Code Online (Sandbox Code Playgroud)

\n是非常重要的一点.


Fel*_*ima 6

通常,当您运行page.execute_script时,您将获得与在页面控制台中运行该结果相同的结果.尝试在控制台中手动运行它,看看你是否得到了预期的结果.这通常就是我所做的..在浏览器控制台窗口中制作所需的js代码,并在使用execute_script时将其粘贴到capybara代码中.


DVG*_*DVG 5

Capybara 没有对 send_keys 类型事件的原生支持。您可能可以使用 selenium 来执行此操作,或者您可以尝试使用此 gem https://github.com/markgandolfo/send-keys