【问题标题】:Unable to open chrome browser using Selenium Webdriver. Loading unpacked extensions are disabled by administrator无法使用 Selenium Webdriver 打开 chrome 浏览器。管理员禁用加载解压缩的扩展程序
【发布时间】:2015-06-13 14:50:19
【问题描述】:

我正在使用 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 中以使用它。

但在我们的组织中,我们正在使用 google 邮件,并且我们的 IT 部门出于安全原因阻止向 Chrome 浏览器添加扩展程序(第三方和未打包的)。

如果我修改注册表以允许第三方扩展,则测试执行成功。但是我们的 IT 部门每天都会在每个系统上更新政策(自动)。

我尝试使用ChromeOptions 类的AddExtensionAddArgument 方法,但它们都没有工作并得到相同的错误。

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

【问题讨论】:

    标签: c# selenium google-chrome selenium-chromedriver chrome-automation-extension


    【解决方案1】:

    帮助克服如何,究竟是什么?

    Selenium 需要辅助扩展才能运行。企业策略锁定已生效,因此您无法添加它。

    如果您想运行测试,您需要向您的 IT 部门提出问题,毕竟您有正当理由。

    更新: Selenium 现在似乎可以在没有自动化扩展的情况下运行。例如,请参阅this answer,详细了解如何在不使用扩展程序的情况下启动 Chrome。


    Chromedriver 似乎总是将其解压后的扩展放入一个随机的临时位置,这会导致一个随机 ID。这使得无法将扩展程序列入白名单。

    其实不是,扩展的ID是固定的。但是,企业策略不允许将未打包的扩展列入白名单。这是合理的,因为它可以绕过安全性(您只需要清单中的 key 字段来模拟 ID)。

    让 Chromedriver 加载打包扩展似乎需要大量返工,并且考虑到 Windows 对安装它们的限制可能是完全不可能的。

    对应的Chromedriver bug(似乎被忽略了)。

    【讨论】:

    • 这是我正在寻找的最后一个选项。
    • 您可以请求 IT 仅通过 ID 将 Selenium 的扩展列入白名单。不过,你必须这样做。
    • 将其添加到白名单也对我没有帮助。还是报错
    • 如果您从临时文件夹解压加载,则 ID 每次都会更改,因为它基于路径。您需要使用打包版本。
    • 我不知道如何获得打包版本。 Selenium 从某个临时位置动态加载它。
    【解决方案2】:

    堆栈跟踪部分

      System.InvalidOperationException: unknown error: cannot get automation extension from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html
    

    是因为 Chrome 上安装了第 3 方扩展程序。检查您是否安装了任何扩展程序,例如添加阻止程序之类的。

    我遇到了同样的问题,并且能够通过删除 Chrome 中安装的扩展程序来解决这些问题。 如果您在 chrome 中安装了任何扩展程序,我很确定删除它们应该可以解决问题。

    【讨论】:

    • Selenium,除非你做一些非常具体的事情,否则总是从一个空的配置文件开始。
    • @Xan 我猜你对第三方扩展和 Selenium WebDriver 感到困惑。您能否说明错误中出现与 Chrome 扩展程序 ID 相同的扩展程序的原因?在我的情况下,堆栈跟踪中的 ID 与已安装扩展之一的 ID 相同,您如何回答?
    • Selenium Chromedriver 通过创建要求注入的所有扩展的解压缩副本来工作,始终包括其自己的具有上述 ID 的“帮助”扩展。然后它使用新的空白配置文件加载 Chrome(因此没有扩展,除非您使用 Chromedriver 选项专门覆盖用户数据文件夹)并尝试添加未打包的扩展。无论配置文件如何,Chrome 都会读取企业政策并阻止加载帮助程序扩展(Chrome 输出证明了这一点)。然后 Chromedriver 无法找到带有上述堆栈跟踪的扩展。
    • 免责声明:我从未使用过 Selenium Chromedriver,但为了这个问题,我专门查看了它的源代码和错误跟踪器来确认。
    • 您说的是 Selenium 可以控制的扩展程序,我说的是您手动安装到 Chrome 的扩展程序(第 3 方扩展程序)。我对此很有信心,因为匹配第 3 方扩展的 ID 和堆栈跟踪中存在的扩展 ID。这怎么可能是错的?
    【解决方案3】:

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

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

    【讨论】:

    • 不知道为什么有人投了反对票。这是唯一能让我解决问题的方法。
    • 此解决方案也适用于我的 Windows 8.1 计算机。
    【解决方案4】:

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

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

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

    第二行就是你所需要的。 第三行只是让 chrome 窗口最大化。

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

    【讨论】:

    • 哇。这实际上似乎有效。我想知道是否有一些功能在没有扩展的情况下丢失/损坏,但我的测试现在正在运行
    【解决方案5】:

    解压后的扩展错误弹出给我,我要求删除 chrome 中作为组织策略强制执行的限制。取消限制后,我就可以运行该程序而不会出现任何错误。 ChromeBrowser-GPO-Deny - 这是被删除的那个。您可以检查设置 - 扩展 - 检查开发人员模式,看看是否在移除限制后检查加载解压扩展。那你应该很好。

    【讨论】:

    • 我们目前在 Protractor E2E 测试中遇到了这个解压扩展问题。我发现这篇文章讨论了一个新选项,chromeOptions.useAutomationExtensions - bugs.chromium.org/p/chromium/issues/detail?id=604324(见 3 月 31 日帖子的评论 22)。有没有人成功实施了这个选项?如果我无法正确实施此选项,那么我们将不得不与我们的 IT 部门沟通需要批准/列入白名单的 Chrome 扩展程序。问题再次是帮助程序扩展似乎每次都被解压缩到不同的文件夹中......
    • 我没有这样做,因为删除浏览器拒绝后我的问题得到了解决。祝你好运,也请告诉我们。
    【解决方案6】:

    根据ChromeDriver Issues 使用以下内容:

    chromeOptions: {
        args: ['--start-maximized', '--disable-extensions'],
        useAutomationExtension: false
    }
    

    额外:用于将 Selenium 与 Cucumber-js 一起使用

    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)
    })
    

    【讨论】:

      【解决方案7】:

      此错误消息...

      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 extention from: ... Loading of unpacked extensions is disabled by the administrator 的讨论,ChromeDriver 使用 Chrome 自动化扩展 来自动化各种功能,如窗口大小调整、窗口定位等。

      加载扩展失败弹窗表示该扩展尚未加载。如果您手动关闭弹出窗口,浏览器将正常运行,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 执行窗口大小调整和窗口重新定位操作。

      因此,如果您的组织管理员政策阻止扩展,则显示弹出 Failed to load extension from: ... Loading of unpacked extensions 是预期的行为。

      解决方案

      作为一种解决方案,您可以将 useAutomationExtension 能力设置为 false,如下所示(Java 代码示例): p>

      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,请参阅discussion

      替代方案

      一些不同的选择:

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

      【讨论】:

        猜你喜欢
        • 2014-10-04
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        • 2013-05-08
        • 1970-01-01
        • 2021-06-10
        • 1970-01-01
        • 2021-05-16
        相关资源
        最近更新 更多