使用Selenium Webdriver for Ruby进行HTML5拖放

是否有任何工作可以使用Selenium Webdriver和Ruby一起使用HTML5拖放工具? 我正在使用Selenium-Webdriver 2.20.0和Ruby 1.9.2

这是一个重现问题的简单测试:

require "selenium-webdriver" require "test/unit" class Html5DragAndDropTest < Test::Unit::TestCase def setup @driver = Selenium::WebDriver.for :firefox @driver.manage.timeouts.implicit_wait = 30 end def teardown @driver.quit end def test_html5_drag_and_drop @driver.get("http://html5demos.com/drag") target = @driver.find_element(:id, "one") source = @driver.find_element(:id, "bin") @driver.action.drag_and_drop(target, source).perform assert target.displayed? == false end end 

这仍然是Selenium中的一个错误,因此上面提到的JavaScript解决方法很好。

我构建了一个HTML拖放页面示例,并使用了Ryan提供的drag_and_drop_helper.js要点编写了一个测试来练习它。 你可以在这里看到我的全文。

干杯,
戴夫H.
@TourDeDave

这是一个临时的解决方法,可以帮助社区在此期间进行测试……

1)drag_and_drop_helper.js(https://gist.github.com/2362544)到你的测试/助手目录

2)在test_helper.rb中创建一个新方法

  def drag_and_drop(source,target) js_filepath=File.dirname(__FILE__)+"/drag_and_drop_helper.js" js_file= File.new(js_filepath,"r") java_script="" while (line=js_file.gets) java_script+=line end js_file.close @driver.execute_script(java_script+"$('#{source}').simulateDragDrop({ dropTarget: '#{target}'});") rescue Exception => e puts "ERROR :" + e.to_s end 

以下是如何通过拖放(dnd)与Capybara / Selenium一起进行黄瓜测试。 基本上使用drag_to方法直接从Capybara调用dnd不起作用。 你必须退出Capybara进入Selenium,当使用Selenium时,使用click_and_hold方法然后执行drag_and_drop,然后释放dnd才能工作。 这是代码:

 #jump out of capybara for dnd #selenium web driver accessed directly using page.driver.browser source_selenium_ele = page.driver.browser.find_element(:xpath, "//draggable-element") target_selenium_ele = page.driver.browser.find_element(:xpath, "//destination-element") #drag and drop actions page.driver.browser.action.click_and_hold(source_selenium_ele).perform page.driver.browser.action.drag_and_drop(source_selenium_ele, target_selenium_ele).perform page.driver.browser.action.release.perform #jump back into capybara...