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

时间:2015-04-08 14:53:27

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

我使用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

每次硒打开镀铬时,它都会将自动化扩展加载到chrome中以便与之配合使用。

但在我们的组织中,我们使用谷歌邮件,出于安全考虑,我们的IT部门阻止向Chrome浏览器添加扩展程序(第三方和解压缩)。

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

我尝试使用AddExtension类的AddArgumentChromeOptions方法,但它们都没有工作并且出现了同样的错误。

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

7 个答案:

答案 0 :(得分:10)

  

我尝试使用ChromeOptions类的AddExtension和AddArgument方法,但它们都没有工作并且出现了同样的错误。

我做了类似的事情( JAVA ):

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

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

当前没有显示弹出窗口。 HTH。

答案 1 :(得分:3)

帮助克服如何,确切地说?

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

如果您想要运行测试,那么在您有正当理由之后,您需要向IT部门提出问题。

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


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

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

制作Chromedriver加载扩展似乎需要大量的重做,并且考虑到Windows安装它们的限制可能是完全不可能的。

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

答案 2 :(得分:3)

希望以下解决方案能为您提供帮助。

  1. 打开注册表编辑器
  2. 搜索以下键 HKEY_CURRENT_USER \ SOFTWARE \策略\谷歌\镀铬\ ExtensionInstallBlacklist的 HKEY_LOCAL_MACHINE \ SOFTWARE \政策\谷歌\铬\ ExtensionInstallBlacklist的
  3. 如果您在上述位置找到任何键,请将其删除。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

堆栈跟踪部分

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

是因为Chrome上安装了第三方扩展程序。检查您是否安装了任何扩展程序,例如添加阻止程序或其他内容。

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

此错误消息...

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执行窗口大小调整和窗口重新定位操作。

因此,如果您的组织管理员策略阻止了扩展程序,则显示弹出窗口无法从以下位置加载扩展程序:...加载未打包的扩展程序是一种预期的行为。

解决方案

作为解决方案,您可以按以下方式将 useAutomationExtension 功能设置为false Java代码示例 ):

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);

此功能将有助于不加载 Chrome自动化扩展,并且不会显示 Failed to load extension 弹出窗口。但是如果没有 Chrome自动化扩展程序,您将无法执行任何窗口大小调整/定位操作。

琐事

最好的方法是在以下任意一种情况下使用最新版本的 ChromeDriver Chrome 组合:

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

替代品

一些不同的选择:

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