This is an old revision of the document!
简介
* selenium2是在其一代的基础上,结合了webdriver,它提供了完全另外的一种方式与浏览器交互。那就是利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)。由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现。例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等。。
配置
*selenium2+java:selenium2+java+idea配置
*selenium2+python:selenium2+python配置
# 入门
学习使用selenium2很简单,你需要掌握:
网页元素捕捉
浏览器控制
简单元素操作
各种键盘事件
各种鼠标事件
获得验证信息
设置元素等待
以上教程:selenium2使用入门
当你要尝试真正使用它时 注意
对业务需求本身的的足够了是所有自动化测试(包括大部分非自动化测试)的前提。
只有正确定位到相应的页面,才可以任意操作页面内的元素。不同的web程序前端结构稍有差异,所以需要清楚的了解前端页面的布局结构。 当你无法捕捉到元素时,第一反应应该检查是否定位到了相应的页面内。
具体参考:iframe页面定位详解
捕捉元素时首选 by.id name class,如果没有这个三个属性,可以尝试取得前端修改权限,自己加上去,万不得已时可以使用xpath,css等。当前端页面结构改变时这些捕捉方式就有失效的风险。
对页面元素的操作方式比你预想的更加广泛,包括键盘上的所有输入按键和基本控制按键(空格 退格 回车……),鼠标的双次点击,悬停,滚轮等……
设计
设计测试代码的过程,本质上类似软件开发的过程,最关键的是最初的需求分析,以下若干条经验之谈希望为你提供一些参考:
针对性的设计:大部分情况下,最初试图将自动化测试代码:涵盖系统的所有功能模块 或者 只测试系统的单个模块 的想法都是不合理的,最初的需求设计应该从业务的角度出发,将一个系统中的某个业务涵盖的若干个模块提取 抽象 组合起来,让测试代码为一串单独的业务进行服务,业务过程中人工键盘输入操作 机械性重复操作越多,自动化测试的价值越大。
有选择性的抽象:如果一个业务中的各个测试模块内的功能被紧密封装,相互之间关联性很低(高内聚,低耦合)。此时适合将各个功能和重复性操作层层封装,甚至各个模块自由组合,减少工作量,提高代码的可维护性。如果一个业务中的各个测试模块功能数据相互关联,此时过分的抽象会耗掉大量的时间和精力,大幅度增加设计难度。
精力的取舍:自动化测试设计永远先考虑 代码设计的精力投入和回报比例,再考虑 具体的代码设计。
自动化测试的价值:目前来看,自动化测试远没有想象的那样智能,大多数情况下无法指望它能代替人完成精准、详尽的测试,但是它可以在你完成精准、详尽的测试的过程中 代替你完成那些大量枯燥费时的机械性操作。