6

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

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

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

4

5 回答 5

14

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);

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


解决方案

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


选择

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

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

奥特罗

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

于 2019-10-24T08:26:07.120 回答
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)", "");
    }
于 2019-10-24T07:04:57.517 回答
0

如果你有身份证,你可以试试下面

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 类的水平滚动

于 2019-10-24T06:11:05.383 回答
0

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

JavascriptExecutor jse = (JavascriptExecutor) driver;     
jse.executeScript("document.querySelector('table th:your-child').scrollIntoView();");
于 2019-10-24T06:13:51.147 回答
0

您可以尝试以下发送密钥之一:

element.sendKeys("\n");
element.sendKeys(Keys.SHIFT);
element.sendKeys(Keys.TAB);
于 2019-10-24T09:19:08.033 回答