繁体   English   中英

无法使用 Selenium Webdriver 打开 Chrome 浏览器。 加载解压的扩展被管理员禁用

[英]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类的AddExtensionAddArgument方法,但它们都ChromeOptions并出现相同的错误。

有人可以帮我解决这个问题吗?

我尝试使用 ChromeOptions 类的 AddExtension 和 AddArgument 方法,但它们都不起作用并出现相同的错误。

我做了这样的事情( JAVA ):

ChromeOptions o = new ChromeOptions();
o.addArguments("disable-extensions");
o.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(o);

第二行就是你所需要的。 第三行只是使镀铬窗口最大化。

弹出窗口当前未显示。 哈。

希望以下解决方案对您有所帮助。

  1. 打开注册表编辑器
  2. 搜索以下键 HKEY_CURRENT_USER\\Software\\Policies\\Google\\Chrome\\ExtensionInstallBlacklist HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\Google\\Chrome\\ExtensionInstallBlacklist
  3. 如果您发现在上述位置下设置了任何键,只需将其删除。

帮助克服如何,究竟?

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 自动化扩展,您将无法执行任何窗口大小调整/定位操作。

琐事

最好的方法是使用最新版本的ChromeDriverChrome组合,其中之一是:

  • 如果您使用的是Chrome 73 版本,请下载ChromeDriver 73.0.3683.20
  • 如果您使用的是Chrome 72 版,请下载ChromeDriver 2.46ChromeDriver 72.0.3626.69
  • 如果您使用的是Chrome 71 版,请下载ChromeDriver 2.46ChromeDriver 71.0.3578.137
  • 对于旧版本的 Chrome,请参阅此讨论

备择方案

一些不同的选择:

  • 注册表项ExtensionInstallWhitelist添加到白名单
  • 删除包含值为*的字符串键1注册表项ExtensionInstallBlacklist

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM