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

scrollIntoView() not working for horizontal scroll (Selenium)

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

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

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

如果你有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();
}

来源:

如果您有列的第 th 个标签,这应该允许您滚动到它

JavascriptExecutor jse = (JavascriptExecutor) driver;     
jse.executeScript("document.querySelector('table th:your-child').scrollIntoView();");

您可以使用以下选项水平滚动

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)", "");
    }

Element.scrollIntoView()

浏览器

Element.scrollIntoView() method scrolls the element on which it's called into the Viewport window.


语法

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

参数

此方法的参数是:

  • alignToTop(可选):是一个布尔值,如果为真,元素的顶部将对齐到可滚动祖先可见区域的顶部。这是默认值。如果为 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 - centre - end - nearest


备选

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

  • scrollLeft()Element.scrollLeft() property gets or sets the number of pixels that an element's content is scrolled from its left edge. If the element's directionrtl(从右到左),那么scrollLeft就是0 当滚动条位于最右边的位置时(在滚动内容的开头),然后当您滚动到内容的末尾时滚动条越来越负。
  • scrollWidth(): Element.scrollWidth() 只读 属性 是对元素内容宽度的度量,包括由于溢出而在屏幕上不可见的内容。

结尾

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

您可以尝试以下发送键之一:

element.sendKeys("\n");
element.sendKeys(Keys.SHIFT);
element.sendKeys(Keys.TAB);