欢迎来到天天文库
浏览记录
ID:37401505
大小:87.00 KB
页数:40页
时间:2019-05-23
《webdriver编程入门》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、准备篇——webdriver的工作原理通过研究selenium-webdriver的源码,发现其实webdriver的实现原理并不高深莫测无法揣度。在这里以webdriverrubybinding的firefox-webdriver实现为例,简单介绍一下webdriver的工作原理。当测试脚本启动firefox的时候,selenium-webdriver会首先在新线程中启动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启
2、动firefox;firefox一般是以-no-remote的方法启动,启动后selenium-webdriver会将firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的remoteserver存在;客户端(也就是测试脚本)创建1个session,在该session中通过http请求向remoteserver发送restful的请求,remoteserver解析请求,完成相应操作并返回response;客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;这就
3、是webdriver的工作流程,看起来很复杂实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。webdriver是按照server–client的经典设计模式设计的。server端就是remoteserver,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remoteserver,它的职责就是等待client发送请求并做出相应;client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被测试浏览器,也就是
4、remoteserver;remoteserver接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;举个实际的例子,下面代码的作用是”命令”firefox转跳到google主页:driver=Selenium::WebDriver.for:firefoxdriver.navigate.to"http://google.com"在执行driver.navigate.to“http://google.com”这句代码时,client,也就是我们的测试代码向remoteserver发送了如下的请
5、求:POSTsession/285b12e4-2b8a-4fe6-90e1-c35cba245956/urlpost_data{"url":"http://google.com"}通过post的方式请求localhost:port/hub/session/session_id/url地址,请求浏览器完成跳转url的操作。如果上述请求是可接受的,或者说remoteserver是实现了这个接口,那么remoteserver会跳转到该postdata包含的url,并返回如下的response{"name":"get","
6、sessionId":"285b12e4-2b8a-4fe6-90e1-c35cba245956","status":0,"value":""}该response中包含如下信息name:remoteserver端的实现的方法的名称,这里是get,表示跳转到指定url;sessionId:当前session的id;status:请求执行的状态码,非0表示未正确执行,这里是0,表示一切ok不许担心;value:请求的返回值,这里返回值为空,如果client调用title接口,则该值应该是当前页面的title;如果cli
7、ent发送的请求是定位某个特定的页面元素,则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-bd
8、f6-7aad3c919739},表示定位到元素的id,通过该id,client可以发送如click之类的请求与server端进行交互。那么remoteserver端的这些功能是如何实现的呢?答案是浏览器实现了webdriver的统一接口,这样client就可以通过统一的restful的接口去进行浏览器的自动化操作。目前webdriver支持ie,chrom
此文档下载收益归作者所有