LoginSignup
1
0

More than 3 years have passed since last update.

Ruby*Seleniumでマウス操作actionにpauseさせる

Last updated at Posted at 2019-07-27

Seleniumでマウス操作したいけど、マウスの動きが速すぎるのか、期待通りに画面操作ができず。。。
なので、とりあえずマウス操作にpauseを加えようと思ったところ若干はまったのでメモです。

動かないコード

下記のドキュメントを参考に。
https://www.rubydoc.info/gems/selenium-webdriver/Selenium%2FWebDriver%2FW3CActionBuilder:pause

キーボード操作時はkey_inputをpauseに渡せばいいよって書いてあったので、
マウス操作ならpointer_inputでも渡せばいいかと思い下記を実行。

sample.rb
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もないらしい。ドキュメントに嘘つきやん。

これで動いた

sample.rb
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使えってことなのかな・・・・:innocent:

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0