三. ChromeDrvier cannot be resolved to a type

今天又遇到一个比较奇怪的问题,如下图所示,ChromeDrvier cannot be resolved to a type

那么对于这个问题,首先想到的是JDK版本的不匹配,java项目指定的版本是15,但是ecplise使用的版本是11. 并且我们可以看到里面的java文件都是lib文件夹下面的jrt-fs.jar里面设置的方法

解决方案就是,在Java项目的Build Path->Libraries, 做一下设置

然后选择Java的所在的Library,带你就edit

 首先体下执行环境变量里面的JDK版本

 这个时候我们可以看到,Ecplise如果使用Java SE 15就和项目的Java版本是最匹配的

 但是我们Ecplise现在使用的是JAVA SE 11,明显就不匹配了

 我们这个时候,点击上一层的界面[Installed JREs], 接着再点击Add

 我们暂时先默认选择,其他两个选项还有待研究

然后要注意选择的路径,到bin目录所在的那一层就可以了

然后给java 11版本勾选上,表示项目应用这个java 11的版本

最后我们回到设置[Execution Environment]这一层,再如下所示勾选。最后我们应用这些设置,

 但是设置完上面的配置后,还是存在错误。不能解决这个问题。后来我又到JRE System Libraries,右键,然后点击Properties

 

 重新设置这个版本(我记得我当时是先在项目右键->Build Paht->Libraries->Configure Path->Edit->点击了Workspace default JRE,然后再回到外面的JRE System Libraries,右键,然后点击Properties, 最后点击选择回Execution environment)

 看样子这个问题应该就是Execution Environment也要设置回对应的版本才会正常。(Tip,我们这个项目还有一个Default Demo. class的Java文件,这个其实是项目新建好之后自动加进来的,而其它标红报错,此时直接删除掉这个java文件和它对应的package就可以了,因为它不是我们想要的文件)

但是最后让我很惊讶的是,运行java application的时候,居然报错了,报了一个"无法初始化主类"的错误

 于是我又想到了可能是Libraries的properties的执行环境选择的版本不对,我再选一个1.1版本的看一下怎么样

 

最后运行结果是我们可以运行主类了,看下图hello world已经可以打印出来,这说明主类成功运行,但是后面也有错误。现在就来分析一下这个什么样的错误。

 

根据错误提示"Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/chrome/ChromeDriver",应该是没有找到ChromeDriver相关的类,一般由两个方面去考虑

第一,就是ChromeDriver版本和Chrome浏览器版本不一致不匹配造成的。

第二,就是selenium的java没有加载到项目中,或者已经加载但是可能层级不对等原因,没有应用到项目。(这个原因归根到底就是selenium jar包出了问题)

我们先看第一个原因,双击ChromeDriver,就可以看到它支持的版本,然后再查看Chrome浏览器的版本,对比一下就可以了。不过这里我发现两者版本是一致的。所以排除第一个原因。

再看第二个原因,selenium jar包的问题,一开始我是把selenium里面,client-combined这个jar包放在了一个单独的libraries里面,然后selenium里面的lib文件夹里面的jar包又单独放在了另外一个文件夹中。所以这里就有可能是层级等方面出了问题,导致这些selenium的jar包没有应用到项目中

 

解决方案就是,把selenium的jar包放到不要放到这些单独文件夹里面(其实放在单独文件夹理论上也是可行,但是这里不知道出了啥问题,就不行了,后面再研究看看)

选择项目右键,Build Paht-> Configure Build Path-> Libraries-> 选择JRE System Library这个library-> Add External JARs

接着把selenium包里面的client-conbined-3.9.1.jar以及libs文件夹里面的jar包都加载进来

 加载后是这样子的,jar和这些libraries是同级的,应用一下

 

最后运行成功,这样就感到很诧异了,也说明了这个selenium jar的层级关系那边可能真的都点梗。目前不知道问题是什么?还有待研究其中的关系

 

原文地址:https://www.cnblogs.com/chenwjia/p/15544019.html