You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac OS下Selenium Java自动化测试:页面滚动至底部失败排查

页面滚动失败不一定和Mac版Chrome直接相关

以下是可能的原因和对应的解决办法:

1. 固定像素滚动的局限性

你第一段代码里用window.scrollBy(0,713)是固定滚动713像素,若页面实际总高度远大于这个值,自然无法滚动到底部。建议替换成直接滚动到文档底部的脚本:

JavascriptExecutor js = (JavascriptExecutor) driver;
// 优先使用document.documentElement获取滚动高度(部分页面的滚动根元素是html而非body)
js.executeScript("window.scrollTo(0, document.documentElement.scrollHeight)");
Thread.sleep(1000);
Long totalHeight = (Long) js.executeScript("return document.documentElement.scrollHeight");

2. Keys.END按键未生效的常见原因

第二段代码的问题通常不是Mac Chrome导致的,而是以下情况:

  • 目标元素未获得焦点:页面中若有其他可聚焦元素(如输入框),body可能没拿到焦点,导致按键指令无效。可以先点击body再发送按键:
    WebElement body = driver.findElement(By.tagName("body"));
    body.click();
    body.sendKeys(Keys.END);
    
  • 滚动容器不是body:部分页面用自定义的div等元素作为滚动容器,此时需要定位到该容器再执行滚动操作。比如找到滚动容器后,用JS滚动:
    WebElement scrollContainer = driver.findElement(By.cssSelector(".scroll-container"));
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollTop = arguments[0].scrollHeight", scrollContainer);
    

3. 版本兼容性问题

如果Chrome浏览器和ChromeDriver版本不匹配,也可能导致Selenium指令失效。请确保两者版本一致(ChromeDriver版本需对应Chrome的主版本号)。

4. 动态加载页面的滚动处理

若页面是滚动加载内容(比如无限滚动),单次滚动可能无法触底,需要循环滚动直到页面高度不再变化:

JavascriptExecutor js = (JavascriptExecutor) driver;
Long lastHeight = (Long) js.executeScript("return document.documentElement.scrollHeight");

while (true) {
    js.executeScript("window.scrollTo(0, document.documentElement.scrollHeight)");
    Thread.sleep(2000); // 等待动态内容加载
    Long newHeight = (Long) js.executeScript("return document.documentElement.scrollHeight");
    
    if (newHeight.equals(lastHeight)) {
        break; // 高度不再变化,说明已到底部
    }
    lastHeight = newHeight;
}

内容的提问来源于stack exchange,提问作者Rajeesha R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:15:02