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

问题描述 投票:0回答:7

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

我已经在实际的浏览器中测试过回车键正确触发了预期的事件。我不确定我错过了什么。

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)

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

javascript jquery ruby-on-rails capybara selenium-chromedriver
7个回答
90
投票
find('#q_name').native.send_keys(:return)

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

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

工作得很好!


36
投票

These days (Capybara version 2.5+) 你可以通过以下方式模拟

<enter>
键:

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

\n
(新行)是这里非常重要的一点。


6
投票

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


5
投票

Capybara 没有对 send_keys 类型事件的原生支持。你也许可以使用 selenium 来做,或者你可以试试这个 gem https://github.com/markgandolfo/send-keys


1
投票

对我有用

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

0
投票

@Page.selector.send_keys :return

这对我有用,

selector
是页面对象中的元素 元素
:selector, '<css selector>'


0
投票

像往常一样使用

fill_in
,但将换行符
"\n"
附加到
with:
值。
with:
值必须用双引号引起来,而不是单引号。这将触发表单提交:

fill_in "q_name", with: "hello world\n"
© www.soinside.com 2019 - 2024. All rights reserved.