关于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的工作原理知识整理的主要内容,如果未能解决你的问题,请参考以下文章

selenium的webDriver工作原理

曲鸟全栈UI自动化教学:Selenium工作原理及Webdriver对浏览器的配置和操作

深入了解webdriver工作原理

selenium2工作原理

WebDriver工作原理

selenium-webdriver(python) (十四) -- webdriver原理(转载虫师自动化)