メモログ

塵が積もって山とならないメモのログ

watir-webdriver でドラッグアンドドロップをする

一つ前の記事でwatirはselenium-webdriverのラッパー的な感じであると申しました。なので、watir-webdriverでもselenium-webdriverで実装されているメソッドを直接使用することも可能です。

ドラッグアンドドロップのUIはわりとwatirで自動化する場合の泣き所だったのですが(watirでもできなくないはずですが)、selenium-webdriverではDrag and Dropをするためのメソッドが用意されていて、それを利用するとwatir-webdriverでも簡単にDrag and dropをすることができます。詳しくはTipsAndTricks - seleniumClass: Selenium::WebDriver::Elementなどをご参照。

drag_and_drop_by(right_by, down_by) は、メソッドの対象の要素の現在位置から移動する距離を第一引数で右への移動距離、第二引数で下への移動距離を設定します(左または上に移動したい場合は負の値で指定する)。drag_and_drop_on(other)は、第一引数で指定した要素(find_elementのメソッドなどで指定したオブジェクト)に移動させます。

実際にwatir-webdriver上で動かす場合はこんな具合に。

1
2
3
4
5
6
7
require 'rubygems'
require 'watir-webdriver'

browser = Watir::Browser.new :firefox
target_element = browser.driver.find_element(:name,'foo')
target_element.drag_and_drop_by 100,200

drag_and_drop_onを使用する場合はこんな具合。

1
2
3
4
5
6
7
8
require 'rubygems'
require 'watir-webdriver'

browser = Watir::Browser.new :firefox
target_element = browser.driver.find_element(:name,'foo')
distination = browser.driver.find_element(:name,'bar')
target_element.drag_and_drop_on distination

現在はこのメソッドはFirefoxでのみ動作するみたいですが、これは助かりますね。