有没有办法使用Capybara发送按键到Webkit?
我需要在使用Capybara和WebKit的集成测试中将一些按键发送到Web应用程序。使用硒(webdriver的和Firefox),我可以这样实现它:有没有办法使用Capybara发送按键到Webkit?
find("#element_id").native.send_keys :tab
但WebKit的本土元素节点不具有send_keys方法。实际上,WebKit中的本机返回了一个包含数字的字符串。是否有另一种方法将按键发送到WebKit?也许甚至使用JavaScript/jQuery的一些解决方法?
你可以那样做:
keypress_script = "var e = $.Event('keydown', { keyCode: #{keycode} }); $('body').trigger(e);"
page.driver.browser.execute_script(keypress_script)
我一直在努力实现没有任何成功马克的答案,但我发现从一个类似的问题有所帮助:capybara: fill in form field value with terminating enter key。显然水豚有一个pull request似乎解决了这个问题。
什么工作对我来说是:
before { fill_in "some_field_id", with: "\t" }
我的例子中删除字段中的文本,然后按Tab键。要填写'foobar'
的字段,请将"\t"
替换为"foobar\t"
。您也可以使用"\n"
作为输入键。
对于你的榜样,您可以使用:
find("#element_id").set("\t")
我确认'find(“#label”).set(my_label +“\ n”)'会触发Enter键。 –
谢谢你!为我工作。我真的很惊讶这样简单的解决方案! –
最后我做了以下内容:
Capybara.current_driver = Capybara.javascript_driver
keypress_script = "$('input#my_field').val('some string').keydown();"
page.driver.browser.execute_script(keypress_script)
我在Chrome中发现,测试我的JavaScript,实际上与keyCode
或创建$.Event
charCode
,然后触发在我的输入字段没有把字符放在输入中。我正在测试自动完成,它需要在输入字段中输入几个字符,并且它会在上启动自动完成。所以我用val
手动设置输入值,然后触发使自动完成脚本启动。
这里是我的解决方案,它与水豚2.1.0
工作:
fill_in('token-input-machine_tag_list', :with => 'new tag name')
page.evaluate_script("var e = $.Event('keydown', { keyCode: 13 }); $('#token-input-machine_tag_list').trigger(e);") # Press enter
请注意,在新的水豚,你必须使用page.evaluate_script
。
对于简单的情况下,引发了keypress
事件JS将工作:
def press(code)
page.execute_script("$('#my-input').trigger($.Event('keypress', {keyCode: #{code}}))")
end
为了更全面和强大的答案,可以使用这个great library通过触发正确的事件(即的麻烦去,然后keypress
,最后是keyup
)。
def type(string)
page.execute_script("Syn.click({}, 'my-input').wait().type(#{string.to_json})")
end
更复杂的例子可以发现here
对于水豚的Webkit,这是我使用的解决方案:
def press_enter(input)
script = "var e = jQuery.Event('keypress');"
script += "e.which = 13;"
script += "$('#{input}').trigger(e);"
page.execute_script(script);
end
然后我干脆用它在我的测试,如:
press_enter("textarea#comment")
现在,因为水豚,WebKit的1.9.0,您可以发送按键像进入和其他使用send_keys:
find("textarea#comment").send_keys(:enter)
来源:https://github.com/thoughtbot/capybara-webkit/issues/191#issuecomment-228758761
水豚API文档:http://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FNode%2FElement%3Asend_keys
你曾经有这个巴勃罗任何运气?我仍然遇到与原来使用.native方法相同的问题。例如,只返回'4'。 – kikuchiyo