scrollIntoView()在水平滚动方向上无法工作(Selenium)

8
我希望能够向右滚动到指定的列。 这是我尝试过的代码:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
这适用于垂直滚动,但不适用于水平滚动。
5个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
21

Element.scrollIntoView()

Element.scrollIntoView() 方法会将调用它的元素滚动到浏览器窗口的 Viewport 内。


语法

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

参数

此方法的参数有:

  • alignToTop(可选):布尔值,如果为 true,则元素的顶部将与可滚动祖先的可见区域的顶部对齐。这是默认值。如果为 false,则元素的底部将与可滚动祖先的可见区域的底部对齐。对应 scrollIntoViewOptions: {block: "end", inline: "nearest"}。
  • scrollIntoViewOptions(可选):是一个带有以下属性的对象:
  • behavior(可选):定义过渡动画。取值为 "auto" 或 "smooth" 中的一个。默认为 "auto"。
  • block(可选):定义垂直对齐方式。取值为 "start"、"center"、"end" 或 "nearest" 中的一个。默认为 "start"。
  • inline(可选):定义水平对齐方式。取值为 "start"、"center"、"end" 或 "nearest" 中的一个。默认为 "nearest"。

使用案例

根据您的代码行:

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

参数true表示布尔值,用于alignToTop,由此引起问题。


解决方案

要自动滚动水平,请在以下参数中选择inline参数之一:

  • start
  • center
  • end
  • nearest

备选方案

作为替代方案,可以使用以下选项之一

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

结尾

您可以在以下讨论中找到一些相关的详细信息:


2
谢谢,这让我有了一个好的开始!事实证明,在我的情况下,我需要将内联设置为“居中”,块设置为“末尾”。 - Dave Seidman
1
非常感谢!您对参数的描述帮了我很多。 - Julio Cesar Brito Gomes

2
您可以使用以下选项来水平滚动
JavascriptExecutor js = (JavascriptExecutor)driver; 
js.executeScript("document.getElementById('giveLocationHorizontal').scrollLeft += 250", "");
除此之外,我认为以下内容对您也有用:
//scroll up web page
   public void scrollUp(){
       JavascriptExecutor js = (JavascriptExecutor) driver;
       js.executeScript("window.scrollBy(0,-250)", "");
   }

    //scroll down web page
    public void scrollDown(){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("window.scrollBy(0,250)", "");
    }

    //scroll Horizontal
    public void scrollHorizontal(){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("window.scrollBy(250,0)", "");
    }

0
如果您有该列的th标签,则可以滚动到该列。
JavascriptExecutor jse = (JavascriptExecutor) driver;     
jse.executeScript("document.querySelector('table th:your-child').scrollIntoView();");

0

如果您有ID,可以尝试以下操作

JavascriptExecutor js = (JavascriptExecutor)driver; 
js.executeScript(
    "document.getElementById('gvLocationHorizontalRail').scrollLeft += 250", "")

jse.executeScript("window.scrollBy(1000,0)", "");

源代码:

http://www.softwaretestingstudio.com/scroll-selenium-webdriver-java/

通过使用动作

WebElement horizontalbar = driver.findElement(By.id("board") );
Actions action = new Actions(driver);

Actions moveToElement = action.moveToElement( horizontalbar );
for (int i = 0; i < 5; i++) {
    moveToElement.sendKeys(Keys.RIGHT).build().perform();
}

来源:

Selenium:使用Actions类实现水平滚动


0
您可以尝试以下任意一种发送键:
element.sendKeys("\n");
element.sendKeys(Keys.SHIFT);
element.sendKeys(Keys.TAB);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,