scrollIntoView() 不适用于水平滚动(Selenium)

Suc*_*tha 3 javascript java selenium scroll js-scrollintoview

我想向右滚动到一列。这是我试过的:

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Run Code Online (Sandbox Code Playgroud)

这适用于垂直滚动但不适用于水平滚动。

Deb*_*anB 9

Element.scrollIntoView()

Element.scrollIntoView()方法将调用它的元素滚动到浏览器窗口的视口中


句法

  • element.scrollIntoView()
  • element.scrollIntoView(alignToTop) // 布尔参数
  • element.scrollIntoView(scrollIntoViewOptions) // 对象参数

参数

该方法的参数是:

  • alignToTop(可选):是一个布尔值,如果为真,元素的顶部将与可滚动祖先的可见区域的顶部对齐。这是默认值。如果为 false,则元素的底部将与可滚动祖先的可见区域的底部对齐。对应于 scrollIntoViewOptions: {block: "end", inline: "nearest"}。
  • scrollIntoViewOptions (可选):是具有以下属性的对象:
    • behavior(可选):定义过渡动画。“自动”或“平滑”之一。默认为“自动”。
    • block(可选):定义垂直对齐方式。“开始”、“中心”、“结束”或“最近”之一。默认为“开始”。
    • inline(可选):定义水平对齐方式。“开始”、“中心”、“结束”或“最近”之一。默认为“最近”。

这个用例

根据您的代码行:

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Run Code Online (Sandbox Code Playgroud)

参数true指的是 的布尔值alignToTop。因此问题。


解决方案

要自动水平滚动,您需要inline在以下任一参数中传递参数: - start - centre - end -nearest


选择

作为替代,您可以使用以下任一选项

  • scrollLeft():Element.scrollLeft()属性获取或设置元素内容从其左边缘滚动的像素数。如果元素的方向rtl(从右到左),则scrollLeft0当滚动条位于其最右侧位置(滚动内容的开头)时,然后随着您向内容结尾滚动而逐渐为负。
  • scrollWidth():Element.scrollWidth()只读属性是对元素内容宽度的度量,包括由于溢出而在屏幕上不可见的内容。

奥特罗

您可以在以下位置找到一些相关的详细讨论:

  • 谢谢这让我开始了!事实证明,在我的例子中,我需要将内联设置为“中心”并将块设置为“结束” (2认同)