运行Protractor E2E测试时加载解压扩展错误

时间:2017-08-08 17:04:06

标签: selenium-webdriver google-chrome-extension protractor selenium-chromedriver

在最近使用Chrome推出了一些政策更新后,我们在使用Selenium Web Driver运行Protractor E2E测试时遇到了解压扩展问题。

错误是:

Failed to load extension from:C:\Users\...\AppData\Local\Temp\scoped_dir9090_11922\internal.

管理员禁用加载解压缩的扩展程序。

此内部文件夹已从internal.zip解压缩,并包含以下manifest.json

{
  "key": "MIGfMA0GCSqGSI...",
  "name": "Chrome Automation Extension",
  "version": "1",
  "manifest_version": 2,
  "description": "Exposes extension APIs for automating Chrome",
  "background": {
    "scripts": ["background.js"]
  },
  "permissions": [
     "tabs", "management", "<all_urls>"
  ]
}

量角器配置文件中,我们尝试在此处禁用扩展程序,但它没有效果:

multiCapabilities: [        
         {
             browserName: 'chrome',
             chromeOptions: {
                 args: [
                     '--disable-extensions', '--disable-plugins', '--start-maximized'
                 ]
             }
         },
    ]

根据comment 22 on March 31st中的this Chrome bug,他们引入了新的Chrome选项--useAutomationExtension。因此,一旦我将Protractor再次放在我的盒子上,我将按以下方式尝试:

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

我的主要问题是:

是否有人确切地确定了解压缩的扩展名,以及与白皮书目的进行通信的IT部门? Here is an old post which addresses this issue

另外:

  1. 是否有人在 protractor.conf.js 中成功实施了--useAutomationExtension=false选项?
  2. 我将在全天进展时更新这篇文章,希望增加一些清晰度。

2 个答案:

答案 0 :(得分:3)

错误可以通过protractor.conf.js中的以下chromeOptions来解决:

<强> 1。禁用AutomationExtension

chromeOptions: {
  useAutomationExtension: false
}

<强> 2。以无头模式运行Chrome(无UI)

chromeOptions: {
 args: [ "--headless", "--disable-gpu", "--window-size=800,600" ]
}

哪个更快但你看不到任何东西

答案 1 :(得分:0)

在Ubuntu 20.4下,我在2020年的最新版本的node和@angular中也遇到了同样的问题。

     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/
    

Angular CLI: 9.0.7
Node: 12.18.2
OS: linux x64

Angular: 9.0.7
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Ivy Workspace: Yes

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.900.7
@angular-devkit/build-angular     0.1000.0
@angular-devkit/build-optimizer   0.1000.0
@angular-devkit/build-webpack     0.1000.0
@angular-devkit/core              9.0.7
@angular-devkit/schematics        9.0.7
@ngtools/webpack                  10.0.0
@schematics/angular               9.0.7
@schematics/update                0.900.7
rxjs                              6.5.5
typescript                        3.7.5
webpack                           4.43.0

上面在protractor.conf.js的chromeOptions部分中放置“ useAutomationExtension:false”的说明对我有用。

但是,'-headless'不能解决此问题,因为错误消息虽然有点神秘,但可以说出真相。因此,设置“无头”选项只会导致测试超时,因为错误会显示在弹出窗口中,并且需要单击“确定”按钮才能继续测试。

除非您有铬的开发人员通道版本,否则自动化扩展程序不在您的浏览器中。因此,默认情况下,chrome驱动程序会尝试使用非dev-channel版本的Chrome上没有的扩展程序。

可用性:仅开发通道。了解更多信息。

https://developer.chrome.com/extensions/automation

我个人认为这很疯狂。在尝试使用该扩展程序之前,驱动程序应检查该扩展程序是否可用。我看过很多关于这一主题的文章,但似乎没有人真正涉及到这个问题。上面的答案将解决问题,但是其根本原因是chrome驱动程序的假设是扩展始终存在。因此,对“真实世界的浏览器版本”(大多数用户未下载Chrome的开发人员通道版本)进行测试(应该是默认设置)是例外。