"ng e2e" 失败的原因可能是代理,但 "ng serve" 和 "ng test" 可以正常工作。

3
我下载了 https://github.com/blizzerand/pastebin-angular,并且可以成功运行 "ng test" 或 "npm run test"(我知道两者是完全相同的)。请注意保留HTML标签。
C:\_pocs\ws_vsc\pastebin-angular-master>npm run test

    > test-angular@0.0.0 test C:\_pocs\ws_vsc\pastebin-angular-master
    > ng test
    
     10% building modules 1/1 modules 0 active29 12 2017 18:13:27.927:WARN [karma]: No captured browser, open http://localhost:9876/
    29 12 2017 18:13:27.998:INFO [karma]: Karma v1.7.0 server started at http://0.0.0.0:9876/
    29 12 2017 18:13:28.002:INFO [launcher]: Launching browsers Chrome, ChromeNoSandboxHeadless with unlimited concurrency
    29 12 2017 18:13:28.013:INFO [launcher]: Starting browser Chrome
    29 12 2017 18:13:28.032:INFO [launcher]: Starting browser Chrome              29 12 2017 18:13:39.229:WARN [karma]: No captured browser, open http://localhost:9876/
    29 12 2017 18:13:40.708:INFO [HeadlessChrome 0.0.0 (Windows 10 0.0.0)]: Connected on socket UDrOcB34PHgK-7M-AAAB with id 48647093
    29 12 2017 18:13:40.708:INFO [Chrome 63.0.3239 (Windows 10 0.0.0)]: Connected on socket 8ZsdfQHAmDKzVaoHAAAA with id 86143812
    Chrome 63.0.3239 (Windows 10 0.0.0): Executed 31 of 31 SUCCESS (3.745 secs / 3.714 secs)
    HeadlessChrome 0.0.0 (Windows 10 0.0.0): Executed 31 of 31 SUCCESS (3.807 secs / 3.779 secs)
    TOTAL: 62 SUCCESS
    TOTAL: 62 SUCCESS

当我尝试运行"ng e2e"时,出现" ETIMEDOUT x.x.x.x:443"的错误。

C:\_pocs\ws_vsc\pastebin-angular-master>ng e2e
Your global Angular CLI version (1.6.3) is greater than your local
version (1.1.0). The local Angular CLI version is used.

To disable this warning use "ng set --global warnings.versionMismatch=false".
** NG Live Development Server is listening on localhost:49152, open your browser on http://localhost:49152 **
(node:5784) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
Hash: 5891176eb0b28d7d1f89
Time: 12097ms
chunk    {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 160 kB {4} [initial] [rendered]
chunk    {1} main.bundle.js, main.bundle.js.map (main) 29.2 kB {3} [initial] [rendered]
chunk    {2} styles.bundle.js, styles.bundle.js.map (styles) 10.5 kB {4} [initial] [rendered]
chunk    {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.82 MB [initial] [rendered]
chunk    {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.
events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: connect ETIMEDOUT x.x.x.x:443
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182:14)

所以我改用"ng e2e --no-webdriver-update",因为它完全不依赖于代理。

C:\_pocs\ws_vsc\pastebin-angular-master>ng e2e --no-webdriver-update
Your global Angular CLI version (1.6.3) is greater than your local
version (1.1.0). The local Angular CLI version is used.

To disable this warning use "ng set --global warnings.versionMismatch=false".
** NG Live Development Server is listening on localhost:49152, open your browser on http://localhost:49152 **
(node:14496) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
Hash: 5891176eb0b28d7d1f89
Time: 13274ms
chunk    {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 160 kB {4} [initial] [rendered]
chunk    {1} main.bundle.js, main.bundle.js.map (main) 29.2 kB {3} [initial] [rendered]
chunk    {2} styles.bundle.js, styles.bundle.js.map (styles) 10.5 kB {4} [initial] [rendered]
chunk    {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.82 MB [initial] [rendered]
chunk    {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.
[18:20:39] I/launcher - Running 1 instances of WebDriver
[18:20:39] I/direct - Using ChromeDriver directly...
[18:20:39] E/direct - Error code: 135
[18:20:39] E/direct - Error message: Could not find update-config.json. Run 'webdriver-manager update' to download binaries.
[18:20:39] E/direct - Error: Could not find update-config.json. Run 'webdriver-manager update' to download binaries.
    at Direct.getNewDriver (C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\built\driverProviders\direct.js:63:31)
    at Runner.createBrowser (C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\built\runner.js:195:43)
    at q.then.then (C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\built\runner.js:339:29)
    at _fulfilled (C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\node_modules\q\q.js:834:54)
    at self.promiseDispatch.done (C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\node_modules\q\q.js:863:30)
    at Promise.promise.promiseDispatch (C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\node_modules\q\q.js:796:13)
    at C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\node_modules\q\q.js:556:49
    at runSingle (C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\node_modules\q\q.js:137:13)
    at flush (C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\node_modules\q\q.js:125:13)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
[18:20:39] E/launcher - Process exited with error code 135

自从我收到“无法找到update-config.json。运行'webdriver-manager update'”的提示后,我尝试下载它并明确使用我的本地代理。
C:\_pocs\ws_vsc\pastebin-angular-master>webdriver-manager update --proxy http://myproxy.vm.mycompany.net:3128
[18:23:19] I/update - geckodriver: file exists C:\Users\dca\AppData\Roaming\nvm\v8.9.3\node_modules\protractor\node_modules\webdriver-manager\selenium\geckodriver-v0.19.1.zip
[18:23:19] I/update - geckodriver: unzipping geckodriver-v0.19.1.zip
[18:23:19] I/update - geckodriver: geckodriver-v0.19.1.exe up to date
[18:23:20] E/downloader - Expected response code 200, received: 403
[18:23:20] I/update - chromedriver: file exists C:\Users\dca\AppData\Roaming\nvm\v8.9.3\node_modules\protractor\node_modules\webdriver-manager\selenium\chromedriver_2.34.zip
[18:23:20] I/update - chromedriver: unzipping chromedriver_2.34.zip
(node:14648) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Invalid filename
(node:14648) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
[18:24:29] I/update - selenium standalone: file exists C:\Users\dca\AppData\Roaming\nvm\v8.9.3\node_modules\protractor\node_modules\webdriver-manager\selenium\selenium-server-standalone-3.8.1.jar
[18:24:29] I/update - selenium standalone: selenium-server-standalone-3.8.1.jar up to date

当我看到“E/downloader - Expected response code 200, received: 403”时,有点困惑,但最后我看到“I/update - selenium standalone: selenium-server-standalone-3.8.1.jar已更新”,我会认为我已经正确地下载了它。现在我重复执行“ng e2e”,并且我得到了同样的错误。由于我看到端口号443,我决定尝试一些东西“ng e2e --skip-ssl”,但我得到了同样的错误。我也尝试了ng e2e --webdriver-update=false,但我仍然得到“找不到update-config.json”的错误。
我尝试的最后一次是:
C:\_pocs\ws_vsc\pastebin-angular-master>npm run e2e

> test-angular@0.0.0 e2e C:\_pocs\ws_vsc\pastebin-angular-master
> ng e2e

** NG Live Development Server is listening on localhost:49152, open your browser on http://localhost:49152 **
(node:9036) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
Hash: 5891176eb0b28d7d1f89
Time: 11115ms
chunk    {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 160 kB {4} [initial] [rendered]
chunk    {1} main.bundle.js, main.bundle.js.map (main) 29.2 kB {3} [initial] [rendered]
chunk    {2} styles.bundle.js, styles.bundle.js.map (styles) 10.5 kB {4} [initial] [rendered]
chunk    {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.82 MB [initial] [rendered]
chunk    {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.
events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: connect ETIMEDOUT 172.217.17.48:443
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182:14)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! test-angular@0.0.0 e2e: `ng e2e`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the test-angular@0.0.0 e2e script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\dca\AppData\Roaming\npm-cache\_logs\2017-12-29T17_33_44_400Z-debug.log

这里是日志

0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'e2e' ]
2 info using npm@5.5.1
3 info using node@v8.9.3
4 verbose run-script [ 'pree2e', 'e2e', 'poste2e' ]
5 info lifecycle test-angular@0.0.0~pree2e: test-angular@0.0.0
6 info lifecycle test-angular@0.0.0~e2e: test-angular@0.0.0
7 verbose lifecycle test-angular@0.0.0~e2e: unsafe-perm in lifecycle true
8 verbose lifecycle test-angular@0.0.0~e2e: PATH: C:\Users\dca\AppData\Roaming\nvm\v8.9.3\node_modules\npm\bin\node-gyp-bin;C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\.bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Windows\CCM;C:\Program Files (x86)\GnuWin32\bin;C:\Program Files (x86)\Skype\Phone\;C:\_t3\gradle-3.5\bin;C:\Program Files (x86)\Subversion\bin;C:\Program Files\Git\cmd;C:\Program Files (x86)\Yarn\bin;C:\Program Files\TortoiseSVN\bin;C:\Users\dca\AppData\Roaming\nvm;C:\Program Files\nodejs;C:\Users\dca\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Java\jdk1.8.0_112\bin;C:\_t\maven\bin;C:\Users\dca\AppData\Local\GitHubDesktop\bin;C:\Program Files\Microsoft VS Code\bin;C:\Users\dca\AppData\Local\Yarn\bin;C:\Users\dca\AppData\Roaming\nvm;C:\Program Files\nodejs
9 verbose lifecycle test-angular@0.0.0~e2e: CWD: C:\_pocs\ws_vsc\pastebin-angular-master
10 silly lifecycle test-angular@0.0.0~e2e: Args: [ '/d /s /c', 'ng e2e' ]
11 silly lifecycle test-angular@0.0.0~e2e: Returned: code: 1  signal: null
12 info lifecycle test-angular@0.0.0~e2e: Failed to exec e2e script
13 verbose stack Error: test-angular@0.0.0 e2e: `ng e2e`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (C:\Users\dca\AppData\Roaming\nvm\v8.9.3\node_modules\npm\node_modules\npm-lifecycle\index.js:280:16)
13 verbose stack     at emitTwo (events.js:126:13)
13 verbose stack     at EventEmitter.emit (events.js:214:7)
13 verbose stack     at ChildProcess.<anonymous> (C:\Users\dca\AppData\Roaming\nvm\v8.9.3\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack     at emitTwo (events.js:126:13)
13 verbose stack     at ChildProcess.emit (events.js:214:7)
13 verbose stack     at maybeClose (internal/child_process.js:925:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
14 verbose pkgid test-angular@0.0.0
15 verbose cwd C:\_pocs\ws_vsc\pastebin-angular-master
16 verbose Windows_NT 10.0.14393
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "e2e"
18 verbose node v8.9.3
19 verbose npm  v5.5.1
20 error code ELIFECYCLE
21 error errno 1
22 error test-angular@0.0.0 e2e: `ng e2e`
22 error Exit status 1
23 error Failed at the test-angular@0.0.0 e2e script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

如果相关的话,这里是 package.json 文件。
{
  "name": "test-angular",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^4.0.0",
    "@angular/common": "^4.0.0",
    "@angular/compiler": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.0",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic": "^4.0.0",
    "@angular/router": "^4.0.0",
    "@types/faker": "^4.1.0",
    "angular-in-memory-web-api": "^0.3.2",
    "core-js": "^2.4.1",
    "faker": "^4.1.0",
    "rxjs": "^5.1.0",
    "zone.js": "^0.8.4"
  },
  "devDependencies": {
    "@angular/cli": "1.1.0",
    "@angular/compiler-cli": "^4.0.0",
    "@angular/language-service": "^4.0.0",
    "@types/jasmine": "2.5.45",
    "@types/node": "~6.0.60",
    "codelyzer": "~3.0.1",
    "jasmine-core": "~2.6.2",
    "jasmine-spec-reporter": "~4.1.0",
    "karma": "~1.7.0",
    "karma-chrome-launcher": "~2.1.1",
    "karma-cli": "~1.0.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "protractor": "~5.1.2",
    "ts-node": "~3.0.4",
    "tslint": "~5.3.2",
    "typescript": "~2.3.3"
  }
}

我所做的所有尝试都是在经过两天(16小时)的环境设置后进行的。据我所知,“ng test”基于Jasmine语法运行测试,“ng e2e”则基于Protractor语法(我知道这是非常简单的比较)。

最后,当我看到“ng serve”和“ng test”都能够完美运行时,找到问题的路线变得更加复杂了。

C:\_pocs\ws_vsc\pastebin-angular-master>ng serve
Your global Angular CLI version (1.6.3) is greater than your local
version (1.1.0). The local Angular CLI version is used.

To disable this warning use "ng set --global warnings.versionMismatch=false".
** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200 **
Hash: 68480633f4a6979c64f6
Time: 12524ms
chunk    {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 160 kB {4} [initial] [rendered]
chunk    {1} main.bundle.js, main.bundle.js.map (main) 29.2 kB {3} [initial] [rendered]
chunk    {2} styles.bundle.js, styles.bundle.js.map (styles) 10.5 kB {4} [initial] [rendered]
chunk    {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.82 MB [initial] [rendered]
chunk    {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.

...

C:\_pocs\ws_vsc\pastebin-angular-master>ng test
Your global Angular CLI version (1.6.3) is greater than your local
version (1.1.0). The local Angular CLI version is used.

To disable this warning use "ng set --global warnings.versionMismatch=false".
 10% building modules 1/1 modules 0 active29 12 2017 18:46:45.409:WARN [karma]: No captured browser, open http://localhost:9876/
29 12 2017 18:46:45.487:INFO [karma]: Karma v1.7.0 server started at http://0.0.0.0:9876/
29 12 2017 18:46:45.487:INFO [launcher]: Launching browsers Chrome, ChromeNoSandboxHeadless with unlimited concurrency
29 12 2017 18:46:45.502:INFO [launcher]: Starting browser Chrome
29 12 2017 18:46:45.523:INFO [launcher]: Starting browser Chrome              29 12 2017 18:46:57.058:WARN [karma]: No captured browser, open http://localhost:9876/
29 12 2017 18:46:58.843:INFO [Chrome 63.0.3239 (Windows 10 0.0.0)]: Connected on socket ZyuotOYE2ISz30vzAAAA with id 41727568
29 12 2017 18:46:58.910:INFO [HeadlessChrome 0.0.0 (Windows 10 0.0.0)]: Connected on socket yBro2KHiWGptHCihAAAB with id 10384190
Chrome 63.0.3239 (Windows 10 0.0.0): Executed 31 of 31 SUCCESS (4.328 secs / 4.288 secs)
HeadlessChrome 0.0.0 (Windows 10 0.0.0): Executed 31 of 31 SUCCESS (4.279 secs / 4.24 secs)
TOTAL: 62 SUCCESS
TOTAL: 62 SUCCESS

Webdriver-manager也能正确启动:

C:\_pocs\ws_vsc\pastebin-angular-master>webdriver-manager start proxy http://xxx.vm.xxx.net:3128
[18:52:18] I/start - java -Dwebdriver.gecko.driver=C:\Users\dca\AppData\Roaming\nvm\v8.9.3\node_modules\protractor\node_modules\webdriver-manager\selenium\geckodriver-v0.19.1.exe -jar C:\Users\dca\AppData\Roaming\nvm\v8.9.3\node_modules\protractor\node_modules\webdriver-manager\selenium\selenium-server-standalone-3.8.1.jar -port 4444
[18:52:18] I/start - seleniumProcess.pid: 11540
18:52:19.437 INFO - Selenium build info: version: '3.8.1', revision: '6e95a6684b'
18:52:19.438 INFO - Launching a standalone Selenium Server
2017-12-29 18:52:19.546:INFO::main: Logging initialized @387ms to org.seleniumhq.jetty9.util.log.StdErrLog
18:52:19.577 INFO - Using `new FirefoxOptions()` is preferred to `DesiredCapabilities.firefox()`
18:52:19.593 INFO - Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
18:52:19.608 INFO - Using `new EdgeOptions()` is preferred to `DesiredCapabilities.edge()`
18:52:19.608 INFO - Driver class not found: com.opera.core.systems.OperaDriver                                          18:52:19.608 INFO - Using `new OperaOptions()` is preferred to `DesiredCapabilities.operaBlink()`
18:52:19.608 INFO - Using `new SafariOptions()` is preferred to `DesiredCapabilities.safari()`
18:52:19.608 INFO - Driver class not found: org.openqa.selenium.phantomjs.PhantomJSDriver                               18:52:19.655 INFO - Driver provider class org.openqa.selenium.safari.SafariDriver registration is skipped:               registration capabilities Capabilities {browserName: safari, platform: MAC, version: } does not match the current platform WIN10
18:52:19.702 INFO - Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
18:52:19.702 INFO - Using `new EdgeOptions()` is preferred to `DesiredCapabilities.edge()`                              18:52:19.702 INFO - Using `new FirefoxOptions()` is preferred to `DesiredCapabilities.firefox()`
18:52:19.702 INFO - Using `new OperaOptions()` is preferred to `DesiredCapabilities.operaBlink()`                       18:52:19.702 INFO - Using `new SafariOptions()` is preferred to `DesiredCapabilities.safari()`
18:52:19.718 INFO - Using the passthrough mode handler
2017-12-29 18:52:19.751:INFO:osjs.Server:main: jetty-9.4.7.v20170914
2017-12-29 18:52:19.778:WARN:osjs.SecurityHandler:main: ServletContext@o.s.j.s.ServletContextHandler@757942a1{/,null,STARTING} has uncovered http methods for path: /
2017-12-29 18:52:19.787:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@757942a1{/,null,AVAILABLE}2017-12-29 18:52:19.913:INFO:osjs.AbstractConnector:main: Started ServerConnector@27d415d9{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}
2017-12-29 18:52:19.916:INFO:osjs.Server:main: Started @756ms
18:52:19.917 INFO - Selenium Server is up and running

如果以上内容有任何误解或需要更正的地方,欢迎指出。

  • 在找到解决方案后进行编辑:

如果我尝试不使用建议的环境变量,则会出现以下错误:

C:\_pocs\ws_vsc\pastebin-angular-master>ng e2e
Your global Angular CLI version (1.6.3) is greater than your local
version (1.1.0). The local Angular CLI version is used.

To disable this warning use "ng set --global warnings.versionMismatch=false".
** NG Live Development Server is listening on localhost:49152, open your browser on http://localhost:49152 **
(node:8044) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
Hash: 5891176eb0b28d7d1f89
Time: 12039ms
chunk    {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 160 kB {4} [initial] [rendered]
chunk    {1} main.bundle.js, main.bundle.js.map (main) 29.2 kB {3} [initial] [rendered]
chunk    {2} styles.bundle.js, styles.bundle.js.map (styles) 10.5 kB {4} [initial] [rendered]
chunk    {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.82 MB [initial] [rendered]
chunk    {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.
[16:12:48] E/downloader - Connection timeout downloading: https://chromedriver.storage.googleapis.com/2.34/chromedriver_win32.zip. Default timeout is 4 minutes.
[16:12:48] I/update - chromedriver: file exists C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\node_modules\webdriver-manager\selenium\chromedriver_2.34.zip
[16:12:48] I/update - chromedriver: unzipping chromedriver_2.34.zip
[16:12:49] I/update - chromedriver: chromedriver_2.34.exe up to date
[16:12:49] I/launcher - Running 1 instances of WebDriver
[16:12:49] I/direct - Using ChromeDriver directly...
[16:12:49] E/downloader - Connection timeout downloading: https://chromedriver.storage.googleapis.com/2.34/chromedriver_win32.zip. Default timeout is 4 minutes.

DevTools listening on ws://127.0.0.1:12268/devtools/browser/71d97023-dae5-4b24-8ecc-98922db60bf5
Jasmine started

Executed 0 of 0 specs SUCCESS in 0.002 sec.
[16:12:53] I/launcher - 0 instance(s) of WebDriver still running
[16:12:53] I/launcher - chrome #01 passed

另一方面,在设置环境变量后,我得到了:

C:\_pocs\ws_vsc\pastebin-angular-master>ng e2e
Your global Angular CLI version (1.6.3) is greater than your local
version (1.1.0). The local Angular CLI version is used.

To disable this warning use "ng set --global warnings.versionMismatch=false".
** NG Live Development Server is listening on localhost:49152, open your browser on http://localhost:49152 **
(node:2288) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
Hash: 5891176eb0b28d7d1f89
Time: 12368ms
chunk    {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 160 kB {4} [initial] [rendered]
chunk    {1} main.bundle.js, main.bundle.js.map (main) 29.2 kB {3} [initial] [rendered]
chunk    {2} styles.bundle.js, styles.bundle.js.map (styles) 10.5 kB {4} [initial] [rendered]
chunk    {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.82 MB [initial] [rendered]
chunk    {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.
[16:19:30] I/update - chromedriver: file exists C:\_pocs\ws_vsc\pastebin-angular-master\node_modules\protractor\node_modules\webdriver-manager\selenium\chromedriver_2.34.zip
[16:19:30] I/update - chromedriver: unzipping chromedriver_2.34.zip
[16:19:30] I/update - chromedriver: chromedriver_2.34.exe up to date
[16:19:30] I/launcher - Running 1 instances of WebDriver
[16:19:30] I/direct - Using ChromeDriver directly...

DevTools listening on ws://127.0.0.1:12462/devtools/browser/86f2d2f5-3312-48e6-8d05-25241eeba843
Jasmine started

Executed 0 of 0 specs SUCCESS in 0.003 sec.
[16:19:34] I/launcher - 0 instance(s) of WebDriver still running
[16:19:34] I/launcher - chrome #01 passed
1个回答

4

1) 当你运行ng e2e时,它报告错误:Error: connect ETIMEDOUT x.x.x.x:443

这是因为ng e2e选项--webdriver-update的默认值为true,并且您的网络在代理后面,所以没有告诉webdriver-manager网络代理,webdriver-manger更新将无法连接网络,这就是为什么您会看到错误。

我查看了ng e2e的源代码https://github.com/angular/angular-cli/blob/master/packages/%40angular/cli/tasks/e2e.ts,并注意到我们不能按照npm run e2e后面的内容传递代理,但是我们可以在环境变量中设置代理,webdriver-manager在运行之前将读取它们,您可以按照下面的帖子设置环境变量中的代理:how to check what is causing webdriver-manager to fail

2) 当你运行ng e2e --no-webdriver-update跳过webdriver更新时,它报告错误:Error message: Could not find update-config.json

这意味着project_folder\node_modules\protractor\node_modules\webdriver-manager\selenium中不存在update-config.json

这是因为你使用全局的webdriver-manger来执行webdriver更新,而不是项目本地的webdriver-manager(在project_folder\.bin\webdriver-manager中)。

正确的方式是首先在cmd窗口中切换到your_project文件夹,然后执行node_modules\.bin\webdriver-manager update --proxy http://myproxy.vm.mycompany.net:3128,然后update-config.json将出现在那里,ng e2e --no-webdriver-manager现在应该可以工作了。

ng e2e不能使用全局的webdriver-manager,而只能使用项目本地的node_modules\.bin\webdriver-manger

npm代理与环境变量代理

1) npm代理

npm代理仅适用于命令:npm,此命令实现不会从环境变量读取代理,因此您必须通过命令npm config set或直接修改用户主目录或项目文件夹下的.npmrc文件来设置npm代理。

2) 环境变量代理

只有实现将从环境变量读取代理设置的工具/软件/程序/命令,然后环境变量代理才能影响它们。

对于用户来说,很难知道环境变量代理会影响到工具/软件/程序/命令,尤其是我们第一次接触这个新东西时。

但是通常情况下,我们可以认为从命令窗口执行的所有内容都会从环境变量中读取代理设置,但并不总是如此,例如npm,它只会从自身的代理设置中读取代理。

现在回到webdriver-manager,首先,在大多数情况下,它是从命令行窗口执行的,实际上,决定环境变量代理是否会影响它的最终决定因素是实现本身。

webdriver-manager的实现中,首先,它将按以下方式从命令行选项中读取传递的代理: webdriver-manager update --proxy http://proxy.company.com:1234

如果您没有在命令行中传递代理,则它将从环境变量中读取代理。


你的第二个建议对我没有任何影响。我已经在project_folder/.../selenium update-config.json文件中了。但是你的第一个建议似乎使一切都按预期工作。只需比较上面粘贴的两个输出中“webpack: Compiled successfully”后面的下一行即可。你回答了我的问题。如果你不介意,能否简单解释一下“为什么我在npm(npm config list)中设置了http-proxy、https-proxy和proxy,但只有在设置环境变量后才开始生效?这是因为我添加了“NO_PROXY=.mycompany.net,localhost,127.0.0.1”吗? - Jim C
1
实际上,webdriver-manager与npm代理无关。在webdriver-manger的实现中,它首先会从命令行选项--proxy传递的参数中读取代理信息。如果您没有在命令行中传递代理参数,则其将从环境变量中读取代理信息。因此,无论您是否设置npm代理,webdriver-manger都不会受到影响。 - yong
1
你需要明确这一点:webdriver-manager在Nodejs运行时中运行,而不是在npm中运行。npm只是安装Nodejs包的工具,一旦通过npm安装了webdriver-manager,webdriver-manager就不依赖于与npm相关的任何内容,例如npm代理/缓存/注册表。 - yong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接