Вопрос по jquery – Как перетащить маркер ползунка jQuery из Capybara и ChromeDriver?

8

Я могу выполнить следующий код для перемещения маркера ползунка, но события, инициированные в браузере, не происходят.

page.execute_script(%Q($('#slider_handicap').slider('values',1,30)))

Это правильно устанавливает правый маркер на 30, но мне нужно, чтобы он вел себя так, как если бы я на самом деле брал мышь и перетаскивал маркер на 30, а затем отпускал.

Ваш Ответ

2   ответа
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

А потом

page.find('#slider_handicap').drag_by(30, 0)

Но это может не соответствовать масштабу ползунка.

Оригинал

Capybara::Node::Element#drag_to Capybara::Selenium::Node#drag_to Selenium:: WebDriver::ActionBuilder drag_and_drop and drag_and_drop_by

Есть несколько слов предостережения.

This extension could depend on the type of driver and the version of driver. This kind of test with dragging could lead to difficulty of maintainance.
12

Resynchronize был удален из Capybara 2.0, так что ответ пользователя 853088 для 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

Похожие вопросы