2012-03-21 29 views
7

Có công việc nào xung quanh để sử dụng tính năng Kéo và Thả HTML5 làm việc với Trình quản lý Web Selenium với Ruby không? Tôi đang sử dụng Selenium-Webdriver 2.20.0 với Ruby 1.9.2Kéo và thả HTML5 bằng Trình quản lý Web Selenium dành cho Ruby

Dưới đây là một thử nghiệm đơn giản để tạo lại vấn đề:

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

[này] (http://sqa.stackexchange.com/a/1296) có lẽ có thể là câu trả lời. –

+0

Phương pháp họ đang sử dụng có ngoài API tương tác người dùng nâng cao. Cụ thể hơn, [Selenium :: WebDriver :: ActionBuilder] (http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/ActionBuilder.html#drag_and_drop-instance_method) Phương pháp này không hoạt động với tính năng kéo và thả HTML5. –

+0

Tôi đã có cùng một vấn đề. Sau khi nghiên cứu sâu rộng về SO và mạng, tôi nghĩ rằng đây là một lỗi Selenium. Tôi đã gửi báo cáo lỗi tại đây: https://code.google.com/p/selenium/issues/detail?id=6315&thanks=6315&ts=1380031813 –

Trả lời

2

Dưới đây là một cách giải quyết tạm thời mà có thể giúp cộng đồng với thử nghiệm trong khi chờ đợi ...

1) drag_and_drop_helper.js (https://gist.github.com/2362544) để kiểm tra/người hỗ trợ thư mục của bạn

2) Tạo một phương pháp mới trong test_helper.rb bạn

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

Không biết về kéo và thả HTML5, nhưng đã xem qua giải pháp javascript này cho kéo & thả: http://ynot408.wordpress.com/2011/09/22/drag-and-drop-using-selenium-webdriver – David

+0

Giải pháp được đề xuất trong câu trả lời này không hiệu quả đối với tôi. –

0

Dưới đây là cách để kéo và thả (dnd) để làm việc với Capybara/Selenium để kiểm tra dưa chuột. Về cơ bản gọi dnd trực tiếp từ Capybara bằng cách sử dụng phương thức drag_to không hoạt động. Bạn phải thả ra khỏi Capybara vào Selenium, và khi sử dụng Selenium, hãy sử dụng phương thức click_and_hold theo sau là drag_and_drop và sau đó giải phóng cho dnd hoạt động. Đây là mã:

#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

Tôi có thể sai, nhưng tôi nghĩ rằng các cuộc gọi đến .click_and_hold và .release được thực hiện hoàn toàn bằng lệnh gọi .drag_and_drop. Vì vậy, tôi nghĩ rằng mã này sẽ bấm trong khi giữ và phát hành sau khi nó đã được phát hành. –

+0

Điều đó sẽ không thực sự hiệu quả. Đoạn mã tôi đã đăng sử dụng ví dụ html5 (http://html5demos.com/drag) mà mã của bạn không hoạt động. Trong cả hai trường hợp, Selenium chỉ được sử dụng. –

Các vấn đề liên quan