scrollIntoView vs moveToElement

在Selenium WebDriver中,有两种主要方法可以将元素放入可见区域

  1. 滚动到视图中

    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
    
  2. 使用 moveToElement 浏览器操作

    Actions actions = new Actions(driver);
    actions.moveToElement(element);
    actions.perform();
    

这些方法是否等效,哪一个应该首选?


答案 1

scrollIntoView

DOM 方法仅将元素滚动到视图中。如果无法将元素滚动到视图中,它将以静默方式失败。我在开头添加了一个不可见的元素,并调用了它。没有滚动,但没有错误。请注意,与使用 .Selenium只对将元素带入视野感兴趣,以便可以将鼠标放在其上。它不会让你对它将如何做到这一点有任何发言权。 但是,例如,允许您指定是否希望元素的顶部或底部与其可滚动的祖先对齐。(有关详细信息,请参阅此处scrollIntoViewscrollIntoViewbodyscrollIntoViewscrollIntoViewmoveToElementscrollIntoView

moveToElement

Selenium 方法执行两项操作:它将元素滚动到视图中,并将鼠标移动到元素的顶部。我还使用无法滚动或移动到的元素对其进行了测试,因为它们在屏幕上没有坐标,并且在这里也没有错误。moveToElement

选择一个

我默认使用 ,但有以下例外:moveToElement

  • 如果你根本不想影响Selenium放置鼠标的位置,但你想滚动一些东西进入视图(有点奇怪......但可能),那么你应该使用.scrollIntoView

  • 如果您需要使用为您提供的控件类型滚动元素(例如我上面提到的对齐选项),那么您必须使用它而不是.scrollIntoViewmoveToElement

  • 在某些情况下,尝试通过Selenium的命令模拟用户行为是不可能的,或者通过发送一系列Selenium命令来做非常昂贵。(每个命令都是到网络的往返行程。当测试服务器在互联网上的某个地方时,它会加起来。在这种情况下,我使用硒的.在这种情况下,最好在正在执行的脚本中使用,而不是结束脚本,创建一个来执行滚动,然后使用另一个来完成整个操作。executeScriptscrollIntoViewActionexecuteScript


答案 2