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的工作原理。
1.当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动firefox;
2.firefox一般是以-no-remote的方法启动,启动后selenium-webdriver会将firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的remote server存在;
3.客户端(也就是测试脚本)创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response;
4.客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;
这就是webdriver的工作流程,看起来很复杂,实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。
webdriver是按照server–client的经典设计模式设计的。
server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应的操作;
client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;
举个实际的例子,下面代码的作用是”命令”firefox转跳到google主页:
WebDriver diver = new FirefoxDriver();
driver.get("http://google.com");
在执行 driver.get("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约定的各种接口。
分享到:
相关推荐
全书共分为四个部分:第1部分基础篇主要讲解自动化测试相关的基础理论、WebDriver 环境安装、单元测试工具的使用方法以及 WebDrvier的入门使用实例,第2部分实战应用篇基于丰富的实战案例讲解页面元素的定位方法以及...
这本书的源代码提供了实践案例和示例,帮助读者更好地理解和应用书中的理论知识。 Selenium WebDriver的核心概念包括: 1. WebDriver API:这是一个统一的接口,允许测试脚本与不同的浏览器进行交互。它提供了丰富...
这通常是学习新库或技术的重要资源,因为它们提供了实际运行的代码,帮助我们理解如何将理论应用到实践中。 在给定的压缩包子文件的文件名称列表中,"e02e3df8f4a66b12906fbb9b4cd57835.txt"和"fileinfo.txt"可能是...
【标题】中的“基于Selenium WebDriver的B_S架构软件的自动化测试研究”表明,这个...通过阅读压缩包中的"基于Selenium WebDriver的B_S架构软件的自动化测试研究.pdf"文件,我们可以获取更深入的理论知识和实战技巧。
Selenium WebDriver API for Java 是一个强大的自动化测试框架,用于模拟用户与Web应用程序的交互。它允许开发者编写可跨...记住,实践是检验知识的最好方式,动手尝试编写自己的测试脚本,将理论知识转化为实际操作。
《Selenium WebDriver for Java 教程源码解析》 Selenium WebDriver是一款强大的自动化测试工具,尤其在Web应用程序...源代码作为实践的蓝本,是理论知识与实际操作相结合的最佳教材,有助于提升你的自动化测试能力。
【标题解析】 "IntroToWebDriver:使用Selenium WebDriver和Java从头开始构建框架" 这个标题揭示了我们即将探讨的主题...这个过程需要理论知识的积累,以及动手实践的经验,对于提升软件测试的效率和质量具有重要意义。
在本文中,我们将深入探讨如何使用Selenium WebDriver进行自动化Web应用程序测试,特别是在Java环境中。Selenium WebDriver是一...记得实践是检验真理的唯一标准,理论知识结合实际操作,才能真正掌握Selenium的精髓。
本资料包“软件测试理论总结,Selenium学习.zip”聚焦于软件测试的基础理论与Selenium自动化测试工具的深入学习,旨在帮助开发者和测试工程师提升测试效率和质量。 一、软件测试理论 1. 测试目标:软件测试的主要...
本书“精通Selenium-WebDriver电子书+项目代码”是深入学习这个技术的重要资源,结合理论与实践,帮助读者从入门到精通。 1. **Selenium介绍**:Selenium 是一个开源的自动化测试框架,支持多种编程语言如Java、...
每个章节都可能包含理论解释、代码示例以及实际应用场景,帮助读者将理论知识转化为实际编程技能。 例如,"Chapter 1"可能介绍了设计模式的基础概念和重要性,"Chapter 2"可能讲解了如何在PHP中实现单例模式,...
除了理论知识外,本书还提供了丰富的实战案例,帮助读者将所学应用于实际项目中。 - **案例分析**:通过具体的项目案例,展示如何应用Selenium WebDriver解决实际问题。 - **项目实施**:指导如何将Selenium ...
需要注意的是,虽然AutoIt理论上可以与其他浏览器配合使用(如Firefox、Edge),但必须确保有相应的WebDriver驱动程序,并且脚本可能需要进行适应性修改,因为不同浏览器的WebDriver API可能会有所不同。在本资源中...
首先,Selenium的核心在于它的WebDriver组件,它允许程序员使用多种编程语言(如Java、Python、C#等)来控制浏览器,进行自动化测试。WebDriver提供了API,使得开发者能够模拟用户的行为,如点击按钮、填写表单、...
在“零基础python-webdriver大纲.doc”中,你将学习到Python的基础语法,包括变量、数据类型、控制结构(如if-else,for,while)、函数以及异常处理。理解这些基本概念是编写自动化脚本的前提。 二、WebDriver介绍...
同时,提供的源码可以帮助你更好地理解理论知识在实际项目中的应用,从而加速学习进程。 总的来说,Selenium是一个强大而灵活的自动化测试工具,对于Java开发人员来说,学习Selenium不仅可以提升测试技能,还有助于...