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