Ответ 1
Хорошо, я постараюсь угадать, поскольку у меня нет опыта в этой области.
Проблема заключается в следующем:
Не удалось инициализировать класс sun.security.ssl.SSLContextImpl $TLSContext
по крайней мере в соответствии с журналом, который вы показываете, и предполагая, что все настройки для Protractor выполнены правильно.
Это "материал", поступающий из кода JDK.
Давайте посмотрим, почему сначала Java требуется в некоторых частях, так как это поможет нам понять немного вещей.
Прямо на первой строке вашего журнала ясно, что вы используете сервер selenium (https://github.com/angular/protractor/blob/master/docs/server-setup.md).
Как видно из приведенной выше ссылки, серверу selenium нужен JDK, поэтому мы нашли одну "точку входа" Java.
Сервер selenium запускается с помощью webdriver-manager, поэтому в коде для 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
и первый ответ там, который я нашел очень поучительным в любом случае. Вы также можете прочитать здесь: https://www.java.com/en/configure_crypto.html.
Глядя на это, я бы предположил, что нужно запустить java со следующим системным свойством jdk.tls.client.protocols
on (хотя значения по умолчанию должны быть в порядке...). Один из способов сделать это - добавить следующую строку
args.push('-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"');
например, прямо перед вызовом let seleniumProcess = spawn('java', args, stdio);
в файле, указанном выше.
Что еще вы можете попробовать
Вы можете проверить, можете ли вы избежать этой ошибки, подключив ваш script напрямую к браузеру без вмешательства сервера селена. Это выполнимо, если вы запускаете локально на данный момент и должны быть быстрее, когда вы избегаете одного прыжка. В случае, если ваш браузер расположен удаленно (а не ваш случай на данный момент...), вы НУЖДЫ, чтобы использовать сервер selenium.
Как указано на странице настройки сервера selenium, с которой я связан вначале, эта возможность избежать использования этой функции действительно указана. Ключевой раздел в документации по настройке сервера selenium, в которой упоминается, приведен ниже.
Прямое подключение к драйверам браузера
Транспортер может протестировать непосредственно против Chrome и Firefox без использования Селен-сервер. Чтобы использовать это, в вашем файле конфигурации
directConnect: true
.
directConnect: true
- ваш тест script напрямую связывается с 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
Что еще?
Некоторые люди также сообщили, что обновление хромированного ребра до определенной версии разрешило некоторые проблемы в webdriver при использовании хром, например:
https://github.com/angular/protractor/issues/3640
https://github.com/angular/webdriver-manager/issues/102
Таким образом, одно предложение - попробовать использовать Chrome в тех же условиях работы и посмотреть, что вы получаете. Он может работать без проблем.
Пожалуйста, имейте в виду, что все компоненты программного обеспечения в некоторых случаях полагаются на конкретные версии подкомпонентов (конкретные версии браузера и т.д.), поэтому проверьте также, что эти требования соблюдены. Они перечислены на соответствующих страницах для используемого вами программного обеспечения: транспортир, webdriver-manager и т.д.
Опять же, я подчеркиваю, что я не разработчик на этих языках или фреймворках, поэтому представление my системы не самое лучшее и самое информированное. Я также предполагаю, что настройка до рабочей точки выполнена правильно.