关于selenium中webdriver的工作原理知识整理
Posted 寻虫空间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于selenium中webdriver的工作原理知识整理相关的知识,希望对你有一定的参考价值。
记得在不久前的一次工作技能培训中,有位同事问了我一句,关于selenium的底层工作原理是怎么样的,我们持续关注的webdriver到底是如何识别我们的代码并进行对应的动作的,起初不以为然,底层的东西知道个大概就行,毕竟精力有限,但后面仔细回想了下,就像以前大学做的嵌入式设计一样,如果不知道底层的相关东西,是没办法很好理解和使用的。
OK,既然如此,那就好好整理一下吧。
先举个例子,假如我们出门坐出租车,我们首先要做的就是拦一辆出租车,并跟司机传达我们所要去的目的地,然后司机启动车辆,带我们到达目的地。
其实类比过来,webdriver里面的角色也跟上述差不多:
1.工程师所写的测试代码,无论是python、JAVA、还是C#等都会先发送请求给我们的浏览器驱动,如火狐、谷歌、IE这些。
2.浏览器收到了驱动发过来的指令,就开始根据指令进行工作。
没错,你看,我们的代码就是对应的指令传达,浏览器驱动就是我们的司机,整个浏览器就是我们所有人的载体,出租车。
通过上述形象的对比,我们可以得到一个流程,给指令,驱动工作,浏览器工作。
从技术层面上来说,上述三者就是我们所谓的WebDriver API、browser driver、以及我们的borwser如谷歌、火狐、IE这些。
接下来我们看一下这个通讯过程是怎么实现的,首先,先抛出一个问题,为什么selenium可以支持多种语言,像python、java、c#等。其实对于我们的每条selenium脚本而言,都如同创建一个http请求,并发给对应的浏览器驱动,浏览器驱动中包含了一个http server,用来接收并转换成对应的操作对浏览器进行操控,然后浏览器将对应的结果返回给浏览器驱动。
所以说,归根究底,都是各种脚本通过我们的HTTP协议对浏览器发送请求,接收结果的一个过程,中间由我们对应的浏览器驱动进行转化,所以说,无论用什么语言,本质上是一样的。
既然说到请求,那就免不了说一下我们的客户端和服务端,我们的浏览器驱动相当于一个客户端,浏览器相当于服务端。
再往深一步继续,WebDriver基于的协议:JSON Wire protocol。
我们知道,HTTP请求有很常见的GET、POST等,举个例子,我通过POST请求给对应的接口发送一串JSON数据,如:
{
"name": "chongwei",
"age": "29",
"moble": "unknow"
}
然后浏览器接收到了数据,进行结果返回:
{"status" : 0, "value": {"element" : "66666"}}
当然,这个过程就是通过JSON Wire protocol协议进行通讯的,也就是说,这个就是我们的传声筒,通过它,我们要到达的目的地才能让司机知会,然后进行开车出发。
以上,差不多就是webdriver的白话版工作原理了。
好久没整理自己的知识体系了,正如一切期盼的那样,也该开始整装待发,好好继续努力下去~
以上是关于关于selenium中webdriver的工作原理知识整理的主要内容,如果未能解决你的问题,请参考以下文章