【问题标题】:Scrolling using Selenium WebDriver with Java使用 Selenium WebDriver 和 Java 滚动
【发布时间】:2012-03-15 15:07:30
【问题描述】:

我正在使用 Selenium WebDriver 来自动化我的浏览器测试。 我的浏览器标题是浮动的,并且无论浏览器滚动如何都始终存在

因此,当我单击浏览器当前可见区域下方的某些元素时,selenium 会尝试将元素滚动到视图中并单击它们。

但是由于自动滚动,元素会滚动到浮动标题后面,当对它们执行任何操作时,页面标题中的元素会被点击。

有什么办法可以限制WebDriver的默认滚动

【问题讨论】:

标签: java selenium selenium-webdriver webdriver


【解决方案1】:

我最近遇到了这个问题,因为在我运行此代码时,Drupal 菜单阻止了该元素:

public void scrollTo(WebElement x) {
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", x);
        }

referencing this page 之后,我使用此代码更新以将布尔值设置为 false,效果很好:

public void scrollTo(WebElement x) {
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", x);
        }

【讨论】:

    【解决方案2】:

    使用下面的代码向上滚动和向下滚动

    Actions dragger = new Actions(driver);
    
    WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("<Scroll bar Element >"));
    
    // drag downwards
    
    int numberOfPixelsToDragTheScrollbarDown = 50;
    
    for (int i=10 ; i<500 ; i=i+numberOfPixelsToDragTheScrollbarDown) {
        try {
            // this causes a gradual drag of the scroll bar, 10 units at a time
            dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
            Thread.sleep(1000L);
        } catch(Exception e1){}
    } 
    
    // now drag opposite way (downwards)
    numberOfPixelsToDragTheScrollbarDown = -50;
    for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){
        // this causes a gradual drag of the scroll bar, -10 units at a time
        dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
        Thread.sleep(1000L);
    }
    

    【讨论】:

      【解决方案3】:

      向下滚动:

      System.setProperty("webdriver.chrome.driver",
                         "/home/shreetesh/chromedriver");
      WebDriver driver = new ChromeDriver(); 
      String url = "https://en.wikipedia.org/wiki/Main_Page";
      driver.get(url);
      JavascriptExecutor js = (JavascriptExecutor)driver;
      js.executeScript("scroll(0, 25000);");
      

      向上滚动只需将滚动的值替换为 (2500, 0)。

      【讨论】:

        【解决方案4】:

        简单的使用 .sendKeys(Keys.PAGE_DOWN); 当您的元素可见时,只需单击它,.click(element).perform(); 对我来说是这样的:

        clicker = new Actions(driver);
            clicker.sendKeys(Keys.PAGE_DOWN);
            Thread.sleep(1000);
            clicker.click(button).perform();     
            Thread.sleep(1000);
        

        【讨论】:

          【解决方案5】:

          可以滚动到顶部:

          private void scrollToTop() {
              JavascriptExecutor js = (JavascriptExecutor) webDriver;
              js.executeScript("window.scrollTo(0, 0);");
          }
          

          【讨论】:

            【解决方案6】:

            您可以使用 javascript 滚动到必要的位置 您需要使用 scrollTo 方法而不是 scrollBy 方法才能使其工作。

            public void scrollToElement(By by) {
                Locatable element = (Locatable) selenium.findElement(by);
                Point p= element.getCoordinates().getLocationOnScreen();
                JavascriptExecutor js = (JavascriptExecutor) selenium;  
                js.executeScript("window.scrollTo(" + p.getX() + "," + (p.getY()+150) + ");");
            }
            

            【讨论】:

              【解决方案7】:

              如果你想使用selenium webdriver在firefox窗口上滚动,其中一种方法是在java代码中使用javaScript,向下滚动的javeScript代码如下:

              JavascriptExecutor js = (JavascriptExecutor)driver;
                                  js.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight," +
                                  "document.body.scrollHeight,document.documentElement.clientHeight));");
              

              【讨论】:

              • 非常适合我。直接滚动到底部 :) - 对于那些想要 JS/量角器版本的人 browser.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));");
              【解决方案8】:
                  Locatable hoverItem = (Locatable) driver.findElement(By.xpath("//li[text()='Reklama w Google']"));
                  int y = hoverItem.getCoordinates().getLocationOnScreen().getY();
                  ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+y+");");
              

              【讨论】:

              • // 编译 int y = ((ILocatable)element).Coordinates.LocationInViewport.Y; 的 C# 4.5 版本((IJavaScriptExecutor)driver).ExecuteScript("window.scrollBy(0," + y + ");"); }
              • 另外,如果你有一个 html ID,你可以使用下面的
              • 你可以使用 onPage 代替 getLocationOnScreen
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-04-14
              • 2015-01-27
              • 2016-10-02
              • 2014-10-11
              • 2021-09-02
              • 2015-09-12
              • 2014-11-10
              相关资源
              最近更新 更多