鼠标移动的时间

时间:2014-10-22 20:21:56

标签: java selenium selenium-webdriver mouseevent

我想记录一些鼠标与网页的交互,或者更具体地说,是在该网页上使用canvas元素。因此,与各种网页元素的交互几乎没有用处,而是通过精确的位置控制与画布交互是至关重要的。

有一段时间我正在查看Mouse界面。我有点惊讶,我可以提供移动偏移,但不是mouseDownmouseUp。我花了一段时间才弄清楚我可以先将WebElement转换为Coordinates,然后再将其Locatable接口转换为this question接口。

LocatableCoordinates位于名为internal的包中。最后(在Actions的帮助下)我了解了commit。其文件说明:

  

用于模拟复杂用户手势的面向用户的API。使用此类而不是直接使用键盘或鼠标。

所以我似乎应该使用它。在这种情况下表达我的动作似乎很容易。但让我担心的是时机。我希望以与录制时相同的速度移动物体。我并不打算完全重现计时,但是一些鼠标操作会在计时器步骤中触发计算,因此鼠标事件和计时器之间的交互应该以自然的方式进行模拟。

我在wait中看不到sleepActions方法。我看到的是pause方法,但已被弃用。弃用消息显示为:

  

'暂停'被认为是一种糟糕的设计实践。

WebDriverWait补充说,弃用也没有更多细节。

  • 为什么pause被认为是糟糕的设计?
  • 我是否可以指望驱动程序支持此命令,尽管已弃用?
  • 我不得不担心这个命令会很快消失吗?
  • 我应该如何实现鼠标移动的时间?

似乎有很多地方可以实现某种形式的等待。 WebDriver.Timeoutsthe sources似乎是最有可能的候选人。但是,真正优先执行由单个鼠标移动组成的Actions,并将它们与等待交错吗?特别是如果我可能通过慢速链接远程控制某台机器?以长pause序列交错Actions语句对我来说似乎更合理。

编辑1:查看one我看到Actions.pause只是使用Thread.sleep实现的。因此延迟只是本地的,并且坏链路上的网络延迟可能会严重扭曲时序。我还发现了两个关于Actions.pauseanother的错误报告,要求不要弃用,{{3}}要求替代。后者带有基于WebDriverWait的概念验证实现。但考虑到这一点,它的时间基于Clock,并且该接口的唯一实现是SystemClock所以看起来所有时序都是受客户端控制的。我认为我们需要的是一些用于服务器端延迟的线上命令。

0 个答案:

没有答案