在Redhat Linux上运行Selenium测试用例时启动Chrome报错求助
解决Linux下Mono运行C# Selenium ChromeDriver启动失败问题
结合你给出的报错信息、版本匹配情况(ChromeDriver 2.36 确实兼容 Chrome 65.0.3325.162),以及Linux+Mono的运行环境,给你几个针对性的解决方案:
1. 确保ChromeDriver具备可执行权限
Linux下下载的ChromeDriver默认可能没有执行权限,先进入ChromeDriver所在目录,执行:
chmod +x chromedriver
2. 在代码中明确指定ChromeDriver路径
Mono环境下经常会出现无法自动识别ChromeDriver默认路径的情况,建议在代码里显式指定驱动位置:
// 替换为你的ChromeDriver实际所在目录,比如/usr/local/bin var driverService = ChromeDriverService.CreateDefaultService("/path/to/your/chromedriver"); // 可选:隐藏命令行窗口(不需要调试时开启) driverService.HideCommandPromptWindow = true; IWebDriver driver = new ChromeDriver(driverService); driver.Close();
3. 处理无GUI/服务器环境的运行限制
如果你的Linux环境没有图形界面(比如云服务器),必须添加Chrome的无头模式参数,同时解决Linux特有的沙箱权限问题:
var options = new ChromeOptions(); // 启用无头模式,无需图形界面即可运行 options.AddArgument("--headless"); // 禁用沙箱(非root用户在Linux下运行Chrome的必要参数) options.AddArgument("--no-sandbox"); // 解决/dev/shm临时空间不足的问题 options.AddArgument("--disable-dev-shm-usage"); // 可选:指定窗口大小,避免部分页面布局异常 options.AddArgument("--window-size=1920,1080"); var driverService = ChromeDriverService.CreateDefaultService("/path/to/your/chromedriver"); IWebDriver driver = new ChromeDriver(driverService, options); driver.Close();
4. 检查端口占用情况
报错中提到的localhost:37423端口可能被其他进程占用,你可以用以下命令排查并清理:
# 查找占用37423端口的进程 lsof -i :37423 # 杀掉对应进程(替换<PID>为实际查到的进程ID) kill -9 <PID>
5. 确认NuGet包安装正确性
确保你的项目中已经正确安装了Selenium.WebDriver和Selenium.ChromeDriver包,版本要和你使用的ChromeDriver(2.36)保持一致。
内容的提问来源于stack exchange,提问作者Mahmoud Gamal
相关产品推荐
相关产品推荐

