• 0
  • 0
分享
  • Selenium WebDriver的工作原理——软件测试圈
  • 饭团🍙 2021-06-30 15:54:02 字数 2027 阅读 1169 收藏 0

先通过一个简单的类比说个好理解的,这个比喻是我从美版知乎Quora上看到的,觉得比较形象、好理解拿来用用。可以把WebDriver驱动浏览器类比成出租车司机开出租车。

类比

在开出租车时有三个角色:

乘客:他/她告诉出租车司机去哪里,大概怎么走
出租车司机:他按照乘客的要求来操控出租车
出租车:出租车按照司机的操控完成真正的行驶,把乘客送到目的地

微信图片_20210630154910.png

在WebDriver中也有类似的三个角色:

自动化测试代码:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动)
浏览器驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器
浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。

所以在这个类比中:

  1. 工程师写的自动化测试代码就相当于是乘客

  2. 浏览器的驱动就相当于是出租车司机

  3. 浏览器就相当于是出租车

WebDriver的工作原理

  1. 从技术上讲,也同样是上面的三个角色:

     WebDriver API(基于Java、Python、C#等语言)

  2. 对于java语言来说,就是下载下来的selenium的Jar包,比如selenium-java-3.8.1.zip包,代表Selenium3.8.1的版本

    浏览器的驱动(browser driver)

    每个浏览器都有自己的驱动,均以exe文件形式存在。比如谷歌的chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe

  3. 浏览器:就是我们很熟悉的常用的各种浏览器。

三者是如何通讯的?

WebDriver脚本运行的时候,它们之间是如何通信的呢?为什么同一个browser driver即可以处理java语言的脚本,也可以处理python语言的脚本呢?让我们来看一下,一条Selenium脚本执行时后端都发生了哪些事情:

  1. 对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动;

  2. 浏览器驱动中包含了一个HTTP Server,用来接收这些http请求;

  3. HTTP Server接收到请求后根据请求来具体操控对应的浏览器;

  4. 浏览器执行具体的测试步骤;

  5. 浏览器将步骤执行结果返回给HTTP Server;

  6. HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。

为什么使用HTTP协议呢?

因为HTTP协议是一个浏览器和Web服务器之间通信的标准协议,而几乎每一种编程语言都提供了丰富的http libraries,这样就可以方便的处理客户端Client和服务器Server之间的请求request及响应response,WebDriver的结构中就是典型的C/S结构,WebDriver API相当于是客户端,而小小的浏览器驱动才是服务器端。

那为什么同一个浏览器驱动即可以处理Java语言的脚本,也可以处理Python语言的脚本呢?这就要提到WebDriver基于的协议:JSON Wire protocol。JSON Wire protocol是在http协议基础上,对http请求及响应的body部分的数据的进一步规范。

我们知道在HTTP请求及响应中常常包括以下几个部分:http请求方法、http请求及响应内容body、http响应状态码等。

常见的http请求方法:

GET:用来从服务器获取信息。比如获取网页的标题信息

POST:向服务器发送操作请求。比如findElement,Click等

http响应状态码:

在WebDriver中为了给用户以更明确的反馈信息,提供了更细化的http响应状态码,比如:

7: NoSuchElement

11:ElementNotVisible

200:Everything OK

现在到了最关键的http请求及响应的body部分了:

body部分主要传送具体的数据,在WebDriver中这些数据都是以JSON的形式存在并进行传送的,这就是JSON Wire protocol。

JSON是一种数据交换的格式,是对XML的升级与替代,下面是一个JSON文件的例子:

  {
 
    "firstname": "Alex",
    "lastname": "Smith",
    "moble": "13300000000"
  }

下面的例子是WebDriver中在成功找到一个元素后JSON Wire Protocol的返回:

{"status" : 0, "value" : {"element" : "123422"}}

所以在Client和Server之间,只要是基于JSON Wire Protocol来传递数据,就与具体的脚本语言无关了,这样同一个浏览器的驱动就即可以处理Java语言的脚本,也可以处理Python语言的脚本了。

 

作者:小小小小人ksh

原文链接:https://blog.csdn.net/yoyocat915/article/details/80246744

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 测试用例测试用例的特性1、有效性:测试用例的能够被使用,且被不同人员使用测试结果一致2、可重复性:良好的测试用例具有重复使用的功能。(回归测试)3、易组织性:好的测试用例会分门别类地提供给测试人员参考和使用(功能、性能、易用分类编号)4、清晰、简洁:好的测试用例描述清晰,每一步都应有相应的作用,有很强的的针对性,不应出现一些无用的操作步骤。5、可维护性:由于软件开发过程中需求变更等原因的影响,常常对测试用例进行修改、增加、删除等,以便测试用符合相应测试要求。1:测试用例包含什么类容用例编号,所属模块,用例描述,前置条件,优先级,输入数据,操作步骤,预期结果,实际结果,测试人员,测试时间2:测试...
            0 0 3512
            分享
          • 作为测试人员,项目涉及新功能,有的时候需要做横向的竞品分析,可能有人会说,竞品分析是产品要做的事情吧,测试人员为什么需要做呢?这好像不是自己的分内之事。其实不然,测试做竞品分析和产品的角度是不一样的,测试更应该从技术角度完成竞品分析。那么竞品分析应该从哪些方面着手呢?1、功能比较在本次要做的功能的功能点中,哪些点是竞品已有的,在大家都有这种功能的情况下,又做到了哪种深度,举个简单的例子,陌生来电拦截,虽然是现在大部分手机都有的功能,但是有的拦截是上层做的,有些是底层拦截的,最大的区别就是,上层拦截的陌生电话,还会产生一个拦截通知,如果是底层拦截的,手机上是看不出任何蛛丝马迹的。2、ui及动效比...
            1 1 10867
            分享
          •   苹果公司CEO蒂姆?库克在接受《早安美国》节目的采访时表示,他使用了ChatGPT这款聊天机器人,并对其感到兴奋。他还透露,苹果正在密切关注这项技术,并有一些独特的应用场景。  ChatGPT是由OpenAI开发的一款基于生成式人工智能(generativeAI)的聊天机器人,可以与人类进行自然的对话。据报道,今年早些时候,苹果公司出于隐私方面的考虑,限制了员工使用ChatGPT。  当被问及是否使用OpenAI的聊天机器人时,库克称:“哦,我当然使用它。是的,我对它很兴奋。我认为它有一些独特的应用,你可以相信这是我们正在密切关注的东西。”  库克对人工智能和生成式人工智能持谨慎态度,而其...
            0 0 748
            分享
          • 写作背景:在上一篇文档中介绍了如何配置手机抓包的全过程,其中有网友留言问配置完成后是否可以进行抓包,答案当然是肯定的;此外,查阅了网上相关资料,大部分是介绍如何配置的过程,很少介绍具体操作的步骤,所以总结了下面这篇文档。下面从burpsuite常用功能点和具体抓包过程进行介绍一.常用的功能简单介绍几个功能选项,帮助大家在测试过程中简单清晰的完成目标,节约时间1.删除多余记录若抓包过程中记录中没有自己需要的包,或者需要重新进行抓包操作的时候,我们需要将多余的记录进行清空,执行操作步骤如下:图1 删除记录A.Proxy(HTTP history)tab下选中要删除记录(这里我执行全选操作CTRL+...
            0 0 2902
            分享
          • 1、现在在做功能测试,一般都是把软件界面和该软件的逻辑测试一下,工作大半年了想往性能测试方向转,感觉很多东西要学习,但是不知道从哪下手,请大神指点。有这种想转的思想很好。相信有很多和你同样情况的同学,同时,半年的经验一下子转过来是不可能的。首先,我建议在工作过程中在积累一年左右。主要是在做功能测试的同时,你可以自己搭建测试环境,加深对整个系统的理解,这个过程就在提高自己的学习能力和打下知识基础。被测项目用了哪些技能可以自己多多加深学习和理解。也就是在项目中自己更多的学习,利用工作中的测试项目充分学习。其次,学习一款性能测试工具。我本人不建议上来就学那些操作系统、数据库等知识。毕竟先从工具入手是...
            1 0 1893
            分享
      • 51testing软件测试圈微信