Protractor: κ΅¬μ„±μ—μ„œ ν”„λ‘μ‹œ μ„œλ²„λ₯Ό μ§€μ •ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2013λ…„ 09μ›” 28일  Β·  24μ½”λ©˜νŠΈ  Β·  좜처: angular/protractor

question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

capabilities: {
  'proxy': {
    'proxyType': 'manual',
    'httpProxy': 'hostname.com:1234'
  }
}

λͺ¨λ“  24 λŒ“κΈ€

μ΄κ²ƒμ˜ 예λ₯Ό 보여쀄 수 μžˆμŠ΅λ‹ˆκΉŒ?

κ΅¬μ„±μ˜ capabilities μ„Ήμ…˜μ—μ„œ μ§€μ •ν•΄μ•Όν•©λ‹ˆλ‹€. μ›Ή λ“œλΌμ΄λ²„ ν”„λ‘μ‹œ 용 JSON ꡬ성을 λ§Œλ“œλŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€μ΄ λ¬Έμ„œλ₯Ό ν™•μΈν•˜μ„Έμš”. https://code.google.com/p/selenium/wiki/DesiredCapabilities#Proxy_JSON_Object

μ‹œλ„ν–ˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ‚΄ κ²½ν—˜μ΄ 없을 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹Ήμ‹ μ΄λ‚˜ λˆ„κ΅¬μ—κ²Œ 보여쀄 μˆ˜μžˆλŠ” κ°„λ‹¨ν•œ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ? 그것은 λ¨Ό 길을 갈 κ²ƒμž…λ‹ˆλ‹€.

capabilities: {
  'proxy': {
    'proxyType': 'manual',
    'httpProxy': 'hostname.com:1234'
  }
}

이 μ†”λ£¨μ…˜μ€ 우리의 μ„€μ •μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ 뭘 잘λͺ»ν•˜κ³  μžˆλŠ”μ§€ 아이디어가 μžˆμŠ΅λ‹ˆκΉŒ? Protractorλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•  λ•Œ λͺ…λ Ή 쀄에 λ‹€μŒ 였λ₯˜κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

> Fatal error: protractor exited with code: 1

λ‚΄ ꡬ성 νŒŒμΌμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

// A reference configuration file.
exports.config = {
   // ----- How to setup Selenium -----
   //
   // There are three ways to specify how to use Selenium. Specify one of the
   // following:
   //
   // 1. seleniumServerJar - to start Selenium Standalone locally.
   // 2. seleniumAddress - to connect to a Selenium server which is already
   //    running.
   // 3. sauceUser/sauceKey - to use remote Selenium servers via SauceLabs.

   // The location of the selenium standalone server .jar file.
   seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar',
   // The port to start the selenium server on, or null if the server should
   // find its own unused port.
   seleniumPort: null,
   // Chromedriver location is used to help the selenium standalone server
   // find chromedriver. This will be passed to the selenium jar as
   // the system property webdriver.chrome.driver. If null, selenium will
   // attempt to find chromedriver using PATH.
   chromeDriver: './selenium/chromedriver',
   // Additional command line options to pass to selenium. For example,
   // if you need to change the browser timeout, use
   // seleniumArgs: ['-browserTimeout=60'],
   seleniumArgs: [],

   // If sauceUser and sauceKey are specified, seleniumServerJar will be ignored.
   // The tests will be run remotely using SauceLabs.
   sauceUser: null,
   sauceKey: null,

   // ----- What tests to run -----
   //
   // Spec patterns are relative to the location of this config.
   specs: [
      './e2e/*-spec.js'
   ],

   // ----- Capabilities to be passed to the webdriver instance ----
   //
   // For a full list of available capabilities, see
   // https://code.google.com/p/selenium/wiki/DesiredCapabilities
   // and
   // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js
   capabilities: {
      'browserName': 'chrome',
      'proxy': {
         'proxyType': 'manual',
         'httpProxy': 'https://localhost.com:8443/'
      }
   },

   // A base URL for your application under test. Calls to protractor.get()
   // with relative paths will be prepended with this.
   baseUrl: 'http://localhost:9999',

   // Selector for the element housing the angular app - this defaults to
   // body, but is necessary if ng-app is on a descendant of <body>
   rootElement: 'body',

   // ----- Options to be passed to minijasminenode -----
   jasmineNodeOpts: {
      // onComplete will be called just before the driver quits.
      onComplete: null,
      // If true, display spec names.
      isVerbose: true,
      // If true, print colors to the terminal.
      showColors: true,
      // If true, include stack traces in failures.
      includeStackTrace: true,
      // Default time to wait in ms before a test fails.
      defaultTimeoutInterval: 10000
   }
};

λ‚˜λŠ” λ‹Ήμ‹ μ˜ λŠ₯λ ₯을 μ‹œν—˜ν•΄ λ³΄μ•˜κ³  그것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€. κ°€μ§œ httpProxyλ₯Ό μž…λ ₯ν•˜λ©΄ λΈŒλΌμš°μ €μ— 'could not connect to proxy'였λ₯˜κ°€ ν‘œμ‹œλ˜μ§€λ§Œ ν…ŒμŠ€νŠΈλŠ” 계속 μ‹€ν–‰λ©λ‹ˆλ‹€. ν”„λ‘μ‹œμ—†μ΄ ν…ŒμŠ€νŠΈκ°€ μ˜¬λ°”λ₯΄κ²Œ μ‹€ν–‰λ©λ‹ˆκΉŒ? 이 경우 μ–΄λ–»κ²Œ μ‹€νŒ¨ν•©λ‹ˆκΉŒ?

μ’‹μ•„, λ‚΄κ°€ 찾은 것은 λ‹€μŒκ³Ό 같이 baseurl을 https ν…ŒμŠ€νŠΈ μ‚¬μ΄νŠΈλ‘œ μ„€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

exports.config = {
   seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar',

   seleniumPort: null,

   chromeDriver: './selenium/chromedriver',

   seleniumArgs: [],

   sauceUser: null,
   sauceKey: null,

   specs: [
      './e2e/*-spec.js'
   ],

   capabilities: {
      'browserName': 'chrome'
   },

   baseUrl: 'https://localhost:8443/',

   rootElement: 'body',

   jasmineNodeOpts: {
      // onComplete will be called just before the driver quits.
      onComplete: null,
      // If true, display spec names.
      isVerbose: true,
      // If true, print colors to the terminal.
      showColors: true,
      // If true, include stack traces in failures.
      includeStackTrace: true,
      // Default time to wait in ms before a test fails.
      defaultTimeoutInterval: 10000
   }
};

μ•ˆλ…•ν•˜μ„Έμš”,

μ €λŠ” μ—¬λŸ¬λΆ„μ΄ μ—¬κΈ°μ„œ ν•œ 일둜 ν”„λ‘μ‹œλ₯Ό μž‘λ™μ‹œν‚¬ 수 μžˆμ—ˆμœΌλ―€λ‘œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이제 λ‚΄λΆ€ μ„œλΉ„μŠ€κ°€ ν”„λ‘μ‹œλ‘œ μ΄λ™ν•˜μ§€ μ•Šλ„λ‘ μ œμ™Έ ν•  수 μžˆλ„λ‘ noProxy λ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ„ μ‹œλ„ν–ˆμ§€λ§Œ noProxy 뢀뢄이 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. PhantomJλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  'proxy': {
      'proxyType': 'manual',
      'httpProxy': 'http://proxy.blah.co.uk:8080'
      'httpsProxy': 'http://proxy.blah.co.uk:8080'
      'noProxy': 'blah.blah.co.uk,*blah.blah.co.uk,.blah.blah.co.uk'
  }

},

μ•ˆλ…•ν•˜μ„Έμš”,
인증 된 ν”„λ‘μ‹œλ‘œ μž‘λ™ν•˜λ„λ‘ λ§Œλ“€ 수 μ—†μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ‹œλ„ν–ˆλ‹€ :

'proxy': {
  'proxyType': 'manual',
  'httpProxy': 'user:[email protected]:3128'
  'sslProxy': 'user:[email protected]:3128'
}

κ³Ό

'proxy': {
  'proxyType': 'manual',
  'httpProxy': 'http://user:[email protected]:3128'
  'sslProxy': 'http://user:[email protected]:3128'
}

λΈŒλΌμš°μ € Chrome을 μ‚¬μš©ν•˜μ—¬ https://docs.angularjs.org/tutorial/step_03 을 μ™„λ£Œν•˜λ €κ³ ν•©λ‹ˆλ‹€.

λ‚˜μ—κ²Œλ„ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€-μ‚¬μš©μž 이름 / μ•”ν˜Έμ™€ ν•¨κ»˜ host : port λ₯Ό μ œκ³΅ν•΄μ•Όν•˜λ©° μœ„μ˜ λͺ¨λ“  μ œμ•ˆμ„ μ‹œλ„ν–ˆμ§€λ§Œ 아무것도 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ νšŒμ‚¬ μΈν„°λ„·μ—μ„œ λ²—μ–΄λ‚˜ ν”„λ‘μ‹œμ—†μ΄ μ‹œλ„ν•˜λ©΄ λͺ¨λ“  것이 잘 μž‘λ™ν•©λ‹ˆλ‹€. 도움이 ν•„μš”ν•˜μ„Έμš”?

사싀 λ‚΄ λ¬Έμ œλŠ” μ‹œμŠ€ν…œ λ³€μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 http_proxy   http://user:password<strong i="6">@proxy_url</strong>:port
 https_proxy   http://user:password<strong i="7">@proxy_url</strong>:port

μ—¬κΈ° GE Softwareμ—μ„œ λ‹€μ‹œ μ—΄μ–΄μ•Όν•©λ‹ˆλ‹€. κ΅¬μ„±μ—μ„œ http_proxy 및 https_proxyλ₯Ό 섀정해도 Protractorκ°€ Saucelabs에 ν…ŒμŠ€νŠΈ 결과의 μ΅œμ’… μ’…λ£Œ μ½”λ“œλ₯Ό 보내도둝 ν—ˆμš©ν•˜μ§€ μ•Šμ•„ Saucelabsκ°€ λΉ„ν™œμ„±μœΌλ‘œ 인해 ν…ŒμŠ€νŠΈμ— μ‹€νŒ¨ν•˜κ²Œλ©λ‹ˆλ‹€.

@jonniespratley κ°€ protractor config --proxy=http://user:password<strong i="6">@proxy_url</strong>:port μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” μ†ŒμŠ€ μ‹€ν—˜μ‹€μ—μ„œ 각도기 ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ ETIMEDOUT 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. νšŒμ‚¬ λ°©ν™”λ²½ 뒀에 있으며 각도기 ꡬ성 파일 및 ν™˜κ²½ λ³€μˆ˜μ— ν”„λ‘μ‹œλ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. ꡬ성이 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ•„λž˜λŠ” λ‚΄κ°€ μ–»λŠ” 였λ₯˜μž…λ‹ˆλ‹€.

Error: ETIMEDOUT connect ETIMEDOUT 151.444.33.22:80
    at ClientRequest.<anonymous> (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:174:16)
    at emitOne (events.js:77:13)
    at ClientRequest.emit (events.js:169:7)
    at Socket.socketErrorListener (_http_client.js:259:9)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at emitErrorNT (net.js:1253:8)
    at doNTCallback2 (node.js:439:9)
    at process._tickCallback (node.js:353:17)
From: Task: WebDriver.createSession()
    at Function.webdriver.WebDriver.acquireSession_ (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:157:22)
    at Function.webdriver.WebDriver.createSession (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:131:30)
    at [object Object].Builder.build (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/selenium-webdriver/builder.js:445:22)
    at [object Object].DriverProvider.getNewDriver (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/lib/driverProviders/driverProvider.js:42:27)
    at [object Object].Runner.createBrowser (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/lib/runner.js:190:37)
    at /Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/lib/runner.js:280:21
    at _fulfilled (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/q/q.js:834:54)
    at self.promiseDispatch.done (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/q/q.js:863:30)
    at Promise.promise.promiseDispatch (/Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/q/q.js:796:13)
    at /Users/user123/Desktop/Sample/example-sandbox/node_modules/protractor/node_modules/q/q.js:556:49
[launcher] Process exited with error code 1

μ–΄λ–€ 생각? 도움을 μ£Όμ‹œλ©΄ 정말 κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

λΉ„μŠ·ν•œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. μ €λŠ” νšŒμ‚¬ ν”„λ‘μ‹œ 뒀에 있고 browserstack에 ν…ŒμŠ€νŠΈλ₯Ό μ œμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.

/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/promise.js:654
    throw error;
    ^

Error: ETIMEDOUT connect ETIMEDOUT 208.52.180.201:80
    at ClientRequest.<anonymous> (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/http/index.js:381:15)
    at emitOne (events.js:77:13)
    at ClientRequest.emit (events.js:169:7)
    at Socket.socketErrorListener (_http_client.js:259:9)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at emitErrorNT (net.js:1253:8)
    at doNTCallback2 (node.js:441:9)
    at process._tickCallback (node.js:355:17)
From: Task: WebDriver.createSession()
    at Function.createSession (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/webdriver.js:329:24)
    at Builder.build (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/builder.js:458:24)
    at Object.<anonymous> (/Users/Documents/coding/sublime/simpleboilerplate/bs.js:13:3)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)
    at node.js:963:3
From: Task: WebDriver.navigate().to(http://www.google.com)
    at WebDriver.schedule (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/webdriver.js:377:17)
    at Navigation.to (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/webdriver.js:1027:25)
    at WebDriver.get (/Users/Documents/coding/sublime/simpleboilerplate/node_modules/selenium-webdriver/lib/webdriver.js:795:28)
    at Object.<anonymous> (/Users/Documents/coding/sublime/simpleboilerplate/bs.js:15:8)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)

νšŒμ‚¬ ν”„λ‘μ‹œλ₯Ό λ²—μ–΄λ‚˜ perfecto mobile의 μ…€λ ˆλŠ„ μ„œλ²„λ‘œ μ΄λ™ν•˜λŠ” 데 λ§ˆμΉ¨λ‚΄ 도움이 된 것은 webDriverProxy ꡬ성을 μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

exports.config = {
    framework: 'jasmine',
    seleniumAddress: 'https://yourCloudName.perfectomobile.com/nexperience/perfectomobile/wd/hub',

    webDriverProxy: 'http://your.proxy.here:8080',

    capabilities: { ... },
    specs: ['myspec.js']
};

λ‚˜λŠ” νšŒμ‚¬ ν”„λ‘μ‹œ λ’€μ—μ„œ μΌν•˜κ³  μžˆλŠ”λ° conf.js 에이 μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λ €κ³  μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.
'ν”„λ‘μ‹œ': {
'proxyType': 'μˆ˜λ™',
'httpProxy': ' user : [email protected] : 8080'
'sslProxy': ' user : [email protected] : 8080'
}

μ œλŒ€λ‘œ μž‘λ™ν–ˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œκ°„μ΄ μ¦κ°€ν•˜μ—¬ κ²°κ³Όκ°€ μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. 예 κΈ°λ³Έ μ‹œκ°„μ„ 늘릴 수 μžˆμ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 데 더 였래 걸리지 μ•ŠκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.
λˆ„κ΅¬λ“ μ§€μ΄ 문제λ₯Ό ν•΄κ²°ν•˜λ„λ‘ λ„μšΈ 수 μžˆμŠ΅λ‹ˆκΉŒ?

미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

@gregjacobs λ‚˜λŠ” perfecto와 ν•¨κ»˜ webDriverProxyλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 그것은 μž μ‹œ λ™μ•ˆ λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€. 4.x λ˜λŠ” 5.x둜 μ—…κ·Έλ ˆμ΄λ“œ ν•œ ν›„ 더 이상 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ—…κ·Έλ ˆμ΄λ“œ 후에도 μ—¬μ „νžˆ μž‘λ™ν•©λ‹ˆκΉŒ?

https://github.com/angular/protractor/blob/master/lib/config.ts 의 ν”„λ‘μ‹œ μ˜΅μ…˜ 쀑 μ–΄λŠ 것도 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 아무도 v5μ—μ„œ ν”„λ‘μ‹œλ₯Ό κ΅¬μ„±ν•˜λŠ” 데 ν–‰μš΄μ΄ μžˆμ—ˆμŠ΅λ‹ˆκΉŒ?

λΏ‘ 빡뀨
μ΄λŸ¬ν•œ κΈ°λŠ₯을 κ°–μΆ˜ BrowserMob ν”„λ‘μ‹œ 및 각도기 μ„€μ •-잘 μž‘λ™ν•©λ‹ˆλ‹€.

  capabilities: {
    'browserName': 'chrome',
    'args': ['disable-web-security'],
    'proxy': {
      'proxyType': 'manual',
      'httpProxy': '10.179.70.127:10801',
      'sslProxy': '10.179.70.127:10801',
      "autodetect": 'false'

    }
}

@gregjacobs webDriverProxy 속성에 μ‚¬μš©λ˜λŠ” ν”„λ‘μ‹œμ˜ μ‚¬μš©μž 이름 / μ•”ν˜Έλ₯Ό μ§€μ •ν•΄μ•Όν•©λ‹ˆλ‹€. μ–΄λ–»κ²Œ μ•Œμ•„?

@ luker2 λΆˆν–‰νžˆλ„ μ •ν™•νžˆ 잘 λͺ¨λ₯΄κ² μ§€λ§Œ webDriverProxy: 'http://username:[email protected]:8080' μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? ( 8080 λŠ” ν”„λ‘μ‹œμ˜ ν¬νŠΈμž…λ‹ˆκΉŒ?)

@gregjacobs 예, 아직 후속 쑰치λ₯Ό μ·¨ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ 그것이 κ²°κ΅­ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€!

λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ 경우 특수 문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ν•˜κΈ° μœ„ν•΄ username : password 뢀뢄을 ​​URL μΈμ½”λ”©ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€.

webDriverProxy: `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@your.proxy.here:8080`

@ luker2 ꡉμž₯ν•©λ‹ˆλ‹€, 당신이 μž‘λ™ν•˜λŠ” 것을 λ“£κ³  κΈ°μ©λ‹ˆλ‹€! 그리고 μ‚¬μš©μž 이름과 μ•”ν˜Έλ₯Ό μΈμ½”λ”©ν•˜λŠ” uri에 λŒ€ν•œ 글을 κ²Œμ‹œ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰