JavaScript 滚动向下滚动到屏幕上看不到元素的位置

JavaScript Scrolling scrolls down where the element cannot be seen on the screen

提问人:GAmeya 提问时间:10/29/2023 更新时间:10/29/2023 访问量:32

问:

我正在用 Java 学习 selenium,我正在尝试使用 javascript 向下滚动到特定元素。

我编写的脚本向下滚动,但位于看不到元素的下方。不知道为什么会发生这种情况。

我在控制台中得到的错误如下Exception in thread "main" org.openqa.selenium.ScriptTimeoutException: script timeout

谁能帮我了解我在这里到底做错了什么?

public class JavaScriptScrolling {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        
        driver.get("https://www.asda.com/");
        
        Thread.sleep(5000);
        
        driver.findElement(By.xpath("//button[@id='onetrust-accept-btn-handler']")).click();
        
        Thread.sleep(3000);
        
        JavaScriptUtils jUtil = new JavaScriptUtils(driver);
        
        WebElement element = driver.findElement(By.xpath("//a[text()='Explore more']"));
        
        jUtil.scrollIntoView(element);
        
        element.click();
    }

}

从 JavaScriptUtils 类进行滚动的方法如下

public void scrollIntoView(WebElement element) {
        js.executeAsyncScript("arguments[0].scrollIntoView(true);", element);
    }
javascript java selenium-webdriver

评论


答:

0赞 Mr Khan 10/29/2023 #1

该问题可能是由于 。若要解决此问题,可以根据需要调整 scrollIntoView 方法,使元素与容器的顶部或底部对齐。这是你如何做到的:scrollIntoView

public void scrollElementIntoView(WebElement element, boolean alignToTop) {
    String script = "arguments[0].scrollIntoView(" + alignToTop + ");";
    ((JavascriptExecutor) driver).executeScript(script, element);
}

然后,您可以根据用例调用此方法,并将其设置为 true 或 false。若要将元素对齐到顶部,请使用 true;如果要将其与底部对齐,请使用 false。alignToTop

// scroll the element to the top of the view
jUtil.scrollElementIntoView(element, true);

// scroll the element to the bottom of the view
jUtil.scrollElementIntoView(element, false);

评论

0赞 GAmeya 10/29/2023
当我传递false(到容器底部)时,它正确对齐,脚本工作正常,但是布尔值设置为true,对齐不正确,它会滚动到元素下方,直到点击时不可见。