selenium driverserver 为什么会有geckodriver.exe错误

现在网络上大多数关于selenium的资料还停留在selenium2,实际上selenium3已经出了正式版,如果你想要对运行在新版浏览器上的程序进行自动化测试,那么升级到selenium3无疑是正确的选择。对比selenium2和selenium3,最明显的区别,也是很多人在升级selenium之前最先遇到的问题,就是Firefox driver的问题,在这篇文章中我将尽我所能解释一下与此相关的问题,期待各位看官的批评指正。

在我看来,用户与浏览器的交互可以有很多种形式,作为测试,我们可以暂且不去关注这些操作中涉及到的技术细节,而是将这些交互过程简单的归结为发送请求与验证响应的产物。那么以这种用户与浏览器的交互为测试重点的基于Web的自动化测试的技术重点也就集中到了如何向服务器发送正确的请求如何正确解析校验服务器返回的响应这两点上。(我一直纠结于基于Web的自动化测试、接口自动化测试和UI自动化测试这三个概念的区别。)依我的拙见来看,接口和UI自动化测试是基于Web的自动化测试的两个方面。不同之处在于接口自动化测试更直接处理REQUEST和RESPONSE本身;而UI自动化测试是将请求与响应隐藏在UI之下,向用户实际操作靠拢,即通过操纵页面元素发送请求,通过校验页面展示内容来校验响应。UI自动化测试适用于浏览器页面对用户有直观影响的情况,而接口自动化测试则适用于对后台服务端代码的测试。也可以说接口自动化测试独立于浏览器,而UI自动化测试与浏览器密不可分。如果说接口自动化测试属于集成测试阶段,那么UI自动化测试则是系统测试的一环。

基于我在上一部分的总结,selenium要想实现UI自动化测试,它就不得不解决模拟操纵页面元素和校验返回页面展示内容的问题,而这两个问题的共通之处就在于定位页面元素和操作页面元素两点,selenium提供了大量的API接口实现这些功能。作为基础,在本文我想要关注的点就在于selenium如何控制打开浏览器,并访问一个网址。

单纯从名字来看,driver嘛,就是一个驱动,是测试进行的动力来源。各位在selenium入门教程里看到的第一段代码应该就是下面这两行代码。

 
作为selenium领域里和hello world比肩的入门级代码,你也许期待着这两行代码就可以启动浏览器,打开谷歌页面。但依我的个人经验来看,十有八九会在这里栽第一个跟头。
比如:

在谷歌上搜索相关问题的话,升级selenium或是降级Firefox会是最有效也是最费时的解决方案。

所以在测试之处,确定好要测试的浏览器版本后,一定要慎重选择与之匹配的selenium版本,一般来说最新的非beta版selenium和浏览器应该是比较好的选择。我在写这篇文章的时候选择的是两个组合“FF32和");
照例,我们来看一下源码,与之前分析的");

而程序内部修改设置的代码为
 
当然这种做法并不值得推荐,毕竟geckodriver是大势所趋,目前的xpi方法应该只是过渡时期的产物,我们当然要审时度势嘛。
  

  
 

使用selenium与webdriver打交道,大家都知道,是启动webdriver去调用浏览器,来完成操作。今天就主要介绍的详细点,driver与浏览器的亲密交互,主要使用chrome与chromedriver来操作。

我是放在同一目录下的,如果不同目录则要指明路径。

我特意用了3.5.3的jar包,报错了,提示我用52.0的,于是下载了2.52.0的jar成功启动。

(2)创建session,点击Create Session按钮,然后选择chrome创建,这时会启动一个浏览器窗口,并且生成一串session值,

(3)点击Load Script按钮,弹出对话框输入url地址,这时观察新的窗口会打开输入的url地址。

从这里就可以看出两点:

(1)打开浏览器的操作,会得到一个sessionid,并且打开一个新窗口;

(2)然后基于这个sessionid来判断在那个窗口输入url。

(2)找到webdriver的接口地址,下面就演示几个接口,由于很多都没有例子,都要自己摸索。

(3)先看打开url的接口,如下图:

接下来就以postman这个工具来实现接口请求,下面也都会用这个工具,因为方便;当然像LoadRunner、Jmeter、SoapUI等接口工具都可以啊,只要是发送接口请求的。我怕你们误会只有postman是google的才可以。

其实这个接口就跟第三步第三点操作点击Load Script输入url打开是一样的,我们抓包看看地址就知道了,如下图:

(4)再来个放大浏览器的操作,如下图

(5)然后就开始查找元素啦,找到元素得到元素的id值

当然我用xpath也只是因为我平时用xpath比较多,这里用id、name、css都是可以的,就是我们定位的方法名。

浏览器中结果发现,数组中多个也是会输入在一起,这里有点不明白的是为什么要用数组来存值,API中也没说的太清楚。

以java代码为例说明一下:

上面三个步骤,根据上面的原理来解释一下。

(2)第二步:driver这个对象就等同于sessionid,当执行第二步这行代码,实际是去请求webdriver的get接口,然后webdriver收到请求后,去调浏览器API输入url访问,因为有了sessionid,所以webdriver、浏览器知道是在那个窗口打开url。

所以很明显了,实际是我们去请求webdriver,然后webdriver去调用浏览器,其他API我就不一一去试了,大家有空也可以自己玩玩,还是挺有意思的。

如果以上内容对你有用,麻烦把你微信会支付宝小数点右边的数值,贡献那么一点点意思意思是对我最大的支持。谢谢!

我要回帖

更多关于 selenium driver 的文章

 

随机推荐