Protractor: ์š”์†Œ ํƒ์ƒ‰๊ธฐ๊ฐ€ ๋…ธ๋“œ 8์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2017๋…„ 06์›” 01์ผ  ยท  65์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: angular/protractor

๋ฒ„๊ทธ ์‹ ๊ณ 

  • ๋…ธ๋“œ ๋ฒ„์ „: 8.0.0
  • ๊ฐ๋„๊ธฐ ๋ฒ„์ „: 5.1.2
  • ๊ฐ๋„ ๋ฒ„์ „: n/a
  • ๋ธŒ๋ผ์šฐ์ €: Chrome / chromedriver 2.29.0
  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „ Mac Sierra 10.12.5
  • ๊ฐ๋„๊ธฐ ๊ตฌ์„ฑ ํŒŒ์ผ n/a

๋…ธ๋“œ v8.0.0 ๋ฐ npm v5.0.0์„ ์„ค์น˜ํ•˜๊ณ  ๊ฐ๋„๊ธฐ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ  webdriver-manager update ์‹คํ–‰ํ•œ ํ›„ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— protractor --elementExplorer ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

protractor --elementExplorer
(node:76684) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[11:04:10] I/hosted - Using the selenium server at http://localhost:4444/wd/hub
[11:04:11] I/protractor -
[11:04:11] I/protractor - ------- Element Explorer -------
[11:04:11] I/protractor - Starting WebDriver debugger in a child process. Element Explorer is still beta, please report issues at github.com/angular/protractor
[11:04:11] I/protractor -
[11:04:11] I/protractor - Type <tab> to see a list of locator strategies.
[11:04:11] I/protractor - Use the `list` helper function to find elements by strategy:
[11:04:11] I/protractor -   e.g., list(by.binding('')) gets all bindings.
[11:04:11] I/protractor -
module.js:487
    throw err;
    ^

Error: Cannot find module '_debugger'
    at Function.Module._resolveFilename (module.js:485:15)
    at Function.Module._load (module.js:437:25)
    at Module.require (module.js:513:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/protractor/built/debugger/debuggerCommons.js:1:82)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)

๋…ธ๋“œ 7.10.0์œผ๋กœ ๋˜๋Œ๋ฆฌ๋ฉด ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PRs plz! needs investigation

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ฒ€์‚ฌ API ๋˜๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  65 ๋Œ“๊ธ€

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ๋…ธ๋“œ 8์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ๊ณ ์žฅ๋‚  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ์•ž์œผ๋กœ ๋ฉฐ์น  ์•ˆ์— ์ด ๋ฌธ์ œ๋ฅผ ํŒŒํ—ค์น˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ PR์€ ๋งค์šฐ ํ™˜์˜๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

_debugger ๋ฐ ๋ ˆ๊ฑฐ์‹œ CLI ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋…ธ๋“œ 8์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/nodejs/node/commit/90476ac6ee

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋…ธ๋“œ 8 ์ง€์› ๊ณ„ํš์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? :)

Node v8์ด 10์›”์— LTS์— ๋“ค์–ด๊ฐˆ ์˜ˆ์ •์ด๋ผ๋ฉด ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์„๊นŒ์š”?

https://github.com/nodejs/LTS#lts -schedule1

https://nodejs.org/en/docs/guides/debugging-getting-started/#legacy -debugger ์— ๋”ฐ๋ฅด๋ฉด,
node.js ํŒ€์€ ์‚ฌ์šฉ์ž๋ฅผ ์ƒˆ๋กœ์šด inspect API๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒ€์‚ฌ API ๋˜๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋™์ผํ•œ ์˜ค๋ฅ˜ https://github.com/node-inspector/node-inspector/issues/1025#issuecomment -339202842
๋ฒŒ์จ 4๊ฐœ์›”

๋˜ํ•œ https://stackoverflow.com/questions/44662442/node-inspector-not-starting

์ด๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ถ”์ธก์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ debuggerCommons.js ์—์„œ ๋ฐœ์ƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

require('_debugger'); ๋Œ€์‹  require('inspector'); ( ๋ฌธ์„œ๋Š” ์—ฌ๊ธฐ )๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์—ด๊ณ  ์„ธ์…˜์„ ๋งŒ๋“ค๊ณ  ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ session.post ๋ฐ Chrome DevTools ํ”„๋กœํ† ์ฝœ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋‹จ์ ์„ ์ถ”๊ฐ€ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„๋‚˜๋ฉด PR์ข€ ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

@phenomnominal ์ด์•ผ ๋Œ€๋‹จํ•˜๋‹ค! PR์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๊ธฐ๋Šฅ์€ ๋งค์šฐ ์œ ์šฉํ•˜๋ฏ€๋กœ ๊ณง ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ๋ฐœ์ „์„ ๋งค์šฐ ๊ฐ€์†ํ™”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฐ์‚ฌ ํ•ด์š”!

@phenomnominal ์•ˆ๋…•ํ•˜์„ธ์š”, ์ตœ๊ทผ์— ๋…ธ๋“œ 8.0์„ ์ง€์›ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ˜„์žฌ ๊ณ„ํš์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ๋งŒ. ๋‚˜๋Š” ์˜ค๋Š˜ ์ €๋…์— ๊ธˆ์‹์„ ํ•  ๊ณ„ํš์ด์—ˆ๋‹ค.

@phenomnominal ๊ต‰์žฅ ํ•ฉ๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@phenomnominal ์•ˆ๋…•ํ•˜์„ธ์š”, ์ง€๊ธˆ๊นŒ์ง€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์‹œ์ž‘ํ–ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ Selenium์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(ํŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?). ํ™”์š”์ผ ๋ฐค์— ์ข€ ๋” ์‹œ๊ฐ„์„ ๋‚ด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒˆ API๋Š” ์ƒ๋‹นํžˆ ๋‹ค๋ฅด์ง€๋งŒ ์‹ค์ œ ๋ฌธ์ œ๋Š” ์˜ˆ์ƒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜, ์ •๋ง ๊ณ ๋งˆ์›Œ. ์›”์š”์ผ ์ดํ›„์— ์‹œ๊ฐ„์ด ์ข€ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ๊ทธ ์ดํ›„์— ์•Œ์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.

๋‚œ...์–ด๋”˜๊ฐ€? ๋””๋ฒ„๊ฑฐ ๋””๋ฒ„๊น…์ด ๋‚ด๊ฐ€ ๊ธฐ๋Œ€ํ–ˆ๋˜ ๊ฒƒ๋งŒํผ ๊ฐ„๋‹จํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. @qiyigg ๋ณผ ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ๋‚˜์š”?

์˜ค๋Š˜ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์˜ค๋Š˜ ์ €๋…์—๋„ ์‹œ๊ฐ„์ด ์ข€ ๋” ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ฉ”๋ชจ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ง€๋‚œ ์ฃผ์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์–ด๋–ค ์ง„์ „์ด ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ๋„๊ธฐ ๋””๋ฒ„๊ฑฐ/ํƒ์ƒ‰๊ธฐ์˜ ๊ฒฝ์šฐ ๋…ธ๋“œ 8์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์ฃผ๋กœ ์ œ์–ด ํ๋ฆ„์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ฐ๋„๊ธฐ ๋””๋ฒ„๊ฑฐ/ํƒ์ƒ‰๊ธฐ. ๊ทธ๋Ÿฌ๋‚˜ ์ œ์–ด ํ๋ฆ„์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ(ํŠนํžˆ ๋…ธ๋“œ 8์— ๊ธฐ๋ณธ ๋น„๋™๊ธฐ/๋Œ€๊ธฐ๊ฐ€ ์žˆ์Œ) ๊ฒฐ๊ตญ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ์กฐ์‚ฌ ํ›„, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์น˜๋Š” ๋ฐ ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด์œ  1์— ๋”ฐ๋ผ ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฐ€์น˜๊ฐ€ ์—†์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ์šฐ๋ฆฌ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ async/await ๋ฐ ํฌ๋กฌ ๊ฒ€์‚ฌ๊ธฐ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ 8์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋””๋ฒ„๊น… ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์›๋ž˜ ๋””๋ฒ„๊ฑฐ๋ณด๋‹ค ๋” ๋‚˜์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  4. @phenomnominal ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ŒํŒŒ๊ตฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ๊ฒ€ํ† ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋…ธ๋ ฅํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ETA๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋‚ด๊ฐ€ ์ผํ•˜๋Š” ๊ณณ์—์„œ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ์กฐ๊ธˆ ์”น๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ e2 ํ…Œ์ŠคํŒ…์— ๋Œ€ํ•ด ๊ฐ€๋ฅด์น˜๋ ค๊ณ  ํ•˜๋ฉด ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ปจํ…์ŠคํŠธ์—์„œ ์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ์™ธ์— ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

@KellyR-STCU
์•ˆ๋…•ํ•˜์„ธ์š”,
๋…ธ๋“œ ๋ฒ„์ „ < 8์˜ ๊ฒฝ์šฐ ์›๋ž˜ ๋””๋ฒ„๊น… ํ”„๋กœ์„ธ์Šค/๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ ๋ฒ„์ „์ด >=8์ธ ๊ฒฝ์šฐ Node.js ๊ธฐ๋ณธ async/await๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ƒˆ๋กœ์šด ๋””๋ฒ„๊น… ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”ฐ๋ฅด๊ณ (์ œ์–ด ํ๋ฆ„ ๋ฐ ์ด์ „ ๋””๋ฒ„๊ฑฐ์— ์˜์กดํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก) chrome inspector( ๋˜๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ ๋””๋ฒ„๊ฑฐ) ๋””๋ฒ„๊ทธ

๋„ค์ดํ‹ฐ๋ธŒ async/await ๋ฐ chrome inspector๋กœ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ œ์–ด ํ๋ฆ„์ด ๋น„ํ™œ์„ฑํ™”๋œ ๋””๋ฒ„๊น…
๋น„๋™๊ธฐ/๋Œ€๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@qiygg elementExplorer ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@monkpit ๊ฐ™์€ ์ด์œ ๋กœ ๋…ธ๋“œ 8์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์™„์ „ํžˆ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋™์•ˆ ํฌ๋กฌ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์—ด๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „๊ณผ ๊ฐ™์ด ๊ฐ๋„๊ธฐ ๋””๋ฒ„๊น…๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@qiyigg ok,

์ด ์†”๋ฃจ์…˜์€ "async/await์™€ ์ œ์–ด ํ๋ฆ„์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ" ๋•Œ๋ฌธ์— ๊ธฐ์กด ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ๋ฌธ์ œ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ „ํ™˜ ์‹œ ๊ธฐ์กด์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ…Œ์ŠคํŠธ๋ณ„๋กœ ์ทจํ•  ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@uriah-ascend
์˜ˆ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™„๋ฒฝํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ œ์–ด ํ๋ฆ„์€ ๊ฒฐ๊ตญ ์ œ๊ฑฐ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ async/await๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด๋ฉฐ ๋” ๋‚˜์€ ๋””๋ฒ„๊น… ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋‹น์‹ ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํ…Œ์ŠคํŠธ ๊ตฌ์„ฑ์„ ๊ฐ–๊ณ  ์ ์ง„์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@qiyigg ๋น„๋™๊ธฐ/๋Œ€๊ธฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋‚˜ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Š” ์ œ์–ด ํ๋ฆ„์„ ๋น„ํ™œ์„ฑํ™” ํ•˜๊ณ  ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ/๋Œ€๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

๋‘ ๋ฒˆ์งธ ๊ฒƒ์€ ์•„๋งˆ๋„ ์ „ํ™˜์„ ์œ„ํ•œ ๋‹จ๊ณ„๋ณ„ ๋‹จ๊ณ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋…ธ๋“œ 8์—์„œ browser.pause() ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„

๋‚˜๋Š” Disabled Control Flow๋ฅผ ๋”ฐ๋ž๋‹ค.

node --inspect-brk bin/protractor <config_file> ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋Œ€์‹  ํ„ฐ๋ฏธ๋„์—์„œ node inspect $(which protractor) <config_file> ๋‹ค์Œ์— debug> cont ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ browser.pause() ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ ์‚ฌ์šฉ debugger ๋Œ€์‹ ์— browser.pause()

ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด: ํ•œ ๋ฒˆ์— async/await๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ํฐ ๊ฐ๋„๊ธฐ ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋จผ์ € ์•ฝ์† ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  "๋น„๋™๊ธฐ" ๊ฐ๋„๊ธฐ ์ž‘์—…์„ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ œ์–ด ํ๋ฆ„์ด ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ์‚ฌ ํ•ด์š” !

Promise Chaining์€ ์ œ์–ด ํ๋ฆ„์ด ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์ž‘๋™ํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ์ง€์ €๋ถ„ํ•˜๊ณ  ์–ธ์  ๊ฐ€ ๋‹ค์‹œ async/await๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?
๊ทธ๋ž˜์„œ ๋‚ด ์ œ์•ˆ์€ ์ง€๊ธˆ ๋‘ ๊ฐœ์˜ ๋ณ„๋„ ๊ตฌ์„ฑ์„ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ/๋ณ€ํ™˜๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ƒˆ ๊ตฌ์„ฑ์— ๋„ฃ์–ด control_flow๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ด์ „ ๊ตฌ์„ฑ์„ ์ ์ง„์ ์œผ๋กœ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ํ…Œ์ŠคํŠธ ๊ฐ„์— ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ async await๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  async await๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ค‘๋‹จ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํžŒํŠธ: A LOT). ๊ทธ๋ฆฌ๊ณ  ๋™์ผํ•œ ๊ธฐ๋Šฅ์˜ ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋ฉด ์„œ๋กœ ๋‹ค๋ฅผ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ async/await๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ์ค‘๊ฐ„ ๋‹จ๊ณ„๋กœ ๋ชจ๋“  ๊ฒƒ์„ promise chaining์œผ๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ณ€ํ™˜ํ•˜๋„๋ก babel์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์˜ˆ: https://stackoverflow.com/questions/ 28708975/transpile-async-await-proposal-with-babel-js ?), async/await๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ œ์–ด ํ๋ฆ„์ด ์žˆ๊ฑฐ๋‚˜ ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€ํ™˜๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ์ „์— ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์–ด์จŒ๋“  readme์— ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...

์‚ฌ์‹ค ์šฐ๋ฆฌ๋Š” ์ตœ๊ทผ์— ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ async/await๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ๋‚ด๋ถ€ ํŒ€๊ณผ ์ด์•ผ๊ธฐํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋“ค์€ ๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์•ฝ์† ์ฒด์ธ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด๋ฏธ ๊ทธ๋ ‡๊ฒŒํ•˜๊ธฐ๋ฅผ ํฌ๊ธฐํ•˜๋ฉด ๋ฏธ๋ฌ˜ํ•œ ๋ฒ„๊ทธ์™€ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋„์ž…๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋“ค์€ ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ async/await๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ตœ์„ ์˜ ํ•ด๊ฒฐ์ฑ…์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋‹น์‹ ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์•ฝ๊ฐ„์˜ ๋ฐœ์‚ฐ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋„๊ตฌ๋Š” ์™ธ๋ถ€์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ์šฐ๋ฆฌ๋Š” ์ตœ๊ทผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณ„ํš์„ ์„ธ์šฐ๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์–ด๋”˜๊ฐ€์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์กฐ์–ธ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ต๋ณ€ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์กฐ์‚ฌ ์ค‘!
๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์€ ์•„์ด๋””์–ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ๋žŒ๋“ค์ด ์ž‘์—… ์ค‘์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

Le 16 janv. 2018๋…„ 19์‹œ 58๋ถ„, "qiyi" [email protected] a รฉcrit :

์‚ฌ์‹ค ์šฐ๋ฆฌ๋Š” ์ตœ๊ทผ์— ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋‹ค์Œ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ๋‚ด๋ถ€ ํŒ€๊ณผ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ/๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
๊ทธ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋ฏธ๋ฌ˜ํ•œ ๋ฒ„๊ทธ์™€ ๊ฒฝ์Ÿ ์กฐ๊ฑด์„ ๋„์ž…ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
common utils๋ฅผ promise chain์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๊ณ  ์ด๋ฏธ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋“ค์€ ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ async/await๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. NS
๊ทธ๊ฒƒ์ด ์ตœ์„ ์˜ ํ•ด๊ฒฐ์ฑ…์ธ์ง€๋Š” ๋ชจ๋ฅด์ง€๋งŒ ๋‹น์‹ ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด
์•ฝ๊ฐ„์˜ ๋ฐœ์‚ฐ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค
์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๊ทธ๊ฒƒ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ,
๋„๊ตฌ๋Š” ์™ธ๋ถ€์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ์šฐ๋ฆฌ๋Š” ์ตœ๊ทผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณ„ํš์„ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ ์ผ๋ถ€๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์–ด๋”˜๊ฐ€์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์กฐ์–ธ.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/angular/protractor/issues/4307#issuecomment-358068096 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AHHOgiLEdFS-xZVcOKmO1EB-CID53cryks5tLPFagaJpZM4NtM1n
.

์•ˆ๋…• ์–˜๋“ค์•„! ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

protractor - 5.2.2
nodejs - 9.3
protractor --elementExplorer
(node:72438) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[19:15:43] I/local - Starting selenium standalone server...
[19:15:44] I/local - Selenium standalone server started at http://172.29.148.101:58279/wd/hub
[19:15:45] I/protractor -
[19:15:45] I/protractor - ------- Element Explorer -------
[19:15:45] I/protractor - Starting WebDriver debugger in a child process. Element Explorer is still beta, please report issues at github.com/angular/protractor
[19:15:45] I/protractor -
[19:15:45] I/protractor - Type <tab> to see a list of locator strategies.
[19:15:45] I/protractor - Use the `list` helper function to find elements by strategy:
[19:15:45] I/protractor -   e.g., list(by.binding('')) gets all bindings.
[19:15:45] I/protractor -
module.js:557
    throw err;
    ^

Error: Cannot find module '_debugger'
    at Function.Module._resolveFilename (module.js:555:15)
    at Function.Module._load (module.js:482:25)
    at Module.require (module.js:604:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/protractor/built/debugger/debuggerCommons.js:1:82)
    at Module._compile (module.js:660:30)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)
    at tryModuleLoad (module.js:513:12)
    at Function.Module._load (module.js:505:3)
[19:15:45] I/local - Shutting down selenium standalone server.
MB-219751:~ olekh$ 

Error: Cannot find module '_debugger' , OSX๋„ ๊ฒฝํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๊ฑฐ์˜ 1๋…„ ๋™์•ˆ ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง๋„ ์ง„์ „์ด ์—†์Šต๋‹ˆ๊นŒ?

@ajklotz ์—ฌ์ „ํžˆ Node 7์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์†Œ ํƒ์ƒ‰๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด nvm ์„ ์‚ฌ์šฉํ•˜์—ฌ Node ๋ฒ„์ „ ๊ฐ„์— ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ํ†ต์Šค๋Ÿฝ์ง€๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค!

@ajklotz @monkpit @mraible Node 8 ์ด์ƒ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค์Œ์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  1. ์ด ๋น„๋””์˜ค "๊ฐ๋„๊ธฐ: ์ƒˆ๋กœ์šด ํฌ๋ง" https://youtu.be/6aPfHrSl0Qk?t=1051 , ํŠนํžˆ ์•ฝ 17:31 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋…ธ๋“œ 8 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜
  3. ES2017 async/await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ…Œ์ŠคํŠธ ๋ณ€ํ™˜: https://github.com/angular/protractor/blob/master/docs/async-await.md
  4. protractor.conf.js์— SELENIUM_PROMISE_MANAGER: false, ์ถ”๊ฐ€
  5. ์ƒˆ๋กœ์šด debugger ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ํฌ๋กฌ ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””๋ฒ„๊ทธํ•˜์‹ญ์‹œ์˜ค. https://github.com/angular/protractor/blob/master/docs/debugging.md#disabled -control-flow

๋‚ด ์ž์‹ ์˜ ๊ฐ๋„๊ธฐ ํ…Œ์ŠคํŠธ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

@ajklotz @monkpit @mraible ๋‹ค์Œ์€ ๋น„๋™๊ธฐ/๋Œ€๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ๋„๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ€ํ™˜ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. https://github.com/buildbot/buildbot/pull/4074/files

Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•ž์— await ๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.

  • .click()
  • .browser.wait()
  • .browser.get()
  • .getText()

ํ•จ์ˆ˜์— await ํ˜ธ์ถœ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•จ์ˆ˜ ์„œ๋ช… ์•ž์— async ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

async ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด await ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆฌ์ง€๋งŒ ์ผ๋‹จ ํ•ด๋ณด๋ฉด ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@rodrigc ์ด๋ฏธ async/await๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋‚ด ํ…Œ์ŠคํŠธ ์˜์—ญ์—์„œ ์ด ๋ฌธ์ œ์˜ ์š”์ ์€ ๋…ธ๋“œ 7์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ช…๋ น์ค„์—์„œ protractor --elementExplorer ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FWIW, async/await ์™€ ๊ฐ™์€ ์–ธ์–ด ๊ธฐ๋Šฅ์€ ์–ด์จŒ๋“  ๊ด€๋ จ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ž„์‹œ ์ˆ˜์ •์œผ๋กœ์„œ์˜ ์Šค์™‘์€ ์˜๋ฏธ๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐ๋„๊ธฐ๋Š” ํ•ด๋‹น ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@monkpit ๋„ค ์ ˆ๋Œ€์ ์œผ๋กœ ๋งž์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์˜ ๊ทผ๋ณธ ์›์ธ์€ https://github.com/angular/protractor/blob/master/lib/debugger/debuggerCommons.js#L1 ์ค„์—์„œ _debugger ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. node8์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ elementExplorer ํฌํ•จํ•˜์—ฌ debuggerCommons.js ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ node8์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ node8 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ๋„๊ธฐ๋กœ ๋””๋ฒ„๊ทธํ•˜๋ ค๋ฉด async/await ํ•˜๊ณ  https://github.com/angular/protractor/blob/master/docs/ ์˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.

์ด์ „ ๋””๋ฒ„๊น… ํ•ญ๋ชฉ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๊ฑฐ๋‚˜(๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค) ๋…ธ๋“œ 8+๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค(์ด๊ฒƒ๋„ ๊ดœ์ฐฎ์Œ). ํ•˜์ง€๋งŒ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๊ณต์‹์ ์ธ ๋‹ต๋ณ€์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@monkpit

๋‹ต์€ @qiyigg์˜ ์ด ๋Œ“๊ธ€ ์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ๋„๊ธฐ ๋””๋ฒ„๊ฑฐ/ํƒ์ƒ‰๊ธฐ์˜ ๊ฒฝ์šฐ ๋…ธ๋“œ 8์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค...

@qiyigg์™€ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด์„ ๋•Œ ๋“ค์€

์ง€๊ธˆ์€ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„์ง ๋…ผ์˜ ์ค‘์ž…๋‹ˆ๋‹ค.

@qiyigg chrome inspector ๋ฐ node8์—์„œ ์ƒˆ๋กœ์šด debugger ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ๋„๊ธฐ ํŒ€์€ debuggerCommon.js ๋ฅผ DEPRECATED ๋กœ @monkpit์— ๋™์˜ํ•˜์ง€๋งŒ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ ์ด ์˜ค๋ž˜๋œ ๋””๋ฒ„๊น… ์ฝ”๋“œ๋Š” node8๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์‚ญ์ œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฒ„๊น… ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ์ด๋ฏธ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋…ธ๋“œ 8์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/angular/protractor/blob/master/docs/debugging.md#enabled -control-flow
"์ฐธ๊ณ : ๊ฐ๋„๊ธฐ ๋””๋ฒ„๊ฑฐ ๋ฐ ์š”์†Œ ํƒ์ƒ‰๊ธฐ๋Š” Node.js 8+์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."

ํ•œ ๊ฐ€์ง€ ๋ช…์‹ฌํ•ด์•ผ ํ•  ์ ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์ด Node 8+๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ชจ๋“  ์‚ฌ๋žŒ์ด async/await๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(Google ๋‚ด์—์„œ ๊ทธ๋ ‡๊ฒŒ ํ•  ์˜ˆ์ •์ž„).

๋ถ„๋ช…ํžˆ Node 8+ ๋ฐ async/await๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์€ ์ด์ ์ด ์žˆ๊ณ  ๊ฒฐ๊ตญ์—๋Š” ์ด๋™ํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‰ฌ์šด ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. Google ๋‚ด๋ถ€์—์„œ ์ด ์ž‘์—…์„ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ ํฌํ•จ)์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ๊ฒฝํ—˜์„ ์ถ•์ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฒฐ๊ตญ Google ์™ธ๋ถ€ ์‚ฌ์šฉ์ž์—๊ฒŒ๋„ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ์ด ์˜ค๋ฅ˜๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ˆ์™ธ๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค. "์˜ค๋ฅ˜: '_debugger' ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ'" ๋Œ€์‹  Node 8+์— ๋Œ€ํ•ด element explorer/debugger๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PR์€ ๋งค์šฐ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

@qiyigg ๊ฒฝ๊ณ ๋ฅผ ๊ตต๊ฒŒ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž ๋กœ ํ‘œ์‹œ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹จ์–ด๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์•ฝ๊ฐ„ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

intellij๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๋””๋ฒ„๊ฑฐ์— ์ •๋ง ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์š”์†Œ ํƒ์ƒ‰๊ธฐ(๋‚˜๋Š” ์˜คํžˆ๋ ค ์ข‹์•„ํ•จ)๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์ง€๋งŒ ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด IDE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํฐ ์Šน๋ฆฌ์ž…๋‹ˆ๋‹ค.

@qiyigg ์ €๋Š”

์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ "์‚ฌ์šฉ์ž๋กœ์„œ" ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋Œ€ํ™”์—์„œ ๋‚ด๊ฐ€ ๋งŒ๋“  ๊ฒƒ์€ ์š”์†Œ ํƒ์ƒ‰๊ธฐ๊ฐ€ ์ƒˆ ๋…ธ๋“œ์™€ ํ•จ๊ป˜ ์‚ญ์ œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ƒˆ ๋…ธ๋“œ๋Š” Angular๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค). ์ด๊ฒƒ์€ ๋˜ํ•œ ๊ฐ‘์ž๊ธฐ ์ „์ฒด ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜์ด ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

async/wait๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์–ป์—ˆ๊ณ  ์ด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํŽ˜์ด์ง€ ๊ฐœ์ฒด๋ฅผ ๋ถ„๋ช…ํžˆ ๋‹ค์‹œ ์ž‘์„ฑํ•  ๊ฒƒ์ด์ง€๋งŒ ์›๊ฒฉ์œผ๋กœ ๊ฐ๋„๊ธฐ ๋ช…๋ น์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ๋Œ€์•ˆ์€ ์—†์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ํ•ญ์ƒ "๋””๋ฒ„๊ฑฐ"๋งŒ ํ˜ธ์ถœํ•˜๋Š” "ํ…Œ์ŠคํŠธ"๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•˜๊ณ  ํฌ๋กฌ๊ณผ ์ง์ ‘ ํ†ต์‹ ํ•˜์—ฌ ๋‚ด ํŽ˜์ด์ง€ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋ช…๋ น์„ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ์•„๋งˆ๋„ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋‹ค์Œ "๋””๋ฒ„๊ฑฐ" ํ˜ธ์ถœ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. while ๋ฃจํ”„์—์„œ.

์ด์™€ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์ง€์›๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์„๊นŒ์š”? ์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฑธ๊นŒ์š”... ์ €์—๊ฒŒ ํ…Œ์ŠคํŠธ/์ฝ”๋“œ์˜ ์˜ค๋ฅ˜ ๋””๋ฒ„๊น…์€ ์›๊ฒฉ์œผ๋กœ ํ…Œ์ŠคํŠธ ๋ช…๋ น์„ ์ง€์‹œํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ›„์ž๋Š” ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ ํƒ์ƒ‰๊ธฐ์ž…๋‹ˆ๋‹ค. :)

์ตœ์†Œํ•œ ํ˜„์žฌ ์†”๋ฃจ์…˜์ด ๋ฌด์—‡์ธ์ง€ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ…Œ์ŠคํŠธ๋Š” ๊ฐ๋„๊ธฐ๋กœ ์‹คํ–‰ํ•˜๋Š” ์œ ์ผํ•œ ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค(CompletableFuture๋Š” ๋ถ„๋ช…ํžˆ ๋„์šฐ๋ฏธ ํด๋ž˜์Šค์ž„).

jasmine.DEFAULT_TIMEOUT_INTERVAL = 3600000; // arbitrary large timeout
(global as any).systemTestsDone = new CompletablePromise<void>();

describe('TestHelper', () => {
  it('should provide a way to interactively run tests', async () => {
    await (global as any).systemTestsDone;
  });
});
node --inspect .\node_modules\protractor\bin\protractor .\systemTests\protractor.conf.js

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ํ…Œ์ŠคํŠธ๋Š” ํ…Œ์ŠคํŠธ ์‚ฌ์–‘๊ณผ ํŽ˜์ด์ง€ ๊ฐœ์ฒด ๊ฐ„์˜ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•˜๋Š” ๋‚ด (C#) WS ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋™์•ˆ ๊ณ„์† ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๋ธŒ๋ฆฌ์ง€๋Š” ๋ธŒ๋ผ์šฐ์ €์— ํŽ˜์ด์ง€ ๊ฐœ์ฒด๋ฅผ ๋กœ๋“œํ•˜๋„๋ก ์ง€์‹œํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์‹คํ–‰์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์— ๋ณด๋‚ด๋Š” ๋งˆ์ง€๋ง‰ ๋ช…๋ น์€ ๋ฌผ๋ก 

global.systemTestsDone.complete()

ํ…Œ์ŠคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋„๋ก. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ •๋ง๋กœ ๋”์ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์ด์ƒํ•œ ์ ์€ ์ด์ œ ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ์— ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ๋‚จ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋†“์น˜๊ณ  ์žˆ๋‹ค๋ฉด ๊ฐ๋„๊ธฐ์— ๋‹ค์‹œ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ „์ฒด devtools ํ”„๋กœํ† ์ฝœ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์˜ˆ๋ฅผ ๋“ค์–ด ํฌ๋กฌ ์ฝ˜์†”์ด๋‚˜ Visual Studio ์ฝ”๋“œ๋ฅผ "์š”์†Œ ํƒ์ƒ‰๊ธฐ"๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๊ฐ๋„๊ธฐ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋Š” ์˜ต์…˜์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ฐ๋„๊ธฐ๋ฅผ ์ธ์ˆ˜ํ•  @vikerman์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

@vikerman ์œ„ ๋Œ“๊ธ€ ์ค‘ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ํ•ด์•ผ ํ•˜๋‚˜์š”?

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๋‚ด๊ฐ€ ๊ฐ๋„๊ธฐ์— ๊ฐ–๊ณ  ์‹ถ์€ ๊ฒƒ์€( --elementExplorer ๊ฐ€ ๋” ์ด์ƒ ์ตœ๊ทผ node.js ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—) ๊ฐ๋„๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‚ฌ์–‘ ํŒŒ์ผ์„ ๋ฌด์‹œํ•˜๊ณ  ์ˆ˜๋™ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ณ„์† ์‹คํ–‰๋˜๋Š” ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ( protractor.exit() ?). ์ด ๋ชจ๋“œ์—์„œ node --inspect ๊ฐ๋„๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ผ๋ถ€ ํŽ˜์ด์ง€ ๊ฐœ์ฒด๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์™ธ๋ถ€ ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ๋ฅผ ๋””๋ฒ„๊ฑฐ ํ”„๋กœํ† ์ฝœ์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋Œ€ํ™”์‹์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ nvm์„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
nvm์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ 7.10.1์„ ์„ค์น˜ํ•˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ elementExplorer๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์•ฝ๊ฐ„์˜ ์ ˆ๋ฆ„๋ฐœ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์ง€๊ธˆ์€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋“œ v6์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ–ˆ๋Š”๋ฐ ์ด์ œ Angular 6+์—์„œ ๋…ธ๋“œ 6์ด ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Angular 6 ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Angular๊ฐ€ ์ด์ œ ๋…ธ๋“œ >= 8.9.0์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ๋„๊ธฐ REPL์„ ์–ป๊ธฐ ์œ„ํ•ด ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ฝ˜์†”์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ๊ธฐ์— ์ฃผ์–ด์ง„ ์ง€์นจ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค
https://github.com/angular/protractor/blob/master/docs/debugging.md#enabled -control-flow

ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘Ž

์ด๊ฒƒ์ด browser.pause() / browser.debugger()์˜ ๋์ž…๋‹ˆ๊นŒ? ์ œ์–ด ํ๋ฆ„์—์„œ ๋ฒ—์–ด๋‚˜ ๋…ธ๋“œ ๋””๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/angular/protractor/blob/master/docs/debugging.md

NVM์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ ๋ฒ„์ „ 7.10.1๋กœ ์ „ํ™˜ํ•˜๋ฉด browser.pause() ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

async/await๊ฐ€ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ๊ธธ์ด๋ฉฐ Webstorm์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋‹จ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์€ ์ ˆ๋Œ€์ ์œผ๋กœ ์›ํ™œํ•˜์ง€๋งŒ elementExplorer๊ฐ€ ์—†๋‹ค๊ณ  ๋Š๋ผ๋Š” ๋ถ€๋ถ„์€ elementor ํŒจํ‚ค์ง€์—์„œ ํ™•์žฅ๋œ ์‚ฌ์šฉ์œผ๋กœ ๋ถ€๋ถ„์„ ๋Œ€ํ™”์‹์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฆ๊ฑฐ์šด ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ํ…Œ์ŠคํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  ์ฆ‰์‹œ(๊ฒ€์ƒ‰์ฃผ์†Œ์ฐฝ์—์„œ) ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
nodejs 8+์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋””๋ฒ„๊น… ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ŠคํŽ™ํ„ฐ๊ฐ€ ์ค‘๋‹จ์ ์—์„œ ์ผ์‹œ ์ค‘์ง€๋˜๋Š” ๋™์•ˆ ์ฝ˜์†”์˜ ๋ช…๋ น์ด ์•ฝ์†์„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ํ…Œ์ŠคํŠธ ๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ์†์‹ค(์ด ์Šค๋ ˆ๋“œ์˜ ์‘๋‹ต ์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).
๊ฐ๋„๊ธฐ์—์„œ ์ด์ „ elementExplorer ๊ธฐ๋Šฅ์„ ๋Œ€์ฒดํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@ woppa684 ์ œ์•ˆ์ด ์ €์—๊ฒŒ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. @woppa684 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ repl-await๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ 10+๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค(์ฝ˜์†”์—์„œ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Œ).

์ฐธ์กฐ์šฉ์œผ๋กœ ๋‚ด ๋ชจ๋“  ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํŠน์ˆ˜ ๋Œ€ํ™”ํ˜• ๋””๋ฒ„๊ทธ ์‚ฌ์–‘ - interactive.e2e.ts

import { LoginPage } from './src/pages/login.po';
import { AppPage } from './src/pages/app.po';
import { SwitchProfileSideSheet } from './src/side-sheets/switch-profile-side-sheet.po';
import { sel } from '../src/testing/get-component';

const login = new LoginPage();
const app = new AppPage();
const switchProfileSideSheet = new SwitchProfileSideSheet();

// add my own page objects to the global object so I can use them interactively.
global['sel'] = sel;
global['po'] = {
  login,
  app,
  switchProfileSideSheet,
};

(global as any).systemTestsDone = new Promise(function(_resolve, _reject) {
  global['finishInteractiveDebug'] = _resolve;
});

describe('TestHelper', () => {
  it('should provide a way to interactively run tests', async () => {
    await (global as any).systemTestsDone;
  });
});

ํŒจํ‚ค์ง€.json

    "e2e-interactive": "node --experimental-repl-await --inspect-brk ./node_modules/.bin/protractor ./e2e/protractor.interactive.conf",

๊ฐ๋„๊ธฐ.๋Œ€ํ™”ํ˜•.conf.js

// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts

// standard protractor config
const baseConfig = require('./protractor.conf');
const configCopy = Object.assign({}, baseConfig.config);

const oneDayInMilliSeconds = 1000 * 60 * 60 * 24;
// set timeout to a huge number
// so it's not an issue when we pause in the debugger
configCopy.allScriptsTimeout = oneDayInMilliSeconds;
configCopy.jasmineNodeOpts.defaultTimeoutInterval = oneDayInMilliSeconds;
// just load our interactive specs
configCopy.specs = ['./interactive.e2e.ts'];

console.log('interactive config', configCopy);
exports.config = configCopy;

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” browser.sleep(100000) ๋Œ€์‹  browser.pause()

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰