如何从Capybara和ChromeDriver中拖动jQuery滑块手柄?

Eri*_* M. 8 jquery jquery-ui capybara selenium-chromedriver

我能够执行以下代码来移动滑块手柄,但是浏览器中触发的事件没有发生.

page.execute_script(%Q($('#slider_handicap').slider('values',1,30)))
Run Code Online (Sandbox Code Playgroud)

这正确地将正确的句柄设置为30,但我需要它表现得好像我实际上正在使用鼠标并将句柄拖动到30然后释放.

小智 12

resynchronize已从Capybara 2.0中删除,因此user853088对Selenium的回答现在如下所示:

module CapybaraSeleniumExtension
  def drag_by(right_by, down_by)
    driver.browser.action.drag_and_drop_by(native, right_by, down_by).perform
  end
end
Run Code Online (Sandbox Code Playgroud)


kya*_*chi 11

我之前延长了水豚的力量.
它可以按给定的偏移量移动元素.

你可以试试

module CapybaraExtension
  def drag_by(right_by, down_by)
    base.drag_by(right_by, down_by)
  end
end

module CapybaraSeleniumExtension
  def drag_by(right_by, down_by)
    resynchronize { driver.browser.action.drag_and_drop_by(native, right_by, down_by).perform }
  end
end

::Capybara::Selenium::Node.send :include, CapybaraSeleniumExtension
::Capybara::Node::Element.send :include, CapybaraExtension
Run Code Online (Sandbox Code Playgroud)

然后

page.find('#slider_handicap').drag_by(30, 0)
Run Code Online (Sandbox Code Playgroud)

但它可能不适合滑块的比例.

原来是

有几句谨慎的话.

  • 此扩展可能取决于驱动程序的类型和驱动程序的版本.
  • 这种拖动测试可能导致维护困难.