软测之路第三十五课(1课时)
web自动化测试
学习目标
1.了解为何要进行自动化测试
2.认识Selenium的运作原理
3.通过IDE学习Selenium语句(重点)
4.学习WebDriver的使用(重点)
5.介绍在自动化过程中可能遇到的一些问题和解决思路
============================================
1.了解为何要进行自动化测试
为什么要做自动化:
(1)越来越快的开发节奏需要测试的效率也不断的提升
(2)测试执行过程中充斥著大量的重复劳动
(3)现在所流行的迭代式开发模式(比如敏捷)需要迭代式的测试与之相匹配
对自动化测试的误解:
(1)自动化测试属于白盒测试领域
(2)自动化测试仅仅适用于项目周期长的项目
(3)自动化测试不适用于需求变化频繁的项目
(4)自动化测试是手工测试的补充
(5)自动化测试用例的设计是在被测软体完成后才能进行的
(6)自动化测试就是录制和回放
(7)工具=自动化测试
2.认识Selenium
互联网的高速发展促使Web自动化测试的发展
流行的web测试自动化工具
>QTP
>LoadRunner
>WinRunner
>Robot
>Silk Test
为什么选择Selenium
(1)免费!
(2)支持多平台、多浏览器、分散式
(3)支持多种开发语言,用例管理方便
什么是Selenium
出身:
>ThoughtWorks开发的开源的Web应用程序验收测试工具
命名:
>Selenium(化学元素硒)
硒可以解汞(Mercuy)毒
组件:
>Selenium Core:Selenium核心引擎
>SeleniumIDE:FireFox的一个插件,支持脚本录制
>WebDriver:Selenium的轻量级web测试框架
认识Selenium-IDE
IDE的安装
下载安装包,这是一个xpi文件,也就是火狐插件文件,直接拖入火狐浏览器窗口即可见到安装界面
IDE的启动
安装成功后重启火狐浏览器,可以在浏览器的工具菜单栏中看到SeleniumIDE
Selenium语言
selenium语言基本语法结构
指令 [定位] [值]
读懂一段Selenium语言的命令
Select和find按钮的区别
selenium页面元素定位:
(1)id定位
id=id:指定HTML中的唯一id的元素。
(2)name定位
name=name:指定HTML中相同name的元素中的第一个元素
(3)Identifier定位
identifier=id:首先查找HTML是否存在该id的元素,若不存在,查找第一个该name的元素。与之前id=id的区别是id只能查找id属性,而identifier既可以查找id属性,也可以用来查找name属性。
(4)xpath定位
xpath是XML Path的简称,由于HTML文档本身就是一个标准的XL页面,所以我们可以使用Xpath的用法来定位页面元素。
xpath locator用XPath表达式来定位HTML中的元素,必须注意要以"//"开头。
//input[@id=ls_username] 其中属性都是以@开头。
绝对路径以「/」开头,让xpath从文档的根节点开始解析,不推荐
相对路径以"//」开头,让xpath从文档的任何元素节点开始解析
(5)CSS定位
以百度输入框为例
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off>
#css通过id属性定位,用#号表示id属性
css=#kw
#css通过class属性定位,用.表示class属性
css=.s_ipt
#css通过标签与属性的组合来定位元素
css=input#kw或css=input.s_ipt或css=input[id=kw]
(6)link定位
link="退出"
link="设置」
(7)DOM定位(Document Object Model)
DOM定位以「document」开始,所以「dom=标签并不是必须的
dom=document.getElementByld(「su")
dom=document.forms["f"].elements["wd"]
dom=document.f.wd
页面元素定位方法的选择:
如何选择定位方法?
策略是:选择简单,稳定的定位方法。
1.当页面元素有id属性的时候,尽量使用id来定位。没有的话,再选择其他定位方法
2.Css选择器执行速度快,推荐使用
3.定位超链接的时候,可以考虑link Text或partialLinkText:但是要注意的是,文本经常发生改变,所以不推荐用
4.xpath功能最强悍。但是执行速度慢,webdriver会将整个页面的所有元素进行扫描以定位我们所需要的元素,这是个非常费时的操作,所以尽量少用。实在没有办法的时候,才使用xpath。
实例:
Select元素的识别
对select元素的选择一般有以下4种:
(1)label=选项文字
(2)value=value属性值
(3)index=选项序号
(4)id=id属性值
Frame元素的识别
frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。
Frame是对象在FRAMESET元素内指定的单个框架。
Frame对象可以使用普通元素识别的所有方法,通常使用的方法
如下:
>name=frame的Name
>index=Frame序号
>relative=parent,专用于识别本frame的直属父级frame
SeleniumIDE的命令
(1)操作(action):控制应用程序操作的命令
(2)辅助(acessors):用于检查应用程序的状态,并将结果存储在变数中。
(3)断言(assertion):验证应用程序的状态是否同所期望的相一致。
任何SeleniumIDE的测试步骤都属于这些类别之一。
(1)操作类Selenium命令
Click——点击页面某按钮
Open——在浏览器URL行输入网页地址
Type——用户在页面输入框的输入
Select———模拟用户在页面中选择器的选择操作
Goback———模拟用户点击浏览器的后退键操作
Close————关闭浏览器
实例:select标签实现多选和撤销选择
命令的格式:
addSelection/removesSelection(locator.lableLocator)
(2)辅助类Selenium命令
1)storeValue(locator,variableName)
-把指定的input中的value值保存到变数中。
2)storeText(locator,variableName)
-把指定元素的文本值赋予给变数
(3)断言类Selenium命令
检查判断类
1)Assertlocation是否在正确的页面
2)assertTitle——页面Title是否正确
3) assertValue——是否正确的值
4) assetrtText———指定的页面文本是否正确
Verify,assert命令的区别:
assert—「assert」命令可以确保在验证失败的情况下测试执行将终止。一般用于程序中一旦一个值出错,该值将影响后续程序的运行。
verify—「verify」命令使SeleniumIDE继续执行,即使验证失败,测试脚本仍将继续执行。用于程序中,一旦某个值出错,但是错误结果并不影响后续程序运行。
waitFor命令
应用:在selenium脚本回放时会遇到timeout错误,往往是response返回时间较长超过了selenium的等待时间。所以使用「waitFor」命令等待条件满足后执行下一个测试步骤就可以解决这个问题。
等待类的常见例子:
(1)waitForElementPresent——等待元素出现
(2)waitForTitle——等待标题页面载入
(3)waitForValue——等待给定的值载入
其他常用命令—-pause
pause命令
语法:
pause(milliseconds)
含义:根据指定时间暂停Selenium脚本执行,单位:毫秒。
作用:常用在调试脚本或等待伺服器段响应时。
runscript命令
语法:
runscript(javascript)
作用:运行一行javascript的脚本。
document getElementByld("kw").value="LLT"
Pattern字元表达式(正则表达式)
什么是pattern?三种匹配方式:glob、regexp、exactglob:>默认不写为glob>通配符匹配,*表示任意长度任意字元串,?表示任何单个字元>例如:在verifyvalue的例子中,使用*testing*表示只要包含testing的字样就表示检查成功。regexp:正则表达式匹配,主要是针对javascript中支持正则表达式
>value中的值必须加上:
◆「regexp:」——对大小写敏感
◆「regexpi:」—对大小写不敏感
exact:精确匹配,必须完全匹配当前字元串
应用场合:例如,当需要检查的文本中有一个真实的*号
WebDriver是什么?
webDriver一套类库,不依赖于任何测试框架,它本身就是一个轻便的自动化测试框架。Selenium webdriver具有以下特点:
>开源的WEB自动化利器
>提供了与浏览器WEB网页的API
>跨平台:windows、Linux、MAC
>跨语言:Python、JAVA、RUBY.……
>繁琐且基于Web的管理任务