51Testing软件测试论坛

标题: 【转帖】WebDriver拾级而上(00) – WebDriver理论 [打印本页]

作者: 悠悠小仙仙    时间: 2017-7-13 11:06
标题: 【转帖】WebDriver拾级而上(00) – WebDriver理论
[attach]107317[/attach]
Selenium2.0 = Selenium1.0 + WebDriver(也就是说Selenium2.0合并了这两个项目)
Selenium1.0可以使用任何编程语言,但是有个先决条件就是必须支持HTTP库。Selenium1.0起初就是一个Javascript库,到后面引入了SeleniumRC。SeleniumRC作为一个代理服务器并且发送操作命令给Selenium Core(javascript代码,且为SeleniumRC的一部分)。
SeleniumRC从测试程序接收指令并翻译,返回测试结果给测试程序。Selenium Core在client API打开浏览器后就注入到浏览器中,然后Selenium Core接收测试程序的指令,解释成selenese命令,在浏览器执行。
selenium-webdriver实现原理(这里以webdriver java binding的firefox-webdriver实现为例),简单介绍一下webdriver的工作原理。
这就是webdriver的工作流程,看起来很复杂,实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。
webdriver是按照server–client的经典设计模式设计的。
server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应的操作;
client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;
举个实际的例子,下面代码的作用是”命令”firefox转跳到google主页:
CODE:
WebDriver diver = new FirefoxDriver();
driver.get("http://google.com");
在执行 driver.get(“http://google.com”); 这句代码时,client也就是我们的测试代码向remote server发送了如下的请求:
CODE:
  1. POST session/285b12e4-2b8a-4fe6-90e1-c35cba245956/url
  2. post_data {"url":"http://google.com"}
复制代码
通过post的方式请求localhost:port/hub/session/session_id/url地址,请求浏览器完成跳转url的操作。
如果上述请求是可接受的,或者说remote server是实现了这个接口,那么remote server会跳转到该post data包含的url,并返回如下的response
CODE:
  1. {"name":"get","sessionId":"285b12e4-2b8a-4fe6-90e1-c35cba245956","status":0,"value":""}
复制代码
该response中包含如下信息
如果client发送的请求是定位某个特定的页面元素,则response的返回值可能是这样的:
CODE:
  1. {"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约定的各种接口。


作者: 八戒你干嘛    时间: 2017-7-13 17:00
厉害了,我的楼
作者: pengpen    时间: 2017-7-24 10:50
唉,原理看不太懂




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2