这些天都在应付期末自动化测试的考试,题目:用maven项目测试一个飞机订票系统。
我最终成功的软硬件配置是:myeclipse8.5+jdk1.7+firefix24.0+strawberry+webTours
具体操作步骤: (所有安装文件都是以32位为主,即使我的笔记本是64位。之前就安装过一次jdk1.7的64位,结果依旧报51version错误)
安装myeclipse8.5 、安装jdk1.7并配置环境变量、安装firefox24,最好默认安装路径、安装starwberry 、将webtours文件夹解压至strawberry安装路径:
运行webtours文件夹中的starserver.bat文件,再双击运行mercuryWebTours,
注意进入到浏览器后将网址中的mercuryWebTours改为WebTours,像这样:
测试能否进入购票系统的登录页面测试成功后
myeclipse导入selenium2-gettingStarted项目
我个人对maven项目的理解:通过pom.xml配置,加载需要的jar包,再通过调用testng.xml文件运行测试案例代码,得到的结果报告自动导入到target中的report文件夹中。
最重要的是pom.xml文件中的内容:
环境配置很重要,理解pom.xml中的信息很重要(强烈建议不要自己外部引用jar使用,最好通过pom.xml自动注入)。
导入需要的jar包,maven代码网址:http://mvnrepository.com/。
将maven方框中的代码复制到pom.xml中,运行后会自动导入jar包到maven Dependencies库中。
我遇到的最大的几个问题有:
1、即使换成了jdk1.7版本,环境配置也改了,结果还是报错。度娘给的答案7788,都试了一遍,还是错的,最后抱着试一下的心态,自己尝试修改了一下修改myeclipse自带的maven运行环境,错误解决。报51version错,就是版本不协调,调各种运行环境的jdk版本应该是可以的。说不定瞎猫就撞见死耗子呢,哈哈。
2、我写了三个测试用例,结果只运行了2个,另外一个直接就跳过了,我就想啊,再怎么环境配置错误也应该是三个利用全部出错吧,没理由直接不运行啊,后来发现是@test注释的包导错了。将:import org.junit.Test;换成import org.testng.annotations.Test;就可以了。终于3个测试案例都报错了,哈哈,还挺开心的,至少都运行了。
3、对于出现的NoClassDefFoundError错误真的是找了好久好久好久好久。我发现它并不是某一个类未定义或是找不到,我点开所有我外部引用的jar包,发现都没有.class文件,所以此刻怀疑是引入的路径不对,可能是含有中文的缘故,遂将放jar包的文件夹改成changyongbao,还是报错,没有解决。
那怎么办呢?百度呗,csdn里有一位大神出过这个问题,说是反编译的错误,说没有反编译文件肯定没办法将.class文件显示出来,肯定就找不到source咯,我一想,对啊,挺有道理的,于是又各种找教程下文件,终于.class文件能显示出来了。但是。。。。。。怎么还是NoClassDefFoundError错误呢?
然后我就找到了有一位大神的博客,附上此链接:https://blog.csdn.net/zeng622peng/article/details/78228080,这里面含有所有可能出现NoClassDefFoundError错误的可能,并有解决方法。我那个小心脏啊,抖三抖,激动啊,这就是希望的曙光啊。于是满怀希望的仔仔细细的将整片文章看完,三脸懵逼啊,完全看不懂,怎么呢,硬着头皮去研究呗,后来的后来,似懂非懂的觉得可能是自己classPath文件的问题,在案例能运行的地方输出项目运行环境,结果,能输出啊~就是找不到错,不过就算是这样,也不能阻止我对这位大神的膜拜。没事就来研究他的这篇博客,哈哈。
再后来,吃完午饭回来,脑袋抽风般,把通过外部引入的包删掉,进去http://mvnrepository.com/网站,搜索我需要的包,换成它提供的代码,复制到pom.xml文件中。结果,哈哈,一个原先引用外部包的java程序再此之后能够运行了,感觉胜利就在眼前啊。
4、虽然又报错了,但至少有成效了不是?程序显示无法下载selenium-server-standalone-2.46.0.jar,首先找pom文件确定代码没有错,然后进入网址:http://repo1.maven.org/maven2/org/seleniumhq/selenium/selenium-server-standalone/2.46.0/selenium-server-standalone-2.46.0.jar,发现确实没有这个网页,搜索http://repo1.maven.org/maven2/org/seleniumhq,一步步的查找确定没有jar文件的下载。
于是在http://repo.spring.io/plugins-release/org/seleniumhq/selenium/selenium-server-standalone/2.46.0/手动下载selenium-server-standalone-2.46.0.jar和selenium-server-standalone-2.46.0.pom,并将其放入到C:\Users\Lenovo\.m2\repository\org\seleniumhq\selenium\selenium-server-standalone\2.46.0中,此错误解决。
5、又报新错NoSuchMethodError,没事,我已经习惯了,抱住胖胖的自己不哭。再次问可敬的度妈妈找到这位大神的文章:https://www.cnblogs.com/xiaoMzjm/p/4566672.html,大致是说jar包冲突了,两个不同的jar里有相同的class文件,但是运行时搜索的第一个jar中的class文件里没有那个方法,所以报错。于是我按照大神的方法,找到了那两个jar,分别是selenium-server-standalone-2.46.0.jar和selenium-api-2.3.0.jar,并打开它们相同命名的class文件,分别搜索找不到的方法,发现selenium-server-standalone-2.46.0.jar中有这个方法,selenium-api-2.3.0.jar中没有,答案很明显,就是要把selenium-api-2.3.0.jar排除,按大神的指教,将selenium-api-2.3.0.jar排除后运行,报程序解析变异的错,妈呀,这个jar包可不能排除,于是又给装了回去。
现在的问题就是:我需要运行的是selenium-server-standalone-2.46.0.jar中的.class文件,系统默认的是先运行selenium-api-2.3.0.jar中的,而selenium-api-2.3.0.jar有不能exclusion,那怎么办?
也是过了大半时间没有解决,现在想起来,总觉得当时的自己傻到了一种境界。当需要加载一个新的Jar包时,Maven会从配置文件中读取仓库位置,并按照优先级逐一从仓库中判断是否有指定的依赖文件,如果有,则加载,如果没有,则继续搜索。它的读取也一样,只要先读取selenium-server-standalone-2.46.0.jar中的内容,问题不就解决了嘛,于是在pom.xml文件中将selenium-server-standalone挪到了operadriver(selenium-api-2.3.0.jar通过它加载)的前面。
问题解决,测试用例成功跑出。
最后一刻,提交作业。感想颇多,一路走来不容易啊。
来自一个小渣渣的总结,有不对不妥的地方请大家提出来,我们共勉哈。大神,请收下我的膝盖,猥琐。