WebDriver 学习笔记

简介:

项目自动化测试要用到WebDriver,这里网摘一些和WebDriver相关的知识供自己参考。


1.什么是Selenium 和WebDriver?

Selenium 是一个浏览器的自动化操作框架。它主要由3个工具组成。1.Selenium IDE,是Firefox插件,支持用户的录制和回放。2.Selenium WebDriver,它提供了各种语言环境的API 来支持编写自动化应用程序。

3.SeleniumGrid,它可以让engineer用Selenium API 来控制分布在一系列机器上的浏览器实例,支持并发的运行更多的测试。


WebDriver针对各个浏览器开发,它取代了嵌入到被测的Web应用中的js,从而与浏览器紧密的联系从而创建更高级的测试,而避免了JS安全模型的限制。它不仅有浏览器厂商的支持,还利用操作系统级的调用来模拟用户输入。从支持的浏览器看,它支持Firefox(FirefoxDriver),  IE(InternaetExplorerDriver),Opera(OperaDriver)和Chrome(ChromeDriver),此外,它还支持Android(AndroidDriver)和iPhone(iPhoneDriver)的移动应用测试。WebDriver支持各种语言,比如Python,Ruby,Java ,C#.


2.如何使用WebDriver.

对于各种浏览器,WebDriver的使用方法是不一致的。

对于Firefox, 只要写code为 Webdriver driver = new FirefoxDriver()就可以了,这时候它就会从默认的安装位置去找Firefox. 如果默认位置没有,那么可以设置webdriver.firefox.bin 环境变量来指定它的位置。然后用System.setProperty("webdriver.firefox.bin","/./../some location")


对于Chrome会麻烦点,首先要下载一个ChromeDriver(http://code.google.com/p/chromedriver/downloads/list)位置,然后它用来充当WebDriver和Chrome浏览器的桥梁,然后启动ChromeDriver会得到一个url和一个监听端口,这时候我们代码是 webDriver = new RemoteWebDriver(url, DesiredCapabilities.chrome())


3.WebDriver的工作原理

WebDriver是一个W3C的标准,见http://code.google.com/p/selenium/wiki/JsonWireProtocol#Command_Reference,

从这里可以看出,WebDriver可以和浏览器交互的原因在于浏览器实现了一组wire协议。它使用了经典的client-server模式,客户端发送一个request,服务器端返回一个response


这里的Client是调用WebDriverAPI 的机器。(比如我们的自动化测试代码所运行的机器)

这里的Server是运行浏览器的机器。

通信模式是,Firefox浏览器直接实现了WebDriver的通信协议,而Chrome和IE要通过ChromeDriver和InternetExplorerDriver充当桥梁来实现。


所以这里有2种情况,一种是LocalWebDriver,这就是我们的WebDriverAPI 机器和浏览器在同一个JVM中,我们在本地测试都是这种情况,因为都在同一个LinuxBox中。

第二种情况是RemoteWebDriver,这是WebDriverAPI 和浏览器在不同的JVM中的情况,因为我们代码在CIServer上,但是我们的浏览器在Selenium Hub,是另外机器上。


4.WebElement

这是WebDriverAPI 中的对象,代表页面上的一个DOM元素。

当执行WebDriver driver = new FirefoxDriver()

driver.get("http://www.google.com")

代码的时候,client(我们测试代码)向着server(浏览器所在机器)发送了如下的请求:

POSTsession/285b12e4-2b8a-4fe6-90e1-c35cba245956/url  post_data{"url":"http://google.com"}  

因为前面已经说过了,WebDriver实现了W3C 的wire协议。它会请求浏览器完成跳转url的操作。

假设remote server实现这个接口(Firefox已经实现了W3C,因此没问题),则会跳转,并且返回如下response:

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

其中status code为0 表示已经正确执行。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1254265,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Web App开发 IDE 测试技术
Selenium WebDriver使用
Selenium WebDriver使用
22 1
|
Web App开发 前端开发 JavaScript
Selenium Webdriver 简易教程
Selenium Webdriver 简易教程
105 0
|
Web App开发 JavaScript 测试技术
Selenium Webdriver 简易教程2
Selenium Webdriver 简易教程2
107 0
|
JavaScript 搜索推荐 API
Selenium 4|学习笔记
快速学习 Selenium 4
185 0
Selenium 4|学习笔记
|
JavaScript 前端开发 API
Selenium 2|学习笔记
快速学习 Selenium 2
121 0
Selenium 2|学习笔记
|
前端开发 API 定位技术
Selenium 3|学习笔记
快速学习 Selenium 3
100 0
Selenium 3|学习笔记
|
Web App开发 数据采集 前端开发
Selenium 1|学习笔记
快速学习 Selenium 1
67 0
Selenium 1|学习笔记
selenium+PhantomJS
selenium+PhantomJS
70 0
|
Web App开发
selenium的webdriver的各类属性
selenium的webdriver的各类属性
146 0
|
数据采集 Web App开发 Python
Python爬虫:对selenium的webdriver进行简单封装
Python爬虫:对selenium的webdriver进行简单封装
218 0