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

在Selenium脚本中添加Thread.sleep导致执行中断的问题求助

Mac下Selenium添加Thread.sleep后抛出NoSuchWindowException异常分析及解决

问题描述

使用Selenium编写的脚本启动URL并执行点击操作,在任意步骤添加Thread.sleep(2000)时,脚本执行中断并抛出NoSuchWindowException;移除Thread.sleep后脚本可正常执行。该问题仅出现在Mac系统的Chrome浏览器中,Windows系统下无此异常。

异常信息

Dec 26, 2022 3:55:35 PM org.openqa.selenium.support.ui.ExpectedConditions findElement
WARNING: WebDriverException thrown by findElement(By.xpath: //button[text()='Continue'])
org.openqa.selenium.NoSuchWindowException: no such window: target window already closed
from unknown error: web view not found

相关代码

WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.addArguments("enable-automation");
options.addArguments("--no-sandbox");
options.addArguments("--disable-infobars");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-browser-side-navigation");
options.addArguments("--disable-gpu");
driver = new ChromeDriver(options);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
wait = new WebDriverWait(driver, 30);

driver.get("<ApplicationURL>");
Thread.sleep(2000);
driver.findElement(By.xpath("<some button to click>")).click();

环境信息

  • Chrome浏览器版本:108.0.5359.124
  • ChromeDriver版本:108.0.5359.71
  • Mac OS版本:Monterey 12.6.2
  • Java版本:1.8.0_352
  • Selenium版本:3.11.0

原因分析

  1. Selenium版本兼容性缺陷:使用的Selenium 3.11.0发布于2018年,与较新版本的Chrome(108.x)在Mac系统下存在兼容性问题,强制等待(Thread.sleep)时,ChromeDriver与Chrome的进程通信易出现异常,导致浏览器窗口被误判为已关闭。
  2. Mac系统进程优化机制:Mac的系统闲置回收机制可能在Thread.sleep等待期间,将Chrome的渲染进程标记为闲置并回收,导致WebDriver无法找到对应的web view。
  3. 无效ChromeOptions参数干扰:--no-sandbox参数主要用于Linux系统绕过沙箱限制,在Mac下启用该参数可能干扰Chrome正常进程管理,增加窗口异常关闭概率。
  4. Thread.sleep的不可靠性:强制等待不感知页面状态,若等待期间页面发生跳转或窗口状态变更,后续操作会因找不到原窗口报错。

解决方法

  1. 替换Thread.sleep为显式等待:使用WebDriverWait等待目标元素可点击,避免强制等待的盲目性:
    driver.get("<ApplicationURL>");
    // 等待按钮可点击后再执行操作
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("<some button to click>"))).click();
    
  2. 升级Selenium版本:将Selenium升级至与Chrome 108.x兼容的版本(如4.5.x及以上),修复旧版本的兼容性缺陷。
  3. 调整ChromeOptions参数:移除Mac下不必要的--no-sandbox参数,优化启动配置:
    ChromeOptions options = new ChromeOptions();
    options.addArguments("start-maximized");
    options.addArguments("enable-automation");
    options.addArguments("--disable-infobars");
    options.addArguments("--disable-dev-shm-usage");
    options.addArguments("--disable-browser-side-navigation");
    options.addArguments("--disable-gpu");
    
  4. 匹配ChromeDriver与Chrome版本:下载与Chrome浏览器版本(108.0.5359.124)完全一致的ChromeDriver,消除版本差异导致的通信异常。

内容的提问来源于stack exchange,提问作者Vinay Sagar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:40:53