【问题标题】:scrollIntoView() not working for horizontal scroll (Selenium)scrollIntoView() 不适用于水平滚动(Selenium)
【发布时间】:2020-02-20 09:59:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript java selenium scroll js-scrollintoview


    【解决方案1】:

    Element.scrollIntoView()

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


    语法

    • 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() 属性获取或设置元素内容从其左边缘滚动的像素数。如果元素的directionrtl(从右到左),那么当滚动条位于最右侧(滚动内容的开头)时,scrollLeft0 ,然后随着您滚动到内容的末尾而变得越来越消极。
    • scrollWidth(): Element.scrollWidth() 只读属性是元素内容宽度的度量,包括由于溢出而在屏幕上不可见的内容。

    结尾

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

    【讨论】:

    • 谢谢这让我开始了!结果在我的情况下,我需要将内联设置为“中心”并将块设置为“结束”
    【解决方案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)", "");
        }
    

    【讨论】:

      【解决方案3】:

      如果你有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: horizontal scroll using Actions class

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 2021-02-03
            • 2022-01-04
            • 2018-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-19
            • 1970-01-01
            相关资源
            最近更新 更多