- 浏览: 139686 次
- 性别:
- 来自: 北京
最新评论
-
yuanyuan7891:
...
用ruby做自动化测试--入门 -
shouquan822:
showModalDialog,我不能定位到ie页面,为啥
说说watir-webdriver那些事(六)如何处理弹出窗口 -
dtrex:
use的方法,是window的类方法,api里有的,除非是你的 ...
说说watir-webdriver那些事(六)如何处理弹出窗口 -
xinac0421:
我运行的时候,为什么说我没有use这个方法?
说说watir-webdriver那些事(六)如何处理弹出窗口 -
test803:
selenium_java_code_.rar 无法下载啊
使用selenium进行web测试项目框架
文章列表
思考自动化测试--开始(一)
- 博客分类:
- 自动化测试
Edit
思考自动化测试--开始(一)
自动化测试的开始
自动化测试,从一个大家陌生的概念,到现在越来越多的人在关注使用自动化测试。似乎自动化测试已经成了一个“高级"。但是其实很多人对自动化测试本身有很多误解,自动化测试不是银弹,不是瑞士军刀。自动化测试并不能代替测试本身。很多领导或者客户了解到自动化测试,就都会有用自动化测试覆盖测试的冲动。在这种冲动下,投入大量的人力财力,经常是无功而返的。自动化测试到底怎么了?
自动化测试并没有想象的那么完美
自动化测试到底都有哪些问题?我们为什么会经常感觉做不下去了?为什么投入那么多,效果总是那么一点点。 自动化测试本身有自动测试 ...
用ruby做自动化测试--入门
- 博客分类:
- 自动化测试
也许很多让对ruby中的开源工具Watir,都有耳闻,也就是Ruby其实可以对Web的自动化测试有了很好的工具了。不过在做Web的自动化测试的时候,不知道有没有遇到过弹出窗口的问题,甚至有没有想过Ruby是否可以Window的应用进行一定的自动化测试呢?
如果有很简单的思路,既然ruby可以调用Window的Com接口,那我们是不是可以利用Win32api的接口,做些事情呢?我也是在网上很多大神的提醒下,开始做这方面的探索,不过我对C++简直就是抵触啊,C的话还算能接受,所以在做这方面的探讨有点班门弄斧,我想这个就算是我的学习笔记吧,也不能算是什么技术博客了。
做好准备
让ruby帮我们 ...
一个web功能自动化测试工具应该具备三个基础属性:
1.可以定位web的DOM元素,这个我在前面的定位已经讲过了
2.可以执行js脚本,这个不仅是上一章说的执行js,还包括对控件的写js操作
3.模拟键盘鼠标进行操作。
前两点,已经在前面都谈过了,下面讲讲第三点,模拟操作,首先说说模拟键盘操作:
键盘模拟
如果用过Selenium的话,会知道神奇的send_keys几乎涵盖了所有的输入操作,那么Watir-webdriver也是一样的模拟键盘的操作,可以使用这条命令,比方说,我想在页面上大一个回车
b.send_keys :enter
当然你会遇到组合键 ...
在很多时候,使用Watir-webdriver提供的方法,操作可能有些不方便,另外页面可能存在一些js代码,可以调用。所以很多情况,在执行自动化测试脚本的时候,也会编写一些js的脚本来执行,帮助自动化测试执行。执行js脚本只要调用execute_script命令即可。
例如:
require 'watir-webdriver'
b=Watir::Browser.new
b.goto("http://www.baidu.com")
js='''
alert("1");
'''
b.execute ...
行为驱动的测试,如果说你还不了解这个概念,那你应该先去网上查查,如果你知道行为驱动的测试,那么我们将讲讲这个cucumber的工具,一个用于行为测试的工具。
先说安装:
1.安装ruby,这个不细说了,网上找能找出一大堆来。
2.之后下载DevKit-tdm-32-4.5.1-20101214-1400-sfx.exe,解压
3.之后安装Devkit,命令如下:
ruby dk.rb init
ruby dk.rb install
4.下面安装所需要的gem包
gem update --system
gem insta ...
Table是经常遇到的一个数据展示组件,我们在做自动化测试的时候免不了跟他打交道。这里我们简单说一下如何处理Table这样的组件。
首先还是举个例子,
<html>
<head>
<title>Table</title>
<style>
table {border: 1px solid #ccc}
</style>
</head>
<body>
<tab ...
在网上看watir-webdriver,有人说Select框的中文无法进行选择,我自己试了一下现在的新版本0.5.3,是可以的,不用再打什么补丁了,简单的试了一下,下面是测试用的html
<html>
<head>
<title>select</title>
</head>
<body>
<select name="area" id="area_select" >
<option value="1&quo ...
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。
在自动化测试过程中,cookie可能保存一些信息,我们很多时候需要获取相关信息,或者清空他们的信息,如下的代码基本展示了主要的操作
require 'watir-webdri ...
一般自动化测试的时候,总会用到抓图,把测试当时的结果保存下来,watir-webdriver使用的是它底层的Selenium-webdriver就有的截屏工具,非常好用,具体代码如下:
browser.driver.save_screenshot 'screenshot.png'
记住,他的截屏非常强大,一般页面太长只能截一屏,然后屏幕外的需要使用滚动条,现在你使用这样的截屏,你已经摆脱了这样的麻烦了。
说道截屏,很多人都想使用屏幕录像工具来把整个过程记录下来,其实我个人认为没有太大的必要,如果录制屏幕的话,那样的话临时文件会很大,我觉得好的办法就是 ...
Page Object这种模式来组织自动化测试脚本应该说是目前比较流行的方式,这种模式有助于提高脚本的可维护性和健壮性。简单地说把,就是把页面对象和操作步骤按照Page为单位组织。举个例子吧,之前我们的脚本都是这样写的:
browser = Watir::Browser.new
browser.goto "http://example.com/login"
browser.text_field(:name => "user").set "Mom"
browser.text_field(:name => &q ...
首先举个例子,html的js弹出窗口的代码如下:
<html>
<head><title>Popup Window</title></head>
<body>
<input id = "btn" value = "click" type = "button" onclick = "alert('hello');"/>
</body>
</html>
...
在实际的测试过程中,所有的业务操作不会在一个页面内完成,经常会做的工作就是弹出一个新的窗口,想新的窗口中进行操作,虽然目前很多比较流畅的页面设计都尽量避免使用这种方式,不过弹出窗口还是存在于很多web应用中。
一般弹出窗口有这么四类:
使用window.open的js命令弹出一个新的浏览器,这种方式遇到的比较少,因为实在不美观;
有一种叫做模态窗口,这个相当于页面在子窗口,子窗口不关闭,主窗口无法进行操作,也无法关闭,这种窗口一般使用window.showModalDialog来打开;
还有比较常见的窗口,就是js中的提示窗口,一共有三种alert,comfirm,prompt,而前两种 ...
Watir会等待页面load完毕,才能进行下面的操作,所以不需要等待页面加载完毕。这里所说的等待,是指在Web页面中,经常碰到的Ajax异步加载。这种加载,会在你进行一个操作后,对后台进行交互,而这种交互不会占用前台的等待,你可以进行其他任何在这个页面的其他操作,交互完毕后,可能会弹出窗口,可能会弹出控件,也可能一个控件消失。我们要做的就是等待这种过程的结束,之后进行测试案例下面的操作。等待的方法,大致上有下面几种方法
Watir::Wait.until { ... }: 等待block里面的值为true停止
object.when_present.set: 当 ...
功能自动化测试做的就是,找到页面的控件元素,然后操作这些控件,完成模拟人工的测试操作。所以开头肯定是要定位到页面上的元素。watir-webdriver提供了多方方法,帮助我们定位Web页面上的元素。
常用的定位方法如下:
...
frame一直是一个让自动化测试工程师极其头疼的问题,尤其是watir针对iframe总是有些奇怪的问题,并且针对那些不太明白html的人来说,frame也确实比较难以理解。我简单说明一下,frame简单的说就是在一个页面里可以套用其他的页面,但是可能我们在看页面的时候没有什么感觉,基本看不出来。但是在做自动化测试的时候,就一定要关注Frame,比方说页面里面有个frame,在这个frame里包含一个其他的页面,包含一个文本框,我们要向这个文本框里写内容要写成
b.frame(:id=>"frame1").text_field(:id=>&qu ...