2017-01-04 9 views
11

प्रारंभ नहीं कर सका मैं प्रोटैक्टर के लिए बस नया हूं, और ट्यूटोरियल शुरू करते समय मुझे अवरुद्ध कर दिया गया है। मैं त्रुटि का असली स्रोत नहीं मिल सकता है ...

क्या मैंने किया:

  1. चांदा (npm install -g protractor)
  2. अद्यतन को स्थापित और webdriver-प्रबंधक
  3. कॉपी/पेस्ट चलाने चांदा ट्यूटोरियल से उदाहरण फ़ाइलों
  4. रन 'चांदा conf.js'

मुझे क्या मिलेगा:

[11:35:46] I/hosted - Using the selenium server at  http://localhost:4444/wd/hub 
[11:35:46] I/launcher - Running 1 instances of WebDriver 
[11:35:46] E/launcher - Could not initialize class sun.security.ssl.SSLContextImpl$TLSContext 
[11:35:46] E/launcher - WebDriverError: Could not initialize class sun.security.ssl.SSLContextImpl$TLSContext 
    at WebDriverError (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:27:5) 
    at Object.checkLegacyResponse (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:639:15) 
    at parseHttpResponse (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:538:13) 
    at client_.send.then.response (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:472:11) 
    at ManagedPromise.invokeCallback_ (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1379:14) 
    at TaskQueue.execute_ (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) 
    at TaskQueue.executeNext_ (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) 
    at asyncRun (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2820:25) 
    at /home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:639:7 
    at process._tickCallback (internal/process/next_tick.js:103:7) 
From: Task: WebDriver.createSession() 
    at Function.createSession (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver.js:329:24) 
    at Builder.build (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/builder.js:458:24) 
    at Hosted.DriverProvider.getNewDriver (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/built/driverProviders/driverProvider.js:37:33) 
    at Runner.createBrowser (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/built/runner.js:198:43) 
    at /home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/built/runner.js:277:30 
    at _fulfilled (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:834:54) 
    at self.promiseDispatch.done (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:863:30) 
    at Promise.promise.promiseDispatch (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:796:13) 
    at /home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:556:49 
    at runSingle (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:137:13) 
[11:35:46] E/launcher - Process exited with error code 199 

नोट्स

  1. कोणमापक: v4.0.14
  2. जावा: openjdk 9-उबंटू 9b134
  3. प्रणाली (?): उबंटू 16.04
  4. नोडजेएस: v6.8.1
  5. मुझे एक ही आउटपुट बी मिलता है y "capabilities.browserName: 'firefox' का उपयोग conf.js

किसी भी सहायता का स्वागत किया जाएगा!

+0

आप वास्तव में जावा 9 का उपयोग कर रहे हैं? क्यूं कर? – fedepad

+0

क्या आपने अपने conf.js में 'directConnect: true' जोड़ने की कोशिश की है? – fedepad

+0

और क्या आप जांच सकते हैं कि वेबड्राइवर-मैनेजर का कौन सा संस्करण चल रहा है? – fedepad

उत्तर

4

ठीक है, मैं अनुमान लगाने की कोशिश करूंगा, क्योंकि मुझे इस क्षेत्र में कोई अनुभव नहीं है।
समस्या निम्न हो रहा है:

आरंभ नहीं हो सका वर्ग sun.security.ssl.SSLContextImpl $ TLSContext

कम से कम लॉग है कि आप को दिखाने के लिए अनुसार, और सभी सेटअप यह सोचते हैं प्रोटैक्टर के लिए सही ढंग से किया गया है।

यह जेडीके कोड से "सामान" आ रहा है।
चलिए देखते हैं कि पहले कुछ हिस्सों में जावा की आवश्यकता क्यों है, क्योंकि इससे हमें कुछ कम चीजों को समझने में मदद मिलेगी।
अपने लॉग की पहली पंक्ति पर यह स्पष्ट है कि आप सेलेनियम सर्वर (https://github.com/angular/protractor/blob/master/docs/server-setup.md) का उपयोग कर रहे हैं।
उपर्युक्त लिंक को पढ़कर देखा जा सकता है, सेलेनियम सर्वर को जेडीके की आवश्यकता है, इसलिए हमें एक जावा "एंट्री पॉइंट" मिला।

सेलेनियम सर्वर वेबड्राइवर-प्रबंधक का उपयोग शुरू कर दिया गया है, इसलिए webdriver-manager के कोड में जावा शुरू करने के लिए कुछ कॉल होना चाहिए। चलो देखते हैं कि यह कहां है।
स्रोत यहाँ को देखते हुए
https://github.com/angular/webdriver-manager/blob/70614a23e289088c852f5c0162a947488ffc77e0/lib/cmds/start.ts

हम देख सकते हैं कि जावा यहाँ शुरू कर दिया जाएगा

let seleniumProcess = spawn('java', args, stdio); 

और इन आर्ग निम्नलिखित तरीके से परिभाषित कर रहे हैं:

let args: string[] = []; 

और यह वह जगह है उदाहरण के लिए इस तरह से बुलाया गया:

if (osType === 'Linux') { 
    // selenium server may take a long time to start because /dev/random is BLOCKING if there is not 
    // enough entropy the solution is to use /dev/urandom, which is NON-BLOCKING (use /dev/./urandom 
    // because of a java bug) 
    // https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/1301 
    // https://bugs.openjdk.java.net/browse/JDK-6202721 
    args.push('-Djava.security.egd=file:///dev/./urandom'); 

मैंने देखा है कि आप आप OpenJDK 9, जो अभी के रूप में यह अभी भी सामान्य उपलब्धता के लिए जारी नहीं किया गया है शायद trustable अभी तक नहीं है का उपयोग करने का उल्लेख:
http://www.java9countdown.xyz/
http://openjdk.java.net/projects/jdk9/

मेरा पहला सुझाव: एक का उपयोग करें उत्पादन स्थिर जावा संस्करण, इस पल के लिए 8 की तरह, जो मेरी उबंटू 16.04 मशीन में डिफ़ॉल्ट प्रतीत होता है।
SSLContext initialization और वहाँ के पहले उत्तर है, जो मैं वैसे भी बहुत शिक्षाप्रद पाया:

जहां त्रुटि आप देख ही शुरू हो सकता है, मैं पढ़ने का सुझाव अतः पद निम्नलिखित के बारे में एक अच्छा लग रहा है पाने के लिए। आप यहां भी पढ़ सकते हैं: https://www.java.com/en/configure_crypto.html

यह देखकर, मैं सुझाव दूंगा कि किसी को निम्नलिखित सिस्टम प्रॉपर्टी jdk.tls.client.protocols पर जावा शुरू करना होगा (हालांकि डिफ़ॉल्ट ठीक होना चाहिए ...)। एक तरह से यह करने के लिए सही ऊपर उल्लेख किया फ़ाइल में let seleniumProcess = spawn('java', args, stdio); को कॉल करने से पहले निम्न पंक्ति

args.push('-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"'); 
उदाहरण के लिए

जोड़ने के लिए किया जाएगा।

और क्या आप
आप जांच कर सकता है आप जो सीधे ब्राउज़र से अपनी स्क्रिप्ट को जोड़ने, बिना सेलेनियम सर्वर हस्तक्षेप से इस त्रुटि से बचने कर सकते हैं कि कोशिश कर सकते। यह तब करने योग्य है यदि आप इस पल के लिए स्थानीय रूप से दौड़ते हैं और तेजी से होना चाहिए क्योंकि आप एक हॉप से ​​बचते हैं। यदि आपका ब्राउज़र दूरस्थ रूप से स्थित है (पल के लिए आपका मामला नहीं ...) सेलेनियम सर्वर का उपयोग करने के लिए की आवश्यकता है।

जैसा कि मैंने शुरुआत में जुड़े सेलेनियम सर्वर सेटअप पेज में बताया है, इसका उपयोग करने से बचने की संभावना वास्तव में सूचीबद्ध है। सेलेनियम सर्वर सेटअप दस्तावेज में कुंजी अनुभाग है कि यह उल्लेख निम्नलिखित

ब्राउज़र ड्राइवर को सीधे जोड़ने

कोणमापक एक सेलेनियम सर्वर का उपयोग किए बिना Chrome और Firefox के खिलाफ सीधे परीक्षण कर सकते हैं है। इसका उपयोग करने के लिए, अपनी कॉन्फ़िगरेशन फ़ाइल में directConnect: true सेट करें।

directConnect: true - आपकी टेस्ट स्क्रिप्ट किसी भी सेलेनियम सर्वर को छोड़कर सीधे क्रोम ड्राइवर या फ़ायरफ़ॉक्स ड्राइवर को संचारित करती है। यदि यह सत्य है, तो seleniumAddress और seleniumServerJar के लिए सेटिंग्स अनदेखा की जाएगी।यदि आप क्रोम या फ़ायरफ़ॉक्स के अलावा किसी अन्य ब्राउज़र का उपयोग करने का प्रयास करते हैं तो एक त्रुटि फेंक दी जाएगी। ब्राउज़र ड्राइवरों से सीधे कनेक्ट करने का लाभ यह है कि आपकी टेस्ट स्क्रिप्ट प्रारंभ हो सकती हैं और तेजी से चल सकती हैं।

तो, conf.js आप ट्यूटोरियल से का उपयोग लेने के लिए, आप एक लाइन इस अतिरिक्त विन्यास को परिभाषित करने, यानी जोड़ना होगा

// conf.js 
exports.config = { 
    directConnect: true 
    framework: 'jasmine', 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    specs: ['spec.js'] 
} 

कुछ लोगों को सूचित किया है कि क्रोम के साथ संयोजन में इस विकल्प का उपयोग https://github.com/angular/angular-seed/issues/254

क्या किसी और : फ़ायरफ़ॉक्स के बजाय ब्राउज़र कुछ मुद्दे हैं जो वैसे भी तुम्हारा करने के लिए सख्ती से संबंधित नहीं है संकल्प लिया गया है? कुछ लोगों को भी सूचित किया है कि किसी विशेष संस्करण के लिए chromedriver को अपडेट करते समय क्रोम का उपयोग कर, जैसे webdriver में कुछ मुद्दों को हल किया है: https://github.com/angular/protractor/issues/3640
https://github.com/angular/webdriver-manager/issues/102
तो एक सुझाव ही चल रहा है की स्थिति में क्रोम का उपयोग करने की कोशिश करने का हो सकता है और देखें कि आपको क्या मिलता है। यह बिना किसी समस्या के चला सकता है।

कृपया ध्यान रखें कि सभी सॉफ़्टवेयर घटक उप-कॉम्पोनेंट्स (विशिष्ट ब्राउज़र संस्करण इत्यादि) के विशिष्ट संस्करणों में कुछ मामलों में भरोसा करते हैं, इसलिए यह भी जांचें कि उन आवश्यकताओं को पूरा किया गया है। ये सॉफ्टवेयर आप उपयोग के लिए प्रासंगिक पृष्ठों में सूचीबद्ध हैं: चांदा, webdriver-प्रबंधक, आदि

फिर से, मैं इस तथ्य है कि मैं कर रहा हूँ न इन भाषाओं या चौखटे में एक डेवलपर के तनाव, इसलिए मेरीसिस्टम का देखें सर्वोत्तम और सबसे सूचित एक नहीं है। मैं यह भी मानता हूं कि चलने वाले बिंदु तक सेटअप सही तरीके से किया गया है।

+1

देरी के लिए खेद है ... यह एक बहुत ही समृद्ध जवाब है! इस "पद्धति" दृष्टिकोण के लिए धन्यवाद। असल में मैंने जावा 8 का उपयोग किया और यह मेरी समस्या का समाधान करता है। –

+0

मेरे लिए समान काम करता है। मैंने openjdk-9-jre-headless को openjdk-8-jre-headless में डाउनग्रेड कर दिया है – fearis

संबंधित मुद्दे