【问题标题】:Is there a way to perform Ctrl + click with Capybara and Poltergeist?有没有办法使用 Capybara 和 Poltergeist 执行 Ctrl + 单击?
【发布时间】:2017-12-27 18:10:49
【问题描述】:

我正在尝试编写一个 Capybara 测试,该测试使用 Windows 上的 ctrl 和 MacOS 上的命令键测试多选。

我在这里找到了一个解决方案,该解决方案仅在我使用 Selenium 作为驱动程序时才有效。 Testing jQuery Selectable capybara or selenium (ctrl + click)

但是,该解决方案不适用于 Poltergeist 驱动程序。 Poltergeist 目前是否支持执行 Ctrl + Click?

【问题讨论】:

    标签: capybara poltergeist


    【解决方案1】:

    没有 Poltergeist 没有。如果您必须使用 Poltergeist 进行测试,那么您可能必须使用 execute_script 从 JS 构建和触发事件。请注意,仅适用于 JS 小部件。如果它实际上是一个带有 multiple 属性的 HTML 选择,您应该能够分别选择每个选项,它会选择多个。

    【讨论】:

    • 谢谢托马斯!我也知道这个解决方案:stackoverflow.com/questions/8474103/… 虽然它建议使用 KeyboardEvent.keyCode,但根据 MDN 已弃用且不推荐使用。我正在尝试选择“li”HTML 元素。问题是我们故意这样做,以便用户需要按住“Ctrl”或“Shift”才能进行多选。
    • @SpartaSixZero send_keys 在返回之前释放密钥,因此不会因为随后的点击而关闭。根据您的描述,我假设您需要使用在该事件中设置的正确键盘修饰符发出鼠标单击事件。如果您的代码还实现了一种通过键盘进行多选的方法,那么您可能可以使用send_keys - rubydoc.info/gems/capybara/Capybara/Node/… - 以跨驱动程序的方式来做到这一点
    • 不幸的是,我们的要求表明我们需要结合使用 keydown 和鼠标左键来进行多选。所以我认为 send_keys 在这里没有帮助,因为 send_keys 只需要键而不是鼠标点击。我怀疑我们是否会通过按键来实现多选,仅仅通过 Capybara 测试是不值得的。
    • @SpartaSixZero 好的 - 所以通过 execute_script 传递所需的元素,使用 getBoundingClientRect 来查找位置,并使用正确的键修饰符集构建/触发点击事件可能是您最好的选择
    • @SpartaSixZero 我建议不要将选择器直接放在 JS 中,而是从 ruby​​ 传递元素,这样您就可以将整个事情变成可重用的方法 shiftclick_script = "var e = $.Event('click', { shiftKey: true}); $(arguments[0]).trigger(e);" page.execute_script(shiftclick_script, my_element) where my_element = page.find('mySelector')跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2017-03-08
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多