无法运行Angular> 2 e2e在代理后面使用量角器

时间:2018-03-12 10:51:56

标签: angular proxy protractor angular-e2e

将不胜感激任何帮助!

  • 我在Windows上运行
  • 我在全球范围内安装了量角器版本5.3.0
  • 在更新webdriver之前,我运行了webdriver-manager clean
  • 更新版本如下:
  

webdriver-manager update --ie32 --proxy   http://my-proxy:8080 --ignore_ssl

  • node version 9.2.1
  • npm version 5.7.1
  • 在启动e2e之前启动了dev服务器..

我的protractor.conf文件如下:

     const { SpecReporter } = require('jasmine-spec-reporter');

    exports.config = {
      allScriptsTimeout: 11000,
      specs: [
        './e2e/**/*.e2e-spec.ts'
      ],
        capabilities: {
    'browserName': 'chrome',
    'proxyType': 'manual',
    'httpProxy': 'http://my-proxy:8080'
  },
      directConnect: true,
      baseUrl: 'http://localhost:4200/',
      framework: 'jasmine',
      jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000,
        print: function() {}
      },
      beforeLaunch: function() {
        require('ts-node').register({
          project: 'e2e/tsconfig.e2e.json'
        });
      },
      onPrepare() {
        jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
      }
    };

试图先通过以下方式运行测试:ng e2e 第二个:

ng e2e --config ./protractor.conf.js --specs ./e2e\app.e2e-spec.ts

仍然收到此代理错误:

events.js:136
      throw er; // Unhandled 'error' event
      ^

    Error: getaddrinfo ENOTFOUND chromedriver.storage.googleapis.com chromedriver.storage.googleapis.com:443
        at errnoException (dns.js:55:10)
        at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:97:26)

2 个答案:

答案 0 :(得分:4)

ng e2e将在后台执行webdriver-manager start/updatewebdriver-manager start将访问" chromedriver.storage.googleapis.com"要查询最新的webdriver二进制文件,您的错误来自此处。

由于ng e2e无法接受来自cli或预配置文件的代理,因此webdriver-manager start/update触发的ng e2e代理设置的唯一方法是{{1} }。

添加以下3个环境变量:

Environment Variable

在新的cmd窗口中尝试HTTP_PROXY = http://my-proxy:port HTTPS_PROXY = http://my-proxy:port NO_PROXY = localhost,127.0.0.1, .yourcompany.com (不要在旧的cmd窗口中尝试)

仅供参考,添加3个环境变量后,执行ng e2e时无需在cli中传递--proxy

答案 1 :(得分:0)

添加3个环境变量后,它几乎可以工作(非常感谢提供该解决方案),但是如果代理不信任该站点:https://chromedriver.storage.googleapis.com/

然后我们得到:


    Error: unable to get local issuer certificate
        at TLSSocket.onConnectSecure (_tls_wrap.js:1058:34)
        at TLSSocket.emit (events.js:198:13)
        at TLSSocket._finishInit (_tls_wrap.js:636:8)

因此,我们仍然需要找出一种将“ ignoreSSL = true”传递给“ ng e2e”的方法,因为ng命令应该将其传递为“ webdriver-manager update --ignore_ssl”

1.(当前仅适用的解决方案)一种方法是修改文件 量角器\ node_modules \ webdriver-manager \ built \ lib \ cmds \ opts.js 通过更新opts [exports.IGNORE_SSL]

的值

    opts[exports.IGNORE_SSL] = new cli_1.Option(exports.IGNORE_SSL, 'Ignore SSL certificates', 'boolean', true);

  1. 可能是我们尝试使用另一个环境变量,还是某些如何通过angular.json文件传递此值,但我还不能弄清楚这一点

  2. 当量角器运行以下命令时,如何通过代理使用的证书来信任外部站点:


    curl -o.\node_modules\protractor\node_modules\webdriver-manager\selenium\chrome-response.xml https://chromedriver.storage.googleapis.com/