自建Windows服务器DevOps构建管道中Robot Framework Chrome自动化测试遇DevToolsActivePort不存在报错
解决Windows服务账户运行Robot Framework Chrome自动化的DevToolsActivePort错误
我碰到过好几个类似的场景,都是Windows服务账户(比如Network Service)运行Chrome自动化时的权限和配置问题,给你几个具体的修复步骤,应该能解决:
问题核心原因
这个错误通常出现在服务账户运行Chrome时:这类账户没有交互式桌面会话,权限受限,再加上你ChromeOptions配置里的几个小问题,就触发了DevToolsActivePort文件不存在的错误。Edge能正常运行是因为它的默认配置对服务环境更友好。
具体修复步骤
1. 修正ChromeOptions的binary_location设置错误
你现在的代码把Chrome二进制路径和--remote-debugging-port参数混在一起了,这是错误的。binary_location只需要指定Chrome.exe的路径,调试端口要单独作为启动参数添加:
# 错误写法 ${options.binary_location} Set Variable 'C:/Program Files/Google/Chrome/Application/chrome.exe' --remote-debugging-port=9515 # 正确写法 Call Method ${chromeserver_options} set_binary_location C:/Program Files/Google/Chrome/Application/chrome.exe Call Method ${chromeserver_options} add_argument --remote-debugging-port=9515
2. 给Network Service账户授予ChromeProfile目录的读写权限
你指定的C:/Temp/ChromeProfile目录,Network Service账户默认可能没有读写权限,导致Chrome无法创建必要的DevTools文件。操作步骤:
- 右键
C:/Temp/ChromeProfile文件夹 → 属性 → 安全 → 编辑 → 添加 - 在“输入对象名称来选择”里输入
NT AUTHORITY\NETWORK SERVICE,点击检查名称确认 - 给这个账户授予读取、写入、修改的权限,点击确定保存
3. 添加服务环境必需的Chrome启动参数
服务账户运行时没有交互式桌面,需要添加几个参数让Chrome能在无UI环境下正常运行:
# Chrome 95+推荐用new无头模式,兼容性更好 Call Method ${chromeserver_options} add_argument --headless=new # 关闭沙箱(服务账户权限不足,沙箱会导致启动失败) Call Method ${chromeserver_options} add_argument --no-sandbox # 禁用DevTools的共享内存限制,避免服务环境下的资源问题 Call Method ${chromeserver_options} add_argument --disable-dev-shm-usage
4. 确保ChromeDriver路径在服务环境的Path中
虽然你已经加了系统Path,但服务账户的环境变量可能和交互式用户不同。你已经在Create Webdriver时明确指定了executable_path,保持这个设置即可;如果还是有问题,可以确认服务能读取到D:/Python/Scripts/chromedriver.exe的路径。
修改后的完整Open Chrome关键字
*** Keywords *** Open Chrome [Arguments] ${url} [Documentation] Open the Chrome browser and go to the URL provided in the ${url} argument ... ${url} URL of the application being testing ${chromeserver_options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys, selenium.webdriver # 正确设置Chrome二进制路径 Call Method ${chromeserver_options} set_binary_location C:/Program Files/Google/Chrome/Application/chrome.exe # 添加调试端口参数 Call Method ${chromeserver_options} add_argument --remote-debugging-port=9515 # 配置用户数据目录(确保权限已设置) Call Method ${chromeserver_options} add_argument --user-data-dir=C:/Temp/ChromeProfile Call Method ${chromeserver_options} add_argument --profile-directory=Default # 原有参数保留 Call Method ${chromeserver_options} add_argument --ignore-certificate-errors Call Method ${chromeserver_options} add_argument --disable-web-security Call Method ${chromeserver_options} add_argument --disable-gpu # 添加服务环境必需参数 Call Method ${chromeserver_options} add_argument --headless=new Call Method ${chromeserver_options} add_argument --no-sandbox Call Method ${chromeserver_options} add_argument --disable-dev-shm-usage # 创建WebDriver Create Webdriver Chrome chrome_options=${chromeserver_options} executable_path=D:/Python/Scripts/chromedriver.exe Go To ${url} Maximize Browser Window
额外排查点
- 如果还是不行,尝试删除
C:/Temp/ChromeProfile目录,让Chrome重新创建(确保权限正确的情况下) - 检查服务器上是否有杀毒软件或防火墙阻止了Chrome/ChromeDriver的通信
- 确认Network Service账户能访问Chrome和ChromeDriver的安装目录(给这两个目录也加上Network Service的读取权限)
内容的提问来源于stack exchange,提问作者Lareau
相关产品推荐
相关产品推荐

