Watir 安装
Watir 是 Web Application Testing in Ruby 的缩写,是一个优秀的开源Web测试工具。我们QA Team决定用它来做自动化工具了。
在安装Watir时遇到一些小挫折,记录下来做个备忘。
1. 首先要安装Ruby。在Windows上安装Ruby非常简单,只需要下载相应的exe,执行即可。
下载页面:/frs/?group_id=167
2. 按照教程,执行下面的两个Gem命令
gem update --system
gem install watir
3.如果用的是IE8以下版本,再去安装一个IE开发工具条。IE8里已经内置了这个工具,只要在浏览器里按F12就可以调出。
点这里下载
安装完毕,看似简单得不能再简单。但是开始运行那个著名的search on google的例子,却怎么也搞不定。
在命令行窗口敲irb,呵呵,顺利进入irb命令状态。开始试验:
Require "watir"
ie=Watir::IE.new
< "le"
第二行就失败了,怎么也创建不出IE对象。看了半天文档也没有更详细的解释了,于是在google上搜啊搜,发现也有人碰到了类似问题,但是按着一些回答试了试,还是不行。后来终于琢磨出来,是一些组件安装了多个版本造成的。解决方法如下:
1. 执行 gem list,列出所有安装的组件。每个组件后面会有一个括号,里面有一组数字就代表了版本号,比如0.4.4。如果括号里有两组或以上这样的数字,就说明安装了多个版本。
2. 对于所有安装多个版本的组件执行 gem uninstall XXX (XXX为组件名),然后选择想要删除的版本,确保每个组件都只有一个版本。我是都保留了最新的。
再运行上面的例子,一切OK,可以开始做自动测试脚本了!
Posted in QA-Team, 自动化.
Tagged with watir, 测试, 自动化.
1 comment
By jennyyu – 2009年06月22日
以下内容引用自“猪头小包子”的文章《ruby+watir安装》
1.首先是要下载ruby安装包。下载地址:/frs/?group_id=167
2.执行刚才下载的安装包。最好是装在系统盘的根下(比如C:\ruby)。相当傻瓜式的next安装。不详解。(中间有个选择组件的步骤,保持默认即可)。
3.安完了。下面开始升级。保持网络连接,暂时关掉防火墙。
运行下面2个命令:
gem update --system
gem install watir
第一个是对Rubygems升级,第二个是对安装watir。这两个过程都是要通过网络的。我可能是rp不好从来没执行这2个命令成功过(不过公司的倒是成功了,奇怪),详见我在JavaEye上的提问:www.javaeye/problems/882
如果你的rp像我一样搓,可以考虑以下方案:
下载最新版本的Rubygems和watir的gem进行手动升级。
4.假设前面这3步都完成了,那柳暗花明的一刻终于来到了。
打开SciTE这个程序,一
个极其简练的编辑器呈现在我们面前。
敲一行 puts “Hello World!" 保存为helloworld.rb。
然后按下F5,右侧的OutPut应该会显示:
>ruby google.rb
hello
>Exit code: 0
好,然后把下面这一堆代码复制进去。我略微改动了一些地方。其实这是一个别人写的demo。这就是用Watir来进行页面测试的脚本。按F5可以执行下。
#-------------------------------------------------------------#
# Demo test for the Watir controller.
#
# Simple Google test written by Jonathan Kohl 10/10/04.
# Purpose: to demonstrate the following Watir functionality:
# * entering text into a text field,
# * clicking a button,
# * checking to see if a page contains text.
# Test will search Google for the "pickaxe" Ruby book.
#-------------------------------------------------------------#
# the Watir controller
require "watir"
# set a variable
test_site = "le/"
content = "51Testing"
#open the IE browser
ie = Watir::IE.new
# print some comments
puts "Beginning of test: Google search."
puts " Step 1: go to the test site: " + test_site
< test_site
puts " Step 2: enter 'watir' in the search text field."
<_field(:name, "q").set "watir" # "q" is the name of the search field
puts " Step 3: click the 'Google Search' button."
ie.button(:type, "submit").click # "submit" is the type of the Search button
puts " Expected Result:"
puts " A Google page with results should be shown. '#{content} ' should be high on the list."
puts " Actual Result:"
include? "#{content}"
puts " Test Passed. Found the test string: '#{content} '. Actual Results match Expected Results."
else
puts " Test Failed! Could not find: '#{content} '."
end
puts "End of test: Google search."
# 使用Watir工具,需要在脚本中加上
require 'watir'
# 创建一个IE的实例
ie = Watir::IE.new
# 或者在创建的同时直接转到页面
ie = Watir::IE.start('/')
# Watir使用start方法同时创建一个浏览器实例并转到一个页面。
# IE浏览速度
ie.speed = :fast
ie.speed = :slow
# 页面导航
<('/')
# 注: ie.goto还可以运行javascript的代码如: ie.goto("javascript: ie.document.write("Hello World");")
# 取得当前网页的网址
ie.url
# 点击超链接
ie.link(:text , "Pickaxe").click
ie.link(:href, /http:\/\/pragmaticprogrammer\/).click
ie.link(:name => 'foo', :index => 1).click
# 超链接的uri
ie.link(:text , "Pickaxe").href
ie.link(:index, 1).href
ie.link(:text => "reply", :index => 2).href
# 超链接的文本
ie.link(:href , /http:\/\/pragmaticprogrammer\/).text
=begin
对应的HTML代码为:
<a href="pragmaticprogrammer/titles/ruby/" mce_href="pragmaticprogrammer/titles/ruby/">Pick
axe</a>
=end
# img标签
ie.image(:name, 'image').src
ie.image(:index, 2).src
=begin
对应的HTML代码为:
<img name = img src="pragmaticprogrammer/titles/ruby/top.gif" mce_src="pragmaticprogrammer/titles/ruby/top.gif">
<img name = img src="pragmaticprogrammer/titles/ruby/head.gif" mce_src="pragmaticprogrammer/titles/ruby/head.gif">
=end
# 设置复选框
ie.checkbox(:name, "checkme").set
ie.checkbox(:name, "checkme", "1").set # 使用name和value属性设置复选框
# 清除复选框
ie.checkbox(:name, "checkme").clear
ie.checkbox(:name, "checkme", "1").clear # 使用name和value属性清除复选框
=begin
对应的HTML代码为:
<input type = "checkbox" name = "checkme" value = "1">
=end
# 设置单选框
ie.radio(:name, "clickme").set
ie.radio(:name=>'clickme', :index=>2).set
ie.radio(:name, "clickme", "1").set # 使用name和id属性设置单选框
# 使用name属性清除单选框
ie.radio(:name, "clickme").clear
ie.radio(:name, "clickme", "1").clear # 使用name和id属性清除单选框
=begin
对应的HTML代码为:
<input type = "radio" name = "clickme" id = "1">
<input type = "radio" name = "clickme" id = "2">
=end
# 设置下拉框
ie.select_list(:name, "selectme").select('Python') # 使用text属性和值来设置下拉框
ie.select_list(:name, "selectme").select_value('2') # 使用value属性和值来设置下拉框
# 使用name属性和值来清除下拉框
ie.select_list(:name, "selectme").clearSelection
=begin
对应的HTML代码为:
<select name = "selectme">
<option value = 1>Ruby
<option value = 2>Java
<option value = 3>Python
<option value = 4>C
</select>
=end
# 文本的框设置
<_field(:name, "typeinme").set("Watir World")
# 清空文本输入框
<_field(:name, "typeinme").clear
=begin
对应的HTML代码为:
<input type = "text" name = "typeinme">
=end
# 通过值或name属性点击button
ie.button(:value, "Click Me").click
ie.button(:name, "clickme").click
=begin
正则匹配超链接对应的HTML代码为:
<input type = "button" name = "clickme" value = "Click Me">
=end
# 通过值或name属性点击Submit
ie.button(:value, "Submit").click
ie.button(:type, "Submit").click
ie.button(:name, "Submit").click
=begin
对应的HTML代码为:
<form. action = "submit" name = "submitform" method="post">
<input type = "submit" value = "Submit">
</form>
=end
# 表单中的图片按钮
ie.button(:name, "doit").click
=begin
对应的HTML代码为:
<form. action = "submit" name = "doitform" method="post">
<input type="image" src = "images/doit.gif" name = "doit">
</form>
=end
# 没有按钮的表单
ie.form(:name, "loginfo
rm").submit # 通过name,action以及method属性来提交表单
ie.form(:action, "login").submit
=begin
对应的HTML代码为:
<form. action = "login" name = "loginform" method="get">
<input name="username" type="text">
</form>
=end
# 框架
ie.show_frames #可以打印出当前页面框架的数量和名称
# Watir允许通过名称属性来访问框架
ie.frame("menu")
# 如果要访问menu框架中的一个超链接,可以
ie.frame("menu").link(:text, "Click Menu Item").click
# 嵌套框架
ie.frame(:name, "frame1").form(:name, 'form1')
# 新窗口
# 一些Web应用会弹出新窗口或打开一个新窗口,可以使用attach方法来访问并控制新窗口。通过标示新窗口的URL或者title来访问。
ie2 = Watir::IE.attach(:url, '/')
ie3 = Watir::IE.attach(:title, 'Test New Window')
# 也可以使用正则表达式
ie4 = Watir::IE.attach(:title, /Test New/)
# 注意:不要把新窗口分配到你的ie变量,最好给新窗口一个不同的名字
# 访问Table元素:
t = $ie.table(:id,"data")
t = w($ie,:id,"data")
t = $ie.table[1]
# tr,td元素
tr = ie.row(:id,"title")
tr = w(ie,:id,"title")
td = ie.cell(:id,"name")
td = w(ie,:id,"name")
# Watir中Table,TableBody,TableRow,TableCell这几个类,都提供了一个索引方法"[](index)"来定位其下一层的子元素对象,该方法为实例方法,"index"为传入的参数,索引值从1开始,而非从0开始。
# 用法如下:
# 以table的第一行,第一个元素为例:
tr1 = t.[](1)
td1 = tr1.[](1)
# 也可以连续访问:td1 = t.[](1).[](1)
# 如果td中还有其他元素,可以通过td的实例方法直接访问,以checkbox为例:
cb = td1.checkbox(:id,'navigate_id').click
=begin
对于以上所提到的对象,都是从Element继承而来,所以click,enabled?,exists?,fireEvent,flash,focus等方法都直接可以使用。
如果你的td元素定位准确了,且鼠标响应事件没有错误的话,那么应该能看到点击后的效果。
建议多查一下Watir的API Reference /rdoc/
=end
# 代码如下:
t = ie.table(:id,"CoolMenu2menutable")
td_logout=t.[](1).[](16)
# 先到Table,再索引TR,再索引到TD
# 运行Ruby时不显示browser方法
# 运行Ruby程序文件时在后面加 "-b"
# ex:
test.rb -b
# 也可以做成.bat文件
ex: test.bat
< test.rb -b
# 获取隐含对象值
# <INPUT type=hidden value="您的Email" name="field1">
values = ie.hidden(:name, 'field1').value
# 获取窗口对象
# 方法1:
ie2 = Watir::IE.attach(:url,'le/') #根据URL获取
# 方法2:
ie3 = Watir::IE.attach(:title,'Google') #根据窗口标
题获
# 方法3:
ie4 = Watir::IE.attach(:title, /google/) #正则表达式匹配获取
本文来自CSDN博客,转载请标明出处:blog.csdn/imdarkrocky/archive/2009/06/27/4300312.aspx
开发测试案例(Developing Test Cases)
1.打开编辑器
2.以.rb为你的文件扩展名
3.在测试文件的第一句写上“require 'watir'”,确保可以访问Watir工具。
4.打开浏览器并转到要测试的应用
5.与之交互并设计你的testcase
6.在测试脚本中使用Watir方法
7.验证结果
与网页交互(Interacting With a Web Page)
当使用Watir开发测试脚本的时候,通过给网页上的对象发送消息来与之交互。
<_field(:name , "q").set("bluescorpio")
ie.button(:value , "Click Me").click
Watir语法(Watir Syntax)
1.使用Watir工具,需要在脚本中加上
require 'watir'
2.创建一个IE的测试实例
ie = Watir::IE.new
或者在创建的同时直接转到页面
ie = Watir::IE.start("mytestsite";)
Watir使用start方法同时创建一个浏览器实例并转到一个页面。
3.页面导航
<("mytestsite";)
4.操纵Web页面对象
4.1超链接
4.1.1使用Text属性点击超链接
ie.link(:text , "Pickaxe").click
对应的HTML代码为:
<a href="pragmaticprogrammer/titles/ruby/";>Pickaxe</a>
4.1.2使用URL属性点击超链接
ie.link(:url , "pragmaticprogrammer/titles/ruby/";).click
对应的HTML代码为:
<a href="pragmaticprogrammer/titles/ruby/";>Test Site</a>
4.2复选框
4.2.1使用name属性设置复选框
ie.checkbox(:name, "checkme").set
4.2.2使用name属性清除复选框
ie.checkbox(:name, "checkme").clear
4.2.3使用name和value属性设置复选框
ie.checkbox(:name, "checkme", "1").set
4.2.4使用name和value属性清除复选框
ie.checkbox(:name, "checkme", "1").clear
对应的HTML代码为:
<input type = "checkbox" name = "checkme" value = "1">
4.3单选框
4.3.1使用name属性设置单选框
ie.radio(:name, "clickme").set
4.3.2使用name属性清除单选框
ie.radio(:name, "clickme").clear
4.3.3使用name和id属性设置单选框
ie.radio(:name, "clickme", "1").set
4.3.4使用name和id属性清除单选框
ie.radio(:name, "clickme", "1").clear
对应的HTML代码为:
<input type = "radio" name = "clickme" id = "1">
4.4下拉框
4.4.1使用name属性和值来设置下拉框
ie.select_list( :name , "selectme").select("is fun")
4.4.2使用name属性和值来清除下拉框
ie.select_list( :name , "selectme").clearSelection
对应的HTML代码为:
<select name = "selectme" > <option name=1> <option name=2>Web Testing <option name=3>in Ruby <option name=4>is fun </select>
4.5在Web页面中输入数据
4.5.1使用文本输入框的那么属性设置输入内容
<_field(:name, "typeinme").set("Watir World")
4.5.2清空文本输入框
<_field(:name, "typeinme").clear
对应的HTML代码为:
<input type = "text" name = "typeinme" >
4.6从Web页面上提交数据
4.6.1按钮
4.6.1.1通过值或标题属性点击按钮
ie.button(:value, "Click Me").click
4.6.1.2通过name属性点击按钮
ie.button(:name, "clickme").click
对应的HTML代码为:
<input type = "button" name = "clickme" value = "Click Me">
4.6.2表单
4.6.2.1表单中的按钮
使用value或标题属性
ie.button(:value, "Submit").click
对应的HTML代码为:
<form action = "submit" name = "submitform" method="post"><input type = "submit" value = "Submit"></input></form>
4.6.2.2表单中的图片按钮
使用那么属性
ie.button(:name, "doit").click
对应的HTML代码为:
<form action = "submit" name = "doitform" method="post"><input type="image" src = "images/doit.gif" name = "doit"></form>
4.6.2.3没有按钮的表单
Watir can submit a form by identifying it by its name, action and method attributes.
可以通过name、action以及method属性来提交表单
ie.form(:name, "loginform").submit
ie.form(:action, "login").submit
对应的HTML代码为:
<form action = "login" name = "loginform" method="get"><input name="username" type="text"></input></form>
4.6.3框架
ie.show_frames可以打印出当前页面框架的数量和名称
Watir允许通过名称属性来访问框架,如ie.frame("menu")
如果要访问menu框架中的一个超链接,可以ie.frame("menu").link(:text, "Click Menu Item").click
4.6.4嵌套框架
ie.frame("frame1").frame(:name, "nested_frame")
4.6.5新窗口
一些Web应用会弹出新窗口或打开一个新窗口,可以使用attach方法来访问并控制新窗口。通过标示新窗口的URL或者title来访问。
ie2 = Watir::IE.attach(:url, 'mytestsite')
ie3 = Watir::IE.attach(:title, 'Test New Window')
也可以使用正则表达式
ie4 = Watir::IE.attach(:title, /Test New/)
注意:不要把新窗口分配到你的ie变量,最好给新窗口一个不同的名字
5.验证结果
比较好的方法是在测试案例中假如验证点
5.1对象存在
使用Watir方法contains_text
ains_text("Reached test verification point.")
puts: "Test passed. Page contains the text: Reached test verification point."
else
puts: "Test failed! Page didn't contain text: Reached test verification point."
end
5.2使用test::unit Assertions
5.2.1需要test::unit
require 'test/unit'
5.2.2创建测试实例
class TC_myTest < Test::Unit::TestCase
...fill in Test Case
end
5.2.3创建测试用例方法
在测试类中,需要声明象下面的方法:
def test_myTestCase
fill in method body with Watir code and assertion here
end
方法必须以test开头,ruby会随机运行测试案例,如果需要顺序执行,需要在test后加上字母或数字来强迫它顺序执行,比如“test_a_mytest”
定义测试方法的类
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论