HTML5 Drag and Drop с использованием Selenium Webdriver для Ruby - PullRequest
7 голосов
/ 21 марта 2012

Есть ли какие-либо способы заставить HTML5 Drag and Drop работать с Selenium Webdriver с Ruby? Я использую 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

Ответы [ 3 ]

2 голосов
/ 26 февраля 2014

Это все еще ошибка в Selenium, поэтому упомянутый выше обходной путь JavaScript хорош.

Я создал пример HTML-страницы для перетаскивания и написал тест для его проверки, используя с помощью drag_and_drop_helper.js, который предоставил Райан . Вы можете увидеть мое полное описание здесь .

Приветствия
Дэйв Н
@ TourDeDave

2 голосов
/ 12 апреля 2012

Вот временный обходной путь, который может помочь сообществу в тестировании тем временем ...

1) drag_and_drop_helper.js (https://gist.github.com/2362544) в каталог test / helpers

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
0 голосов
/ 08 мая 2012

Вот как настроить перетаскивание (dnd) для работы с Capybara / Selenium для тестов на огурец.В основном вызов dnd напрямую из Capybara с использованием метода drag_to не работает.Вы должны покинуть 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...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...