【发布时间】:2018-02-15 16:17:15
【问题描述】:
我在 Chrome 中使用 Selenium Web Driver C# 时遇到了一个常见的情况:如果运行测试的进程是“以管理员身份运行”(Visual Studio 或 nunit3-console.exe)Chrome 将无法加载。
上下文
- 操作系统:Windows 7 x64
- Chrome:版本 64.0.3282.167(官方构建)(64 位)
- Selenium.Chrome.WebDriver (chromedriver.exe):2.35.0
- 本地政策不允许 chrome 扩展程序
步骤
-
启动一个同时初始化驱动程序的测试
var options = new ChromeOptions(); //TODO: check if really needed options.AddAdditionalCapability("useAutomationExtension", false); options.AddArguments("--allow-no-sandbox-job"); options.AddArguments("--ignore-certificate-errors"); var driver = new ChromeDriver(options); -
ChromeDriver 启动成功:
Starting ChromeDriver 2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73) on port 61771 Only local connections are allowed. DevTools listening on ws://127.0.0.1:12890/devtools/browser/e50864bd-9c30-445c-a3f8-e33d6b6e5b49 Chrome 已打开,但标签页无法加载
- 如果我在附加时刷新选项卡,我会收到以下异常信息:
“System.InvalidOperationException”类型的异常发生在 WebDriver.dll 但未在用户代码中处理
附加信息:会话未创建异常
从标签崩溃
(会话信息:chrome=64.0.3282.167)
(驱动程序信息:chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),平台=Windows NT 6.1.7601 SP1 x86_64) (InsecureCertificate)
我不知道为什么它失败了。我觉得它可能已连接this issue,但问题涉及另一个用户,而不是提升模式下的同一用户。
问题:为什么 C# Selenium ChromeDriver + Chrome 在以管理员身份运行时会失败。我该如何调查这个问题的根本原因?
我已经按照 cmets 中的建议创建了一个小型控制台应用程序:
static void Main(string[] args)
{
var options = new ChromeOptions();
// this is required since otherwise it will try to load some extension which is not allowed by local policy
options.AddAdditionalCapability("useAutomationExtension", false);
// try to catch some errors, but does not seem to work
options.AddArguments("--enable-logging");
options.AddArguments("--v=1");
var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("http://localhost");
}
在公司以外的另一台计算机上进行了一些测试,无论 Chrome 驱动程序如何(尝试了 2.35 和 2.36),它都能正常工作。其他区别是操作系统(工作中的 Windows 7 和家庭中的 Windows 10)和工作中的本地策略(这可能会影响 Chrome 设置)。
感谢Tarun Lalwani,我将问题简化为似乎与以管理员身份运行 + 本地策略 + 可能的 Chrome 问题有关:
-
以详细模式运行 Web 驱动程序表明 Chrome 在正常运行与以管理员身份运行时使用完全不同的配置文件路径:
- 正常运行:
dir="C:\Users\<my-dos-profile-name>\AppData\Local\Temp\scoped_dir21000_25907"(每次运行都有变化) - 以管理员身份运行:
dir="C:\WINDOWS\TEMP\scoped_dir7236_26307"
- 正常运行:
检查 Chrome 安装文件夹中的
chrome.debug文件(每个临时配置文件中还创建了一个调试文件)我看到以下错误:
[0303/120050.213:ERROR:process_reader_win.cc(151)] 挂起线程: 访问被拒绝。 (0x5)
[0303/120050.214:错误:process_reader_win.cc(123)] NtOpenThread: {Access Denied} 进程已请求访问对象,但已 没有被授予这些访问权限。 (0xc0000022)
[0303/120050.215:ERROR:exception_snapshot_win.cc(88)] 线程 ID 13672 在进程中找不到
[0303/120050.215:警告:crash_report_exception_handler.cc(62)] ProcessSnapshotWin::Initialize 失败
- 如果我只是以管理员身份运行 Chrome,所有还原选项卡都会崩溃,并且我会在日志中看到类似的错误。控制台 (cmd) 输出显示:
C:\程序文件 (x86)\Google\Chrome\Application>[7244:16744:0303/125934.383:ERROR:gpu_process_transport_factory.cc(1009)] 丢失 UI 共享上下文。
[7244:13716:0303/125956.057:ERROR:connection_factory_impl.cc(381)] 连接 MCS 端点失败,错误 -118
所以,至少现在我知道它与以管理员身份启动的 Chrome 相关,而与 Chrome 驱动程序无关。
【问题讨论】:
-
您是否从可能是证书问题的基础上对此进行了研究?谷歌搜索“chrome InsecureCertificate”发现了很多有趣的链接,但坦率地说,它们大部分都超出了我的想象。
-
@BillHileman -
--ignore-certificate-errors应该处理证书问题。无论如何,即使我对托管在 localhost(http 连接)中的网站运行 selenium,也会发生这种情况,所以我怀疑这个问题与证书有关。 -
@BillHileman - 另一个有趣的方面是它在 Firefox 上运行良好。另外,我注意到如果“以其他用户身份运行”,Chrome(和其他浏览器不会)无法工作,所以我觉得它可能与它处理配置文件数据的方式有关。
-
看来您链接到的问题自 2012 年以来一直是一个问题,并且从未解决,至少根据那里的一条评论。我希望我能提供一些帮助。
-
您能否在没有 nunit 的简单控制台应用程序中重现该问题?尝试提高日志级别,看看是否记录了原因(chromium.org/for-testers/enable-logging)。
标签: google-chrome selenium selenium-webdriver selenium-chromedriver