在使用Capybara和WebKit的集成测试中,我需要向Web应用程序发送一些按键。 使用Selenium(WebDriver和Firefox),我可以这样实现:

find("#element_id").native.send_keys :tab

但是WebKit的本机元素节点没有send_keys方法。 实际上,WebKit中的native返回了一个包含数字的字符串。 还有另一种将击键发送到WebKit的方法吗? 也许甚至可以使用JavaScript / jQuery来解决问题?

===============>>#1 票数:18

我一直在尝试实现Marc的答案,但没有获得任何成功,但是我从类似的问题中找到了一些帮助: capybara:使用Enter键终止表单字段值 很显然,水豚发出了拉动请求 ,似乎解决了这个问题。

对我有用的是:

before { fill_in "some_field_id", with: "\t" }

我的示例删除了该字段中的文本,然后按Tab 要用'foobar'填充字段,请用"foobar\\t"替换"\\t" "foobar\\t" 您也可以使用"\\n"作为Enter键。

例如,您可以使用:

find("#element_id").set("\t")

===============>>#2 票数:14

您可以这样做:

keypress_script = "var e = $.Event('keydown', { keyCode: #{keycode} }); $('body').trigger(e);"
page.driver.browser.execute_script(keypress_script)

===============>>#3 票数:13

这与Poltergeist一起为我工作,触发了星号键:

find("body").native.send_key("*")

我没有其他解决方案的运气。 甚至都不是Syn。

这是为了触发一个角度热键事件。

===============>>#4 票数:5

现在,从Capybara-webkit 1.9.0开始,您可以使用send_keys发送回车键和其他回车键:

find("textarea#comment").send_keys(:enter)

来源: https : //github.com/thoughtbot/capybara-webkit/issues/191#issuecomment-228758761

Capybara API文件: http ://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FNode%2FElement%3Asend_keys

===============>>#5 票数:3

我最终做了以下工作:

Capybara.current_driver = Capybara.javascript_driver
keypress_script = "$('input#my_field').val('some string').keydown();"
page.driver.browser.execute_script(keypress_script)

我在Chrome浏览器中测试了我的JavaScript,发现实际上是使用keyCodecharCode创建$.Event ,然后在输入字段中触发该事件时并未将字符放入输入中。 我正在测试自动完成功能,要求在输入字段中输入几个字符,然后它将在keydown上启动自动完成功能。 因此,我使用val手动设置输入值,然后触发keydown来启动自动完成脚本。

===============>>#6 票数:1

对于简单的情况,可以在JS中触发keypress事件:

def press(code)
  page.execute_script("$('#my-input').trigger($.Event('keypress', {keyCode: #{code}}))")
end

要获得更通用,更可靠的答案,请使用这个功能强大的库 ,该会遇到触发正确事件的麻烦(即keydown ,然后是keypress ,最后是keyup )。

def type(string)
  page.execute_script("Syn.click({}, 'my-input').wait().type(#{string.to_json})")
end

一个更复杂的例子可以在这里找到

===============>>#7 票数:0

这是我的解决方案,适用于capybara 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

===============>>#8 票数:0

对于Capybara 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")

  ask by pupeno translate from so

未解决问题?本站智能推荐:

1回复

Capybara Webkit JS:true仍将请求发送为HTML

我在https://github.com/thoughtbot/capybara-webkit上列出了所有配置选项 gem'capybara-webkit' Capybara.javascript_driver =:webkit测试ran,并且可以运行。 但不适用于js:是。 所
3回复

为Capybara安装Webkit

我正在尝试使用此处提供的信息为Capybara安装webkit,但出现错误。 按照说明,我尝试更改Qt安装目录中的qmake.conf文件,但找不到QMAKE_IDC参数,也不知道应将以下值放在哪里: 我得到了以下错误:
1回复

Shopify上的Capybara Webkit

嗨,我正在Shopify安装上编写功能测试。 在此之前,我想删除它,以便进行全新安装。 但是我无法以通常的方式执行此操作,因为它的响应为: 请升级您的浏览器Shopify不支持您的浏览器。 我们建议您使用Google Chrome,但是最新版本的Safari,Firefox和In
2回复

如何使用Capybara Webkit捕获特定元素或位置的屏幕截图?

是否可以使用capybara-webkit捕获特定元素或呈现页面的一部分的屏幕截图? 这可以通过Capybara + Poltergeist(phantomjs驱动程序)轻松完成,因为它提供了非标准的save_screenshot(路径,选择器)方法。 查看capybara-webk
1回复

在Rails 4中使用capybara-webkit gem时,为什么会偶尔断开连接?

我使用capybara-webkit gem从Rails应用程序的某些页面中抓取数据。 我注意到,似乎是“随机” /“零星”的应用程序将崩溃,并出现以下错误: 即使之前已经连接并多次访问网站,它也会发生。 这是我目前正在使用的代码片段... 我什至以为也许我不知道为什么一定要
1回复

无头工作时,capybara-webkit使用哪个端口和域?

我有一个应用程序,该应用程序使用存储在表中的域来确定网站的某些方面。 如果在数据库中找不到该域,则会生成错误。 当我正常使用Cucumber测试时,我使用域localhost,并且一切正常。 当我尝试使用capybara-webkit和无头程序(用于测试站点的javascript部分)
1回复

Capybara + Rspec +:webkit = undefined javascript_driver

我想更改我的默认驱动器,使用javascript运行测试,特定场景使用javascript,从默认情况下:selenium到任何,例如:webkit,在RSpec中,只需设置:js => true flag。 但是,尝试运行“描述'xxx',:js => true”使用:webki
4回复

Capybara + Webkit:如何测试客户端验证 - “必需”输入元素?

使用Rspec和Capybara,我正在尝试测试表单的失败验证,其中未填写“必需”输入,因此失败。 理解HTML5的新导航员提供内置验证,我也理解Capybara也在使用它。 之前,我正在使用 这对我不起作用了。 现在有人知道如何测试吗? 非常感谢! 大卫
4回复

如何用webkit或selenium驱动程序填充capybara的ckeditor

如果我使用像capybara-webkit或selenium这样的支持javascript的驱动程序,我如何填充Capybara中的CKEditor区域?
1回复

Capybara webkit驱动程序找到重叠元素,我该如何点击其中一个?

Capybara webkit驱动程序错误地看到我的css。 它看到(显示)我的按钮与另一个按钮重叠,而selenium驱动程序没有问题。 无论如何我可以点击它吗? 可能是执行脚本或什么?