量角器:WebDriverError:无法初始化sun.security.ssl.SSLContextImpl $ TLSContext

Ber*_*ram 12 webdriver protractor ubuntu-16.04

我刚开始使用量角器,在开始教程时我被阻止了.我找不到错误的真正来源......

我做了什么 :

  1. 安装量角器(npm install -g protractor)
  2. 更新并运行webdriver-manager
  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
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 量角器:v4.0.14
  2. Java:openjdk 9-Ubuntu 9b134(?)
  3. 系统:Ubuntu 16.04
  4. NodeJS:v6.8.1
  5. 我在conf.js中使用"capabilities.browserName:'firefox'"获得相同的输出

欢迎任何帮助!

fed*_*pad 4

好吧,我会尝试猜测,因为我在这方面没有经验。
问题似乎如下:

无法初始化类 sun.security.ssl.SSLContextImpl$TLSContext

至少根据您显示的日志,并假设量角器的所有设置均已正确完成。

这是来自 JDK 代码的“东西”。
让我们先看看为什么某些部分需要Java,因为它将帮助我们理解一些事情。
在日志的第一行,很明显您正在使用硒服务器(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);
Run Code Online (Sandbox Code Playgroud)

这些参数的定义方式如下:

let args: string[] = [];  
Run Code Online (Sandbox Code Playgroud)

这充满了这样的调用,例如:

  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');  
Run Code Online (Sandbox Code Playgroud)

我注意到您提到您使用 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(尽管默认值应该没问题......)。一种方法是添加以下行

args.push('-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"');
Run Code Online (Sandbox Code Playgroud)

let seleniumProcess = spawn('java', args, stdio);例如,在上面提到的文件中调用之前。

您还可以尝试什么
您可以检查是否可以通过将脚本直接连接到浏览器来避免此错误,而无需 selenium 服务器干预。如果您暂时在本地运行,这是可行的,并且由于避免了一跳而应该更快。如果您的浏览器位于远程(目前不是您的情况......),您需要使用 selenium 服务器。

正如我在开头链接的 selenium 服务器设置页面中所述,确实列出了避免使用它的可能性。硒服务器设置文档中提到这一点的关键部分如下

直接连接到浏览器驱动程序

Protractor 可以直接针对 Chrome 和 Firefox 进行测试,而无需使用 Selenium 服务器。要使用它,请在您的配置文件中设置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']
}
Run Code Online (Sandbox Code Playgroud)

有些人报告说,将此选项与 Chrome 浏览器(而不是 Firefox)结合使用已经解决了一些问题,这些问题无论如何似乎与您的问题并不严格相关: https ://github.com/angular/angular-seed/issues/254

还有什么? 有些人还报告说,将 chromedriver 更新到特定版本解决了使用 chrome 时 webdriver 中的一些问题,例如:https: //github.com/angular/protractor/issues/3640
https://github.com/angular /webdriver-manager/issues/102
因此,一个建议是尝试在相同的运行条件下使用 Chrome,看看会得到什么。它可能运行没有问题。

请记住,所有软件组件在某些情况下都依赖于子组件的特定版本(特定浏览器版本等),因此还要检查是否满足这些要求。这些都列在您使用的软件的相关页面中:Protractor、webdriver-manager 等。

我再次强调这样一个事实,即我既不是这些语言或框架的开发人员,所以我对 系统看法不是最好和最明智的。我还假设运行点之前的设置已正确完成。