在 Selenium WebDriver 中,有两种主要方法将一个元素放入可见区域:
-
滚动到视图中:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
-
Using moveToElement浏览器操作:
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();
这些方法是否等效?应该首选哪一种?
scrollIntoView
DOM 方法scrollIntoView
只将元素滚动到视图中。如果scrollIntoView
无法将元素滚动到视图中,它只会默默地失败。我在开头添加了一个不可见的元素body
并打电话给scrollIntoView
在上面。没有任何滚动,但没有错误。请注意,您可以更好地控制how元素滚动scrollIntoView
比与moveToElement
。 Selenium 只对将元素置于视图中以便鼠标可以放置在其上感兴趣。它没有让你对如何做有任何发言权。scrollIntoView
但是,例如,您可以指定是否希望元素的顶部或底部与其可滚动祖先对齐。 (看here了解详情。)
moveToElement
硒法moveToElement
做了两件事:它将元素滚动到视图中并将鼠标移动到元素顶部。我还使用无法滚动或移动到的元素对其进行了测试,因为它们在屏幕上没有坐标,并且这里也没有错误。
选择一个
我默认使用moveToElement
,但以下情况除外:
如果你根本不想影响 Selenium 放置鼠标的位置,但你想将某些内容滚动到视图中(有点奇怪......但可能),那么你应该使用scrollIntoView
.
如果您需要使用那种控件来滚动元素scrollIntoView
给你(就像我上面提到的对齐选项),那么你必须使用它而不是moveToElement
.
在某些情况下,尝试通过 Selenium 命令模拟用户行为是不可能的,或者通过发送一系列 Selenium 命令来模拟用户行为的成本非常高。 (每个命令都是到网络的往返。当测试服务器位于互联网上的某个地方时,它就会累加起来。)在这种情况下,我使用 Selenium 的executeScript
。在这种情况下,使用scrollIntoView
在正在执行的脚本中,而不是结束脚本,创建一个Action
执行滚动,并用另一个完成整个操作executeScript
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)