在将Selenium Web驱动程序C#与Chrome一起使用时,我遇到了一种常见情况:如果运行测试的进程是“以管理员身份运行”(Visual Studio或nunit3 console.exe
),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已打开,但无法加载选项卡
“系统”类型的例外。WebDriver中出现“InvalidOperationException”。dll,但未在用户代码中处理
附加信息:会话未创建异常
从tab崩溃
(会话信息:chrome=64.0.3282.167)
(驱动程序信息:chromeDrive=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),平台=Windows NT 6.1.7601 SP1x86_64)(昆虫证书)
我不明白为什么它会失败。我觉得这可能与这个问题有关,但这个问题涉及另一个用户,而不是处于提升模式的同一个用户。
问:为什么C#Selenium ChromeDriver在以管理员身份运行时Chrome失败。我如何调查此问题的根本原因?
我已经创建了一个小的控制台应用程序,建议在评论:
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)。其他区别是操作系统(工作中的视窗7和家庭中的视窗10)和工作中的本地策略(这可能会影响Chrome设置)。
多亏了Tarun Lalwani
I,我将问题归结为似乎与“以管理员身份运行”本地策略有关的可能的Chrome问题:
>
在详细模式下运行Web驱动程序表明,当正常运行时,Chrome使用完全不同的配置文件路径,而不是作为管理员运行:
dir=“C:\Users”\
检查
chrome。在Chrome的安装文件夹中调试
文件(在每个临时配置文件中还创建了一个调试文件),我看到了以下错误:
[0303/120050.213:错误:进程_reader_win.cc(151)]SuspendThread:访问被拒绝。(0x5)
[0303/120050.214:错误:进程_reader_win.cc(123)]n线程:{Access Denied}进程已请求访问对象,但尚未被授予这些访问权限。(0xc0000022)
[0303/120050.215:错误:在进程中找不到异常\u snapshot\u win.cc(88)]线程ID 13672
[0303/120050.215:警告:崩溃报告\u异常\u handler.cc(62)]进程SnapshotWin::初始化失败
C:\Program Files(x86)\Google\Chrome\Application
所以,至少现在我知道这与作为管理员开始的Chrome有关,而与Chrome驱动程序无关。
我设法使用--no-沙盒
选项绕过了这个问题。虽然它在我的例子中有效,但我对这个解决方案不满意,因为no-沙盒不是一个推荐的选项。
我的最终最低工作代码:
var options = new ChromeOptions();
options.SetLoggingPreference(LogType.Driver, LogLevel.All);
options.AddAdditionalCapability("useAutomationExtension", false);
options.AddArguments("--no-sandbox");
var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("http://localhost");
不是解决方案的一部分,但它在尝试无沙盒选项时提供了帮助。
[17532:18272:0301/225923.296:错误:gpu_process_transport_factory.cc(1009)]丢失了UI共享上下文。
在进一步挖掘之后,我找到了一个简单而体面的解决方案:启动chromedriver。exe没有提升,并使用RemoteWebDriver
而不是ChromeDriver
连接到它(感谢Tarun Lalwani
指出了这种模式):
var options = new ChromeOptions();
options.SetLoggingPreference(LogType.Driver, LogLevel.All);
options.AddAdditionalCapability("useAutomationExtension", false);
var driver = new RemoteWebDriver(new Uri("http://localhost:9515"), options);
driver.Navigate().GoToUrl("http://localhost");
问题内容: Java中是否有一种方法可以要求系统控制管理员功能。当然不做:右键单击exe->以admin身份运行。 我想要的是UAC提供的框架,例如Windows Vista或Windows 7。 还是在从jar中制作exe时进行一些设置? 问题答案: 你必须创建一个清单文件,该清单文件指定你的应用程序需要管理员权限。你可以将清单包含在exe中,也可以将其保留为单独的文件(yourapp.exe.
本文向大家介绍c#通过app.manifest使程序以管理员身份运行,包括了c#通过app.manifest使程序以管理员身份运行的使用技巧和注意事项,需要的朋友参考一下 微软在Windows Vista开始引入了UAC(用户帐户控制)新技术(点击这儿了解什么是UAC)。当程序执行时需要权限的话,UAC会弹出警告消息:让用户确认是否同意允许这个程序改变你的计算机配置,windows需要得到你的许可
问题内容: 我正在开发一个小型关机计划程序项目,在该项目中,我必须将计算机置于模式下。我正在使用的命令是 此命令需要管理员权限,我不知道该如何获得。另外,在搜索以前的答案时,我发现我可以用作 正在执行任务,但正在浪费太多时间,即使软件变慢。还有其他快速方法吗?我正在使用Netbeans IDE。 问题答案: 您有几种选择 A.使用admin priv创建快捷方式。 快捷方式将运行 您的Java代码
问题内容: 到目前为止,我已经制作了一个Java应用程序,并在我的PC和铸造的PC中对其进行了测试。但是当我将我的应用程序“安装”到他的PC上时,该应用程序是我的另一个有迪斯科舞厅的朋友( Windows Vista 32位)无法正常工作,然后我继续搜索并发现问题是特权…我安装了Vista 32位和XP 32位虚拟机进行一些测试,我我无法使用管理员权限来运行我的应用程序。 有什么方法可以创建批处理
本文向大家介绍C#中用管理员身份运行程序代码实例,包括了C#中用管理员身份运行程序代码实例的使用技巧和注意事项,需要的朋友参考一下
问题内容: 我正在用Java编写安装程序,因此将需要提升的权限才能访问Program Files目录。根据我在网上找到的信息,我编写了如下的实现: 我用来检查特权的测试与此处找到的答案略有不同,看起来像这样: 当我运行它时,它没有按预期方式进行特权测试,并调用了exec。通过查看来检查该呼叫是否有效,表明该过程实际上仍然有效。但是,我没有看到任何有关新过程的证据,Windows也没有提示我授予权限