使用dash_duo的Dash单元测试持续触发TestingTimeoutError求助
解决Dash单元测试中dash_duo触发TestingTimeoutError的问题
核心原因
你遇到的超时并非测试代码里的断言导致,而是dash_duo fixture在初始化阶段(启动浏览器、连接Dash服务)未在默认超时时间内完成。以下是针对性的解决方法:
1. 确保ChromeDriver与Chrome版本完全匹配
这是最常见的问题:
- 打开Chrome浏览器,访问
chrome://version/查看主版本号(如118.0.5993.70) - 下载对应主版本的ChromeDriver,解压后确保其路径在系统环境变量
PATH中,或者在测试代码里指定路径 - 验证:命令行执行
chromedriver,若能正常输出启动日志则说明可用(Linux/macOS需先给文件加执行权限:chmod +x chromedriver)
2. 延长dash_duo的超时时间
默认超时时间可能不足以完成初始化,可通过自定义fixture修改:
在测试目录下创建conftest.py,添加以下代码:
import pytest @pytest.fixture def dash_duo(dash_duo): # 将超时时间改为60秒(可根据实际情况调整) dash_duo.wait_timeout = 60 yield dash_duo
3. 排查网络/环境拦截问题
- 暂时关闭本地代理、VPN或防火墙,避免它们阻止ChromeDriver启动浏览器或连接Dash服务
- 若在Linux环境下,添加Chrome启动参数规避沙箱限制,在
conftest.py中修改:
@pytest.fixture def dash_duo(dash_duo): dash_duo.options.add_argument("--no-sandbox") dash_duo.options.add_argument("--disable-dev-shm-usage") dash_duo.wait_timeout = 60 yield dash_duo
4. 禁用无头模式排查启动问题
强制使用有头模式运行测试,直观查看浏览器启动是否异常:
- 执行测试时添加命令行参数:
pytest --headed - 或者在
conftest.py中配置:
@pytest.fixture def dash_duo(dash_duo): dash_duo.options.headless = False # 禁用无头模式 yield dash_duo
5. 锁定兼容的依赖版本
部分新版本的Dash、Selenium可能存在兼容性问题,可尝试固定稳定版本:
# requirements.txt dash==2.11.1 selenium==4.9.0 dash-testing-stub==0.0.2
内容的提问来源于stack exchange,提问作者Austin J
相关产品推荐
相关产品推荐

