Javascript scrollIntoView与moveToElement

Javascript scrollIntoView与moveToElement,javascript,java,html,selenium,selenium-webdriver,Javascript,Java,Html,Selenium,Selenium Webdriver,在Selenium WebDriver中,有两种主要方法可以将元素放入可见区域: : 使用: 这些方法等效吗?应首选哪种方法?scrollIntoView DOM方法scrollIntoView仅将元素滚动到视图中。如果scrollIntoView无法将元素滚动到视图中,它将无声地失败。我在body的开头添加了一个不可见的元素,并在其上调用了scrollIntoView。没有滚动任何内容,但没有错误。请注意,与使用moveToElement相比,使用scrollIntoView可以更好地控制

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

  • :

  • 使用:

  • 这些方法等效吗?应首选哪种方法?

    scrollIntoView
    DOM方法
    scrollIntoView
    仅将元素滚动到视图中。如果
    scrollIntoView
    无法将元素滚动到视图中,它将无声地失败。我在
    body
    的开头添加了一个不可见的元素,并在其上调用了
    scrollIntoView
    。没有滚动任何内容,但没有错误。请注意,与使用
    moveToElement
    相比,使用
    scrollIntoView
    可以更好地控制元素的滚动方式。Selenium只对将元素带入视图以便将鼠标放置在其上感兴趣。它没有给你任何关于它将如何做的发言权<代码>滚动视图但是允许您指定元素的顶部还是底部与其可滚动的祖先对齐。(有关详细信息,请参阅。)

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

    选择一个 我默认使用
    moveToElement
    ,但以下情况除外:

    • 如果您根本不想影响Selenium放置鼠标的位置,但希望将某些内容滚动到视图中(有点奇怪……但可能),则应使用
      scrollIntoView

    • 如果需要使用
      scrollIntoView
      提供的控件类型滚动元素(如上面提到的对齐选项),则必须使用它,而不是
      moveToElement

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


    moveToElement如果该元素在屏幕上不可见,则不要滚动到该元素。它只控制鼠标并将光标放在元素上。如果要滚动到一个不可见的元素,您必须告诉selenium滚动页面,直到元素位置在屏幕上可见为止(您可以将元素位置与视口进行比较),直到您看到JS scrollIntoView始终工作,但操作moveTo失败。为什么JS看起来更可靠?
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
    
    Actions actions = new Actions(driver);
    actions.moveToElement(element);
    actions.perform();