![](/img/trans.png)
[英]C# - selenium webdriver unable to open chrome browser window
[英]Unable to open chrome browser using Selenium Webdriver. Loading unpacked extensions are disabled by administrator
我正在使用 Selenium Webdriver、C#、Visual Studio 和 Chrome 浏览器自动化我的应用程序。
当 selenium 尝试打开 chrome 浏览器时,我正在弹出窗口下方。
Failed to load extension from:C:\Users\VARA~1.PAK\AppData\Local\Temp\scoped_dir6712_14913\internal.
Loading of unpacked extensions is disabled by the administrator.
单击弹出窗口的“确定”按钮后,Chrome 将成功打开,但由于以下错误,我的测试失败。
Test Name: _3_EnterDetailsAndSelectAnAddress_John
Test FullName: Veolia.BrentGWP.UserStories.Features.BrentGWPFeature._3_EnterDetailsAndSelectAnAddress_John
Test Source: : line 2147483647
Test Outcome: Failed
Test Duration: 0:00:47.8059413
Result Message:
Test method Veolia.BrentGWP.UserStories.Features.BrentGWPFeature._3_EnterDetailsAndSelectAnAddress_John threw exception:
System.InvalidOperationException: unknown error: cannot get automation extension
from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html
(Session info: chrome=41.0.2272.118)
(Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)
Assert.Fail failed. Please check through the execution report against scenario
Result StackTrace:
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWindow.Maximize()
at Veolia.Libraries.Driver.BeforeScenario() in c:\development\Veolia.Web.Brent\development\testing\Automation\Veolia.test.Framework\Libraries\Driver.cs:line 105
at lambda_method(Closure , IContextManager )
at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
at TechTalk.SpecFlow.Bindings.BindingInvokerExtensions.InvokeHook(IBindingInvoker invoker, IHookBinding hookBinding, IContextManager contextManager, ITestTracer testTracer)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.FireEvents(HookType bindingEvent)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.FireScenarioEvents(HookType bindingEvent)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnScenarioStart(ScenarioInfo scenarioInfo)
at TechTalk.SpecFlow.TestRunner.OnScenarioStart(ScenarioInfo scenarioInfo)
at Veolia.BrentGWP.UserStories.Features.BrentGWPFeature.ScenarioSetup(ScenarioInfo scenarioInfo) in c:\development\Veolia.Web.Brent\development\testing\Automation\Veolia.test.Framework\BrentGWP\UserStories\Features\AddressSearch.feature.cs:line 0
at Veolia.BrentGWP.UserStories.Features.BrentGWPFeature._3_EnterDetailsAndSelectAnAddress(String firstname, String lastname, String postcode, String email, String phoneNumber, String[] exampleTags) in c:\development\Veolia.Web.Brent\development\testing\Automation\Veolia.test.Framework\BrentGWP\UserStories\Features\AddressSearch.feature:line 16
at Veolia.BrentGWP.UserStories.Features.BrentGWPFeature._3_EnterDetailsAndSelectAnAddress_John() in c:\development\Veolia.Web.Brent\development\testing\Automation\Veolia.test.Framework\BrentGWP\UserStories\Features\AddressSearch.feature.cs:line 0
每次 selenium 打开 chrome 时,它都会将自动化扩展加载到 chrome 中以使用它。
但在我们的组织中,我们使用谷歌邮件,出于安全原因,我们的 IT 部门阻止向 Chrome 浏览器添加扩展程序(第三方和解包)。
如果我修改了注册表以允许第三方扩展,则测试成功执行。 但是我们的 IT 部门每天都会在每个系统上更新策略(自动化)。
我尝试使用ChromeOptions
类的AddExtension
和AddArgument
方法,但它们都ChromeOptions
并出现相同的错误。
有人可以帮我解决这个问题吗?
我尝试使用 ChromeOptions 类的 AddExtension 和 AddArgument 方法,但它们都不起作用并出现相同的错误。
我做了这样的事情( JAVA ):
ChromeOptions o = new ChromeOptions();
o.addArguments("disable-extensions");
o.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(o);
第二行就是你所需要的。 第三行只是使镀铬窗口最大化。
弹出窗口当前未显示。 哈。
希望以下解决方案对您有所帮助。
帮助克服如何,究竟?
Selenium 需要一个辅助扩展才能运行。 企业策略锁定已生效,因此您无法添加它。
如果您想运行测试,您需要向 IT 部门提出问题,毕竟您有正当理由。
更新: Selenium 现在似乎可以在没有自动化扩展的情况下运行。 例如,如果您必须避免使用扩展程序,请参阅此答案以了解有关如何在没有扩展程序的情况下启动 Chrome 的详细信息。
Chromedriver 似乎总是将其解压缩的扩展程序放到一个随机的临时位置, 这会导致随机 ID。 这使得无法将扩展列入白名单。
事实上,不,扩展的ID是固定的。 但是,企业策略不允许将解压缩的扩展程序列入白名单。 这是合理的,因为它可以绕过安全性(您只需要清单中的key
段来模拟 ID)。
使 Chromedriver 加载打包的扩展程序似乎需要大量返工,考虑到 Windows 对安装它们的限制可能是完全不可能的。
相应的Chromedriver 错误(似乎被忽略了很多)。
堆栈跟踪的部分
System.InvalidOperationException: unknown error: cannot get automation extension from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html
是因为 Chrome 上安装了 3rd 方扩展程序。 检查您是否安装了任何扩展程序,例如添加阻止程序或其他东西。
我遇到了同样的问题,并且能够通过删除 Chrome 中安装的扩展来解决它们。 如果您在 chrome 中安装了任何扩展,我很确定删除它们应该可以解决问题。
根据ChromeDriver 问题使用以下内容:
chromeOptions: {
args: ['--start-maximized', '--disable-extensions'],
useAutomationExtension: false
}
额外:用于在 Cucumber-js 中使用 Selenium
require('chromedriver')
var seleniumWebdriver = require('selenium-webdriver');
var {defineSupportCode} = require('cucumber');
function CustomWorld() {
var chromeCapabilities = seleniumWebdriver.Capabilities.chrome();
var chromeOptions = {
'args': ['--disable-extensions', '--start-maximized'],
'useAutomationExtension': false
};
chromeCapabilities.set('chromeOptions', chromeOptions);
this.driver = new seleniumWebdriver.Builder()
.forBrowser('chrome')
.withCapabilities(chromeCapabilities)
.build();
}
defineSupportCode(function({setWorldConstructor}) {
setWorldConstructor(CustomWorld)
})
为我弹出了解压扩展错误,我要求删除 chrome 中作为组织政策强制执行的限制。 取消限制后,我就可以运行程序而不会出现任何错误。 ChromeBrowser-GPO-Deny - 这是被删除的那个。 您可以在设置 - 扩展 - 检查开发人员模式中检查,看看一旦取消限制,是否检查加载解压扩展。 那你应该很好。
这个错误信息...
Failed to load extension from:C:\Users\VARA~1.PAK\AppData\Local\Temp\scoped_dir6712_14913\internal.
Loading of unpacked extensions is disabled by the administrator.
...implies that an extension was not been loaded as it was disabled by the administrator.
根据讨论Failed to load extension from: ... 管理员禁止加载未打包的扩展ChromeDriver使用Chrome 自动化扩展来自动化各种功能,如窗口大小调整、窗口定位等。
Failed to load extension弹出窗口意味着此扩展程序尚未加载。 如果您手动关闭弹出窗口,浏览器将正常运行, ChromeDriver命令将继续按预期工作。 但是在这种情况下,如果您尝试执行窗口大小调整或窗口重新定位命令,则会抛出一个错误为unknown error: cannot get automation extension
。
背景:直到ChromeDriver v2.28每当组织管理策略禁止扩展时,为了绕过限制,用户使用参数disable-extensions
如下( Java 代码示例):
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);
它完美地工作。
从 ChromeDriver v2.28开始,每当测试通过disable-extensions
标志时, ChromeDriver 会隐式传递disable-extensions-except
标志,该标志又会加载Chrome 自动化扩展。 此扩展程序帮助 Chromedriver 执行窗口大小调整和窗口重新定位操作。
因此,如果您的组织管理策略阻止扩展,则显示弹出窗口无法从以下位置加载扩展:...加载解压缩的扩展是预期行为。
作为解决方案,您可以将useAutomationExtension
功能设置为false
,如下所示( Java 代码示例):
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
此功能反过来将有助于不加载Chrome 自动化扩展程序,并且不会出现Failed to load extension
弹出窗口。 但是如果没有Chrome 自动化扩展,您将无法执行任何窗口大小调整/定位操作。
最好的方法是使用最新版本的ChromeDriver和Chrome组合,其中之一是:
ChromeDriver 73.0.3683.20
ChromeDriver 2.46
或ChromeDriver 72.0.3626.69
ChromeDriver 2.46
或ChromeDriver 71.0.3578.137
一些不同的选择:
ExtensionInstallWhitelist
添加到白名单*
的字符串键1的注册表项ExtensionInstallBlacklist
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.