Docker中Serenity BDD(Azure Pipeline):PDF下载仍触发“另存为”弹窗
Docker环境下Serenity BDD + Edge浏览器PDF下载弹窗解决方案
问题背景
在Azure Pipeline的Docker容器中,通过Selenium Grid运行Serenity BDD测试时,点击PDF下载链接会触发系统级“另存为”弹窗,常规的serenity.conf配置(如download.prompt_for_download = false)无效,且该弹窗不在DOM范围内无法被Serenity捕获。
核心原因
Docker容器内的Edge浏览器配置生效逻辑与本地不同:
- 下载目录不存在或权限不足时,Edge会忽略静默下载配置
- 内置PDF阅读器优先级高于下载配置,导致弹窗触发
- 新版Edge的下载气泡特性可能干扰静默下载逻辑
有效解决步骤
1. 修正Edge浏览器偏好设置
更新serenity.conf中的ms:edgeOptions,强制PDF直接下载并禁用弹窗相关特性:
webdriver { driver = remote autodownload = true remote { driver = edge } capabilities { browserName = "MicrosoftEdge" acceptInsecureCerts = true "ms:edgeOptions" { args = ["test-type", "ignore-certificate-errors", "inPrivate", "disable-infobars", "disable-gpu", "no-sandbox", "disable-default-apps", "disable-popup-blocking", "window-size=1600,1000", "--disable-features=DownloadBubble"] prefs { download { default_directory = "/home/seluser/Downloads/" directory_upgrade = true prompt_for_download = false extensions_to_open = "" # 禁止自动打开任何下载文件 } plugins.always_open_pdf_externally = true # 强制PDF不通过内置阅读器打开,直接触发下载 profile.default_content_settings.popups = 0 safebrowsing.enabled = true pdfjs.disabled = true # 禁用内置PDF阅读器 } } } timeouts { implicitlywait = 10000 pageLoad = 600000 implicit = 10000 } }
2. 确保Docker容器内下载目录权限合规
在Selenium Edge节点的启动流程中预先创建下载目录并设置正确权限,避免Edge因目录不可用 fallback 到弹窗:
修改docker-compose.yml中的Edge服务配置(需根据你的Selenium Hub配置调整环境变量):
edge: image: selenium/edge:4.15.0-20231020 # 与视频容器版本匹配 container_name: edge volumes: - ./selenium_downloads:/home/seluser/Downloads command: > bash -c "mkdir -p /home/seluser/Downloads && chown seluser:seluser /home/seluser/Downloads && /opt/bin/start-selenium-node.sh" environment: - SE_EVENT_BUS_HOST=selenium-hub - SE_EVENT_BUS_PUBLISH_PORT=4442 - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 edge_video: image: selenium/video:ffmpeg-4.3.1-20231020 container_name: edge_video volumes: - c:/temp/selenium_videos:/videos depends_on: - edge environment: - DISPLAY_CONTAINER_NAME=edge - FILE_NAME=edge_video.mp4
3. 验证配置生效
- 测试完成后进入Edge容器,检查
/home/seluser/Downloads目录是否存在目标PDF文件 - 查看测试视频录制品,确认“另存为”弹窗未出现
- 检查容器内Edge的偏好配置文件(路径:
/home/seluser/.config/microsoft-edge/Default/Preferences),确认上述配置项已正确写入
内容的提问来源于stack exchange,提问作者poisn
相关产品推荐
相关产品推荐

