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

时间:2012-06-03 00:13:51

标签: 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

编辑:

我也试过以下无济于事:

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

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

6 个答案:

答案 0 :(得分:75)

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

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

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

完美无缺!

答案 1 :(得分:18)

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

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

\n是非常重要的一点。

答案 2 :(得分:6)

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

答案 3 :(得分:4)

Capybara对send_keys类型事件没有本机支持。你或许可以去硒做这个,或者你可以尝试这个宝石https://github.com/markgandolfo/send-keys

答案 4 :(得分:1)

它对我有用

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

答案 5 :(得分:0)

@Page.selector.send_keys :return

这适用于我,其中selector是页面对象中的元素 元素:selector, '<css selector>'