[转]揭秘webdriver实现原理

转自:http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html

通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高深莫测无法揣度。在这里以webdriver ruby bindingfirefox-webdriver实现为例,简单介绍一下webdriver的工作原理。

  • 当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动firefox;
  • firefox一般是以-no-remote的方法启动,启动后selenium-webdriver会将firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的remote server存在;
  • 客户端(也就是测试脚本)创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response;
  • 客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;

这就是webdriver的工作流程,看起来很复杂实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。

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

server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应;

client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被 测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;

举个实际的例子,下面代码的作用是”命令”firefox转跳到google主页:

driver = Selenium::WebDriver.for :firefox

driver.navigate.to "http://google.com"

在执行driver.navigate.to “http://google.com” 这句代码时,client,也就是我们的测试代码向remote server发送了如下的请求:

POST session/285b12e4-2b8a-4fe6-90e1-c35cba245956/url

post_data {"url":"http://google.com"} 

通过post的方式请求localhost:port/hub/session/session_id/url地址,请求浏览器完成跳转url的操作。

如果上述请求是可接受的,或者说remote server是实现了这个接口,那么remote server会跳转到该post data包含的url,并返回如下的response

{"name":"get","sessionId":"285b12e4-2b8a-4fe6-90e1-c35cba245956","status":0,"value":""}

该response中包含如下信息

  • name:remote server端的实现的方法的名称,这里是get,表示跳转到指定url;
  • sessionId:当前session的id;
  • status:请求执行的状态码,非0表示未正确执行,这里是0,表示一切ok不许担心;
  • value:请求的返回值,这里返回值为空,如果client调用title接口,则该值应该是当前页面的title;

如果client发送的请求是定位某个特定的页面元素,则response的返回值可能是这样的:

{"name":"findElement","sessionId":"285b12e4-2b8a-4fe6-90e1-c35cba245956","status":0,"value":{"ELEMENT":"{2192893e-f260-44c4-bdf6-7aad3c919739}"}}

name,sessionId,status跟上面的例子是差不多的,区别是该请求的返回值是ELEMENT:{2192893e- f260-44c4-bdf6-7aad3c919739},表示定位到元素的id,通过该id,client可以发送如click之类的请求与 server端进行交互。

那么remote server端的这些功能是如何实现的呢?答案是浏览器实现了webdriver的统一接口,这样client就可以通过统一的restful的接口去进 行浏览器的自动化操作。目前webdriver支持ie, chrome, firefox, opera等主流浏览器,其主要原因是这些浏览器实现了webdriver约定的各种接口。

时间: 2024-10-14 19:23:19

[转]揭秘webdriver实现原理的相关文章

揭秘webdriver实现原理

通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高深莫测无法揣度.在这里以webdriver ruby binding的firefox-webdriver实现为例,简单介绍一下webdriver的工作原理. 当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器.如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动fire

selenium及webdriver的原理

主要内容转自:http://blog.csdn.net/ant_ren/article/details/7968582和http://blog.csdn.net/ant_ren/article/details/7970793 selenium与webdriver整合后,形成的新的测试工具叫做selenium2.x.在selenium1时间,selenium使用javascript来达到测试自动化的目标. 1. selenium RC 早期的Selenium使用的是Javascript注入技术与浏

[转载]WebDriver工作原理

转载自:https://www.cnblogs.com/testermark/p/3546287.html WebDriver的工作原理: 在我们new一个WebDriver的过程中,Selenium首先会确认浏览器的native component是否存在可用而且版本匹配.接着就在目标浏览器里启动一整套Web Service(实际上就是浏览器厂商提供的driver, 比如IEDriver, ChromeDriver,它们都实现了WebDriver's wire protocol.),这套Web

Atitit WebDriver技术规范原理与概念

1. Book haosyo ma1 2. WebDriver是W3C的一个标准,由Selenium主持.1 3. WebDriver如何工作 (zhuan)1 1. Book haosyo ma 2. WebDriver是W3C的一个标准,由Selenium主持. W3C的浏览器测试和工具(Browser Testing and Tools)工作组发布了WebDriver的工作草案.该规范定义了WebDriver的应用编程接口.WebDriver是一个平台和语言中立的访问接口,允许应用程序或脚

Selenium webdriver工作原理

webdriver是以server-client 经典模式设计的 server端可以是任何浏览器作为remote server,职责就是处理client的请求并作出相应操作,response的具体内容根据请求的内容而定, client就是我们运行的脚本 以firefox为例 remote server端的这些功能是如何实现的呢? 浏览器实现了webdriver的统一接口,client就可以通过统一的restful的接口去进行浏览器的自动化操作. 目前webdriver支持ie, chrome,

【关于selenium自动化中,Webdriver的原理以及工作流程】

原文地址:https://www.cnblogs.com/imyalost/p/7242747.html#4109245 作者:老 张 1.关于Webdriver 设计模式:按照Server-Client的经典设计模式设计: Server端:即Remote Server(远程服务器),可以是任意的浏览器,当脚本启动浏览器时,该浏览器就是Remote Server,它的职责是等待Client发送请求并做出响应: Client端:我们的测试代码中的一些行为是以HTTP请求的方式发送给被测试浏览器--

揭秘LocalBroadcastManager实现原理

LocalBroadcastManager经常用的App内通信组件,也是官方推荐的App内广播发送组件 起初,用这个组件的时候,见名知意,因为LocalBroadcast,所以以为也是用Binder实现的底层,结果不是这样的. 1.平时我们都是这样用LocalBroadcastManager a.注册并接收 LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(context); IntentFilt

Selenium2原理

Selenium 经历了两个版本,Selenium 1.0 和 Selenium 2.0,本文仅介绍Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2又名Selenium Webdriver. Selenium2简介 Selenium是一个用于Web应用程序测试的工具,支持多平台.多浏览器.多语言去实现自动化测试,Selenium2将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口

Atitit 网络爬虫与数据采集器的原理与实践attilax著 v2

1. 数据采集1 1.1. http lib1 1.2. HTML Parsers,1 1.3. 第8章 web爬取199 1 2. 实现类库框架2 3. 问题与难点(html转txt)2 4. 参考资料3 1. 数据采集 主要获取pagesUrls,artUrls, picUrls 可参考火车头 1.1. http lib 1.2. HTML Parsers, 第8章 web爬取199作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴