selenium内部原理解析



早期的selenium

selenium RC,主要使用JavaScript注入技术。自动化测试的过程就是:Selenium RC启动一个Selenium Server,将操作web元素的API调用转化为一段段Javascript,在Selenium内核启动浏览器之后注入这段Javascript。。开发过Web应用的人都知道,Javascript可以获取并调用页面的任何元素,自如的进行操作。由此才实现了Selenium的目的:自动化Web操作。

缺点:

这种Javascript注入技术的缺点是速度不理想,而且稳定性大大依赖于Selenium内核对API翻译成的Javascript质量高低。

seleniumRC的原理
  1. Selenium RC Server 启动一个浏览器(或是已经使用中),并注入js代码;
  2. 将测试脚本代码传到客户端的 Selenium-Core 中;
  3. Selenium-Core 翻译并解析执行用户录制的操作;
  4. 让代理 Server 进行通讯;
  5. Remote Control Server 负责跟远程 Web 应用服务器进行通讯。
    在这里插入图片描述


在这里插入图片描述


现在的selenium

selenium3.0以后移除了seleniumRC,取而代之的是webdriver。利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类)。由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身。各大浏览器厂商分别推出自己的WebDriver,如谷歌的ChromeDriver、火狐的FirefoxDriver等。

原理

webdriver是按照server – client的经典设计模式设计的。

webdriver的作用就是创建一个新的浏览器实例,也就是启动一个Server端。

(Starts the service and then creates new instance of chrome driver)

server端就是我们的Remote server,也就是我们通过各个不同浏览器所启动的浏览器实例,在我们脚本启动浏览器后,这个浏览器就可以称之为我们的Remote server,它的职责就是等待client发送请求并做出相应处理。

client 就是我们的测试代码,我们测试代码中的所有操作,比如打开浏览器,寻找元素,点击都是以http请求的方式发送给被测试浏览器(即Remote server),remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息(这里调用的接口是浏览器的源生API,而每一个浏览器都有自己的一套接口信息,这也就是为什么我们要安装不同的驱动的原因)

WebDriver工作流程

1、通过WebDriver创建一个浏览器服务,remote server。

2、脚本启动时会在新的线程中启动一个浏览器,并绑定特定的端口,没个浏览器有不同的端口段。

3、client 创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response。

4、分析response,继续执行脚本还是结束执行
在这里插入图片描述

参考文章:
https://www.seleniumhq.org/docs/05_selenium_rc.jsp 中Selenium RC Architecture部分
http://www.cnblogs.com/hyddd/archive/2009/05/30/1492213.html
https://www.cnblogs.com/fnng/archive/2012/02/01/2335215.html
http://www.imdsx.cn/index.php/2017/07/27/selenium/
https://blog.csdn.net/zhuliqi052466/article/details/74942813
https://segmentfault.com/a/1190000018037362
https://segmentfault.com/a/1190000016685217

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值