首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >量角器: WebDriverError :无法初始化sun.security.ssl.SSLContextImpl$TLSContext

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

Stack Overflow用户
提问于 2017-01-04 10:49:06
回答 1查看 4.5K关注 0票数 12

我只是新来的量角器,当我开始教程的时候,我被阻塞了。我找不到错误的真正根源..。

我所做的:

  1. 安装量角器(npm install -g protractor)
  2. 更新并运行webdriver
  3. 从量角器教程复制/粘贴示例文件
  4. 运行“量角器conf.js”

我得到了什么:

代码语言:javascript
复制
[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

Notes

  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'“获得相同的输出

欢迎任何帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-29 11:56:34

好吧,我试着猜一猜,因为我在这方面没有经验。

问题似乎如下:

无法初始化类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将在这里启动。

代码语言:javascript
复制
let seleniumProcess = spawn('java', args, stdio);

这些args的定义如下:

代码语言:javascript
复制
let args: string[] = [];  

这里充满了这样的名字,例如:

代码语言:javascript
复制
  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/

我的第一个建议:现在使用一个生产稳定的版本,比如8,这在我的Ubuntu16.04机器中似乎是默认的。

为了对你看到的错误的来源有一个很好的感觉,我建议阅读下面的文章:

SSLContext initialization和那里的第一个答案,我觉得这是很有教育意义的。您还可以在这里阅读:crypto.html

考虑到这一点,我建议必须使用以下系统属性jdk.tls.client.protocols启动java (尽管默认值应该是可以的.)。一种方法是添加以下行

代码语言:javascript
复制
args.push('-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"');

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

,你还可以试试吗?

您可以通过直接将脚本连接到浏览器来检查是否可以避免此错误,而无需selenium服务器干预。这是可行的,如果你运行的地方暂时和应该是更快,因为你避免一跳。如果您的浏览器位于远程(暂时不是您的情况)。需要来使用selenium服务器。

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

直接连接到浏览器驱动程序 量角器可以直接在Chrome和Firefox上测试,而无需使用Selenium。要使用这一点,请在配置文件集directConnect: true中使用。 directConnect: true -您的测试脚本直接通信Chrome驱动程序或火狐驱动程序,绕过任何Selenium。如果这是真的,seleniumAddressseleniumServerJar的设置将被忽略。如果您尝试使用Chrome或Firefox以外的浏览器,则会引发错误。直接连接到浏览器驱动程序的优点是您的测试脚本可能启动和运行得更快。

因此,以教程中使用的conf.js为例,您将添加一行定义这个额外的配置,即

代码语言:javascript
复制
// 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

还有什么?一些人也报告说,在使用chrome时,将chromedriver更新到特定版本已经解决了一些问题,例如:https://github.com/angular/protractor/issues/3640

https://github.com/angular/webdriver-manager/issues/102

因此,有一个建议是尝试在相同的运行条件下使用Chrome,看看你得到了什么。它可能不会有问题。

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

我再次强调,我既不是这些语言或框架中的开发人员,所以我对系统的视图不是最好的,也不是最明智的。我还假设运行点的设置是正确的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41461990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档