在Ruby Selenium中,使鼠标操作动作暂停

想要使用Selenium进行鼠标操作,但是鼠标的移动速度太快了,导致无法按照预期进行屏幕操作…
因此,我想先在鼠标操作中加入暂停,但是遇到了一点困难,所以写下了这些备忘录。

静止不動的程式碼

请参考以下文档:
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

为什么使用数组实现这个呢,真是个谜。无论如何,我尝试指定为[0],结果和期望一样,所以算了。

无关紧要,不过

我最初想用Node.js来实现,但是实际上没有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呢?

bannerAds