【自动化测试】selenium工作原理

用selenium来做自动化测试,需要用到三个东西

测试脚本:可以是Java,python等语言编写的脚本,也可叫client端

浏览器驱动:驱动根据不同浏览器开发,驱动要和浏览器版本相对应

浏览器:如chrome,edge,firefox等,selenium均支持

selenium和webdriver的工作过程原理可以理解为下图。

 以python为例子,安装selenium包后,执行以下代码,便会自动打开一个chrome浏览器并打开京东首页(前提是已经配置好了对应浏览器版本的webdriver驱动)

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.jd.com")

接下来通过这段代码查看selenium源码,来分析selenium在这个过程中做了什么,是如何实现的。

源码查看分析:

注:我本机的selenium版本是4.3.0,不同版本源码行数和路径可能会不一样

1.按住ctrl点击Chrome查看源码,进入父类ChroiumDriver查看

在父类的init初始化方法里我们看到了service.start()方法,这个方法是启动服务的

 继续往里看start方法做了什么,start方法实际上是去执行一个cmd命令,然后启动了一个webdriver的服务,效果就和我们在cmd中执行start chromewebdriver类似。

cmd下执行start chromewebdriver(前提是配置好了对应chrome版本的chromewebdriver)

 2.启动服务后做什么呢?打开浏览器,建立绑定关系。 ctrl点击ChroiumDriver的父类RemoteWebDriver进入查看,可以发现WebDriver上的注释,有几个重要的属性session_id,capabilities和command_executor,以及webdriver和浏览器的通信协议,用的是jsonwire,再往下看这里就明白了,在init方法里会去调用start_session()方法,start_session()方法就是执行一个post请求启动一个浏览器并返回一个sessionid,建立起绑定关系,后续的浏览器操作都会带上该session_id,来实现就是在这个浏览器上操作。

3.浏览器打开后,相关操作如打开网页,点击等是如何实现的?继续往下看源码 ChromiumRemoteConnection类,该类定义了一些使用的浏览器(chrome)特有的接口地址,再看一下父类RemoteConnection里面源码,这个类里面定义了所有的selenium操作需要的接口地址(这些接口地址全部封装在浏览器驱动程序中),所有的浏览器操作就是通过访问这些接口来实现的。比如driver.get(url)就是通过Command.GET: (‘POST’, ‘/session/$sessionId/url’) 这个地址实现访问的。

 4.操作对应的接口地址是如何执行达到在浏览器上实现各种操作呢?继续看接口地址定义下面的源码,可以看到主要是通过execute方法调用_request方法通过urilib3标准库向服务器发送对应操作请求地址,进而实现了浏览器各种操作 。到这一步明白了后续就可以实现用postman,jmeter,requests库等实现ui自动化的功能。

 总结:selenium的工作流程原理就是

  1. selenium client(python等语言编写的自动化测试脚本)初始化一个service服务,通过Webdriver启动浏览器驱动程序chromedriver.exe
  2. 通过RemoteWebDriver向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id
  3. 打开浏览器,绑定特定的端口,把启动后的浏览器作为webdriver的remote server
  4. 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过RemoteConnection链接到remote server,然后使用execute方法调用_request方法向remote server发送请求
  5. 浏览器接收到请求后,执行对应动作
  6. 浏览器再把执行的动作结果通过浏览器驱动程序返回给测试脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值