2012-03-21 12 views
7

Ci sono dei problemi per ottenere il drag-and-drop HTML5 con Selenium Webdriver con Ruby? Sto usando selenio-WebDriver 2.20.0 con Ruby 1.9.2HTML5 Trascina e rilascia usando Selenium Webdriver per Ruby

Ecco un semplice test per riprodurre il problema:

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 
+0

[Questo] (http://sqa.stackexchange.com/a/1296) potrebbe forse essere la risposta. –

+0

Il metodo che stanno utilizzando è diverso dall'API Advanced User Interaction. Più in particolare, [Selenium :: WebDriver :: ActionBuilder] (http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/ActionBuilder.html#drag_and_drop-instance_method) Questo metodo non funziona con trascinamento della selezione HTML5. –

+0

Ho avuto lo stesso problema. Dopo un'estesa ricerca su SO e sulla rete, penso che questo sia un bug di selenio. Ho archiviato un bug report qui: https://code.google.com/p/selenium/issues/detail?id=6315&thanks=6315&ts=1380031813 –

risposta

2

Ecco una soluzione temporanea che potrebbe aiutare la comunità con i test nel frattempo ...

1) drag_and_drop_helper.js (https://gist.github.com/2362544) per il test/aiutanti directory

2) Creare un nuovo metodo nella 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

Non so su HTML5 drag & drop, ma ho trovato questa soluzione javascript per drag & drop: http://ynot408.wordpress.com/2011/09/22/drag-and-drop-using-selenium-webdriver – David

+0

La soluzione proposta in questa risposta non ha funzionato per me. –

0

Ecco come eseguire il drag and drop (dnd) per lavorare con Capybara/Selenium per i test sui cetrioli. Fondamentalmente chiamare dnd direttamente da Capybara usando il metodo drag_to non funziona. Devi abbandonare Capibara in selenio e, quando usi il selenio, usa il metodo click_and_hold seguito da drag_and_drop e poi rilascia il comando per dnd. Ecco il codice:

#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... 
+0

Potrei sbagliarmi, ma penso che le chiamate a .click_and_hold e .release siano implicitamente fatte dalla chiamata a .drag_and_drop. Quindi penso che questo codice farà clic mentre tiene e rilascia dopo che è già stato rilasciato. –

+0

Che in realtà non funzionerà. Lo snippet di codice che ho pubblicato utilizza un esempio HTML5 (http://html5demos.com/drag) che il tuo codice non funziona. In entrambi i casi il selenio viene utilizzato solo. –

Problemi correlati