Seleniumでマウス操作したいけど、マウスの動きが速すぎるのか、期待通りに画面操作ができず。。。
なので、とりあえずマウス操作にpauseを加えようと思ったところ若干はまったのでメモです。
動かないコード
下記のドキュメントを参考に。
https://www.rubydoc.info/gems/selenium-webdriver/Selenium%2FWebDriver%2FW3CActionBuilder:pause
キーボード操作時はkey_inputをpauseに渡せばいいよって書いてあったので、
マウス操作ならpointer_inputでも渡せばいいかと思い下記を実行。
action_builder = driver.action
pointer = action_builder.pointer_input
elm = driver.find_element(:id, 'element_id')
driver.action.click_and_hold(elm)
.move_by(50,2).pause(pointer, 0.5)
.move_by(50,2).pause(pointer, 0.5)
.move_by(50,2).pause(pointer, 0.5)
.perform
pointer_input ないよっていわれる。そしてkey_inputもないらしい。ドキュメントに嘘つきやん。
これで動いた
action_builder = driver.action
pointer = action_builder.pointer_inputs[0]
elm = driver.find_element(:id, 'element_id')
driver.action.click_and_hold(elm)
.move_by(50,2).pause(pointer, 0.5)
.move_by(50,2).pause(pointer, 0.5)
.move_by(50,2).pause(pointer, 0.5)
.perform
なんでArrayで実装されてるのか謎。とりあえず[0]指定してみたけど期待通りに動いたからまあいっか。
関係ないけど
最初nodejsで実装しようとしてたんですが、そもそもActionsがないと怒られる…。
{ UnknownCommandError: Unrecognized command: actions
at buildRequest (C:\nodejs_scripts\node_modules\selenium-webdriver\lib\http.js:375:9)
at Executor.execute (C:\nodejs_scripts\node_modules\selenium-webdriver\lib\http.js:455:19)
at Driver.execute (C:\nodejs_scripts\node_modules\selenium-webdriver\lib\webdriver.js:696:38)
at process._tickCallback (internal/process/next_tick.js:68:7) name: 'UnknownCommandError', remoteStacktrace: '' }
http.jsにはActions定義されてるっぽいし謎すぎるから諦めてrubyで実装しました。これの原因わかる方いたら教えてください。。。
そもそもselenium使うならpython使えってことなのかな・・・・