2017-01-04 5 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. Java: OpenJDK 9-Ubuntu 9b134
  3. System (?): Ubuntu 16,04
  4. NodeJS: v6.8.1
  5. Я получаю тот же результат b y using "capability.browserName: 'firefox' 'in conf.js

Любая помощь была бы рада!

+0

Вы действительно используете Java 9? Зачем? – fedepad

+0

Вы пытались добавить 'directConnect: true' в свой conf.js? – fedepad

+0

И вы могли бы проверить, какая версия webdriver-manager вы используете? – fedepad

ответ

4

Ну, я постараюсь угадать, поскольку у меня нет опыта в этой области.
Проблема, как представляется, следующее:

Не удалось инициализировать класс sun.security.ssl.SSLContextImpl $ TLSContext

по крайней мере, согласно журнала, который вы показываете, и предполагая, все настройки для Protractor сделано правильно.

Это «материал», поступающий из кода JDK.
Давайте посмотрим, почему Java сначала требуется в некоторых частях, так как это поможет нам понять немного вещей.
В первой строке вашего журнала ясно, что вы используете сервер селена (https://github.com/angular/protractor/blob/master/docs/server-setup.md).
Как видно из приведенной выше ссылки, серверу selenium нужен JDK, поэтому мы нашли одну Java «точка входа».

Сервер Селен начал использовать WebDriver-менеджер, поэтому в коде для webdriver-manager должен быть какой-то вызов, чтобы начать Java. Посмотрим, где это.
Глядя на источник здесь
https://github.com/angular/webdriver-manager/blob/70614a23e289088c852f5c0162a947488ffc77e0/lib/cmds/start.ts

мы можем видеть, что Java будет запущен здесь

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, который еще не является, вероятно, надёжным прямо сейчас, как это до сих пор не выпущено для общедоступности:
http://www.java9countdown.xyz/
http://openjdk.java.net/projects/jdk9/

Моего первое предложение: Используйте стабильная версия Java, например 8 на данный момент, которая по умолчанию используется в моей машине Ubuntu 16.04.

Чтобы получить хорошее чувство о том, где ошибка, которую вы видите, возможно, происходит, я предлагаю прочитать следующее сообщение SO:
SSLContext initialization и первый ответ в там, который я нашел очень поучителен в любом случае. Вы также можете прочитать здесь: https://www.java.com/en/configure_crypto.html.

Глядя на это, я бы предположил, что нужно запустить java со следующим системным свойством jdk.tls.client.protocols (хотя значения по умолчанию должны быть в порядке ...). Один из способов сделать это было бы добавить следующую строку

args.push('-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"'); 

, например, прямо перед вызовом let seleniumProcess = spawn('java', args, stdio); в файл, упомянутый выше.

Что еще вы могли бы попробовать
Вы можете проверить, можно ли избежать этой ошибки, подключив сценарий непосредственно в браузере, без вмешательства Селен сервера. Это выполнимо, если вы запускаете локально на данный момент и должны быть быстрее, когда вы избегаете одного прыжка. В случае, если ваш браузер расположен удаленно (а не ваш случай на данный момент ...), вы используете NEED для использования сервера selenium.

Как указано на странице настройки сервера selenium, с которой я связан в начале, эта возможность избежать ее использования действительно указана. Ключевой раздел в документации по установке Селен сервера, говоря это следующее

Подключение непосредственно к драйверам Browser

транспортира можно проверить непосредственно на Chrome и Firefox без использования селена сервера. Чтобы использовать это, в вашем файле конфигурации установите directConnect: true.

directConnect: true - Ваш тестовый скрипт напрямую связывается с Chrome Драйвер или драйвер Firefox, минуя любой сервер Selenium. Если это true, настройки для seleniumAddress и seleniumServerJar будут игнорируются.Если вы попытаетесь использовать браузер, отличный от Chrome или Firefox , будет отправлена ​​ошибка. Преимущество прямого подключения к драйверам браузера заключается в том, что ваши тестовые скрипты могут запускаться и работать быстрее.

Таким образом, принимая conf.js вы используете из учебника, вы бы добавить строку, определяющую эту дополнительную конфигурацию, т.е.

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

Некоторые люди сообщали о том, что с помощью этой опции в сочетании с Chrome браузер вместо Firefox разрешил некоторые проблемы, которые в любом случае не кажутся строго связанными с вашими: 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
Так одно предложение было бы попробовать использовать Chrome в одних и тех же условиях эксплуатации и посмотри, что получишь. Он может работать без проблем.

Пожалуйста, имейте в виду, что все компоненты программного обеспечения в некоторых случаях полагаются на конкретные версии подкомпонентов (конкретные версии браузера и т. Д.), Поэтому проверьте также, что эти требования выполнены. Они перечислены в соответствующих страницах для используемого программного обеспечения: транспортир, WebDriver-менеджер и т.д.

Снова, я хотел бы подчеркнуть тот факт, что я ни разработчик на этих языках или рамках, так моеговид системы не самый лучший и самый информированный. Я также предполагаю, что настройка до рабочей точки выполнена правильно.

+1

Извините за задержку ... Это очень богатый ответ! Спасибо за этот «методологический» подход. На самом деле я использовал Java 8, и это решило мою проблему. –

+0

работает для меня. Я понижаю рейтинг openjdk-9-jre-headless до openjdk-8-jre-headless – fearis