How do I drag a jQuery slider handle from within Capybara and ChromeDriver?

前端 未结 2 1789
盖世英雄少女心
盖世英雄少女心 2021-01-11 23:32

I am able to execute the following code to move the slider handle, but the events triggered in the browser are not taking place.

page.execute_script(%Q($(\         


        
相关标签:
2条回答
  • 2021-01-11 23:59

    resynchronize has been removed from Capybara 2.0 so user853088's answer for Selenium would now look like this:

    module CapybaraSeleniumExtension
      def drag_by(right_by, down_by)
        driver.browser.action.drag_and_drop_by(native, right_by, down_by).perform
      end
    end
    
    0 讨论(0)
  • 2021-01-12 00:16

    I extended capybara dragging before.
    It can move elements by a given offset.

    You could try

    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
    

    And then

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

    But it may not suit the slider's scale.

    The original are

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

    There are a few words of caution.

    • 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.
    0 讨论(0)
提交回复
热议问题