我想记录一些鼠标与网页的交互,或者更具体地说,是在该网页上使用canvas元素。因此,与各种网页元素的交互几乎没有用处,而是通过精确的位置控制与画布交互是至关重要的。
有一段时间我正在查看Mouse
界面。我有点惊讶,我可以提供移动偏移,但不是mouseDown
和mouseUp
。我花了一段时间才弄清楚我可以先将WebElement
转换为Coordinates
,然后再将其Locatable
接口转换为this question接口。
但Locatable
和Coordinates
位于名为internal
的包中。最后(在Actions
的帮助下)我了解了commit。其文件说明:
用于模拟复杂用户手势的面向用户的API。使用此类而不是直接使用键盘或鼠标。
所以我似乎应该使用它。在这种情况下表达我的动作似乎很容易。但让我担心的是时机。我希望以与录制时相同的速度移动物体。我并不打算完全重现计时,但是一些鼠标操作会在计时器步骤中触发计算,因此鼠标事件和计时器之间的交互应该以自然的方式进行模拟。
我在wait
中看不到sleep
或Actions
方法。我看到的是pause
方法,但已被弃用。弃用消息显示为:
'暂停'被认为是一种糟糕的设计实践。
WebDriverWait
补充说,弃用也没有更多细节。
pause
被认为是糟糕的设计?似乎有很多地方可以实现某种形式的等待。 WebDriver.Timeouts
和the sources似乎是最有可能的候选人。但是,真正优先执行由单个鼠标移动组成的Actions
,并将它们与等待交错吗?特别是如果我可能通过慢速链接远程控制某台机器?以长pause
序列交错Actions
语句对我来说似乎更合理。
编辑1:查看one我看到Actions.pause
只是使用Thread.sleep
实现的。因此延迟只是本地的,并且坏链路上的网络延迟可能会严重扭曲时序。我还发现了两个关于Actions.pause
,another的错误报告,要求不要弃用,{{3}}要求替代。后者带有基于WebDriverWait
的概念验证实现。但考虑到这一点,它的时间基于Clock
,并且该接口的唯一实现是SystemClock
所以看起来所有时序都是受客户端控制的。我认为我们需要的是一些用于服务器端延迟的线上命令。