我使用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
类的AddArgument
和ChromeOptions
方法,但它们都没有工作并且出现了同样的错误。
有人可以帮我解决这个问题吗?
答案 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)
希望以下解决方案能为您提供帮助。
答案 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 组合:
ChromeDriver 73.0.3683.20
ChromeDriver 2.46
或 ChromeDriver 72.0.3626.69
ChromeDriver 2.46
或 ChromeDriver 71.0.3578.137
一些不同的选择:
ExtensionInstallWhitelist
添加到白名单ExtensionInstallBlacklist
,其中包含具有值 *
的字符串键 1