用Watir测试QTP的Demo程序Mercury Tours
参考:
http://wiki.openqa.org/display/WTR/Watir+demo+on+Mercury+Tours
require 'test/unit'
require 'watir'
require 'watir/screen_capture'
class Demo < Test::Unit::TestCase
include Watir
include Watir::ScreenCapture
def setup
@ie = Watir::IE.new_process
@ie.goto("http://newtours.demoaut.com/")
end
def test_logon
@ie = Watir::IE.attach(:url,"http://newtours.demoaut.com/" )
@ie.maximize()
assert_equal(@ie.title, "Welcome: Mercury Tours")
@ie.text_field(:name, "userName").set "test"
@ie.text_field(:name, "password").set "test"
@ie.button(:name,"login").click
screen_capture("logon.jpg",true)
assert_equal(@ie.title, "Find a Flight: Mercury Tours:")
assert(@ie.radio(:name,"tripType", "oneway").exists?)
assert(@ie.select_list(:name,"passCount").exists?)
assert(@ie.select_list(:name,"fromPort").exists?)
assert(@ie.select_list(:name,"fromMonth").exists?)
assert(@ie.select_list(:name,"fromDay").exists?)
assert(@ie.select_list(:name,"toPort").exists?)
assert(@ie.radio(:name, "servClass","Business").exists?)
assert(@ie.select_list(:name,"airline").exists?)
assert(@ie.form(:name, "findflight").exists?)
# booking page 1
@ie.radio(:name,"tripType", "oneway").set
@ie.select_list(:name,"passCount").select "1"
@ie.select_list(:name,"fromPort").select "Acapulco"
@ie.select_list(:name,"fromMonth").select "March"
@ie.select_list(:name,"fromDay").select "10"
@ie.select_list(:name,"toPort").select "Frankfurt"
@ie.radio(:name, "servClass","Business").set
@ie.select_list(:name,"airline").select "Unified Airlines"
@ie.form(:name, "findflight").submit
screen_capture("page1.jpg",true)
# booking page 2
assert(@ie.radio(:name, "outFlight","Blue Skies Airlines$360$270$5:03").exists?)
assert(@ie.radio(:name, "outFlight","Blue Skies Airlines$361$271$7:10").exists?)
assert(@ie.radio(:name, "outFlight","Pangea Airlines$362$274$9:17").exists?)
assert(@ie.radio(:name, "outFlight","Unified Airlines$363$281$11:24").exists?)
@ie.radio(:name, "outFlight","Pangea Airlines$362$274$9:17").set
assert(@ie.radio(:name, "inFlight","Blue Skies Airlines$631$273$14:30").exists?)
@ie.radio(:name, "inFlight","Blue Skies Airlines$631$273$14:30").set
assert(@ie.form(:name,"results").exists?)
@ie.form(:name,"results").submit
screen_capture("page2.jpg",true)
#booking page 3 -- purchase
assert(@ie.text_field(:name,"passFirst0").exists?)
assert(@ie.text_field(:name,"passLast0").exists?)
assert(@ie.text_field(:name,"creditnumber").exists?)
assert(@ie.form(:name,"bookflight").exists?)
@ie.text_field(:name,"passFirst0").set "samuel"
@ie.text_field(:name,"passLast0").set "luo"
@ie.text_field(:name,"creditnumber").set "1234"
@ie.form(:name,"bookflight").submit
screen_capture("page3.jpg",true)
end
def teardown
@ie.close()
end
end
这个例子测试QTP的WEB样例程序,使用了screen_capture包来实现屏幕截取,打开这个包(C:/ruby/lib/ruby/gems/1.8/gems/watir-1.5.2/watir/screen_capture.rb)可以看到,所谓的屏幕截取就是使用Win32API进行硬拷贝,然后打开画图程序保存成文件:
require 'Win32API'
module Watir
module ScreenCapture
KEYEVENTF_KEYUP = 0x2
SW_HIDE = 0
SW_SHOW = 5
SW_SHOWNORMAL = 1
VK_CONTROL = 0x11
VK_F4 = 0x73
VK_MENU = 0x12
VK_RETURN = 0x0D
VK_SHIFT = 0x10
VK_SNAPSHOT = 0x2C
VK_TAB = 0x09
GMEM_MOVEABLE = 0x0002
CF_TEXT = 1
# this method saves the current window or whole screen as either a bitmap or a jpeg
# It uses paint to save the file, so will barf if a duplicate filename is selected, or the path doesnt exist etc
# * filename - string - the name of the file to save. If its not fully qualified the current directory is used
# * active_window - boolean - if true, the whole screen is captured, if false, just the active window is captured
# * save_as_bmp - boolean - if true saves the file as a bitmap, saves it as a jpeg otherwise
def screen_capture(filename , active_window_only=false, save_as_bmp=false)
keybd_event = Win32API.new("user32", "keybd_event", ['I','I','L','L'], 'V')
vkKeyScan = Win32API.new("user32", "VkKeyScan", ['I'], 'I')
winExec = Win32API.new("kernel32", "WinExec", ['P','L'], 'L')
openClipboard = Win32API.new('user32', 'OpenClipboard', ['L'], 'I')
setClipboardData = Win32API.new('user32', 'SetClipboardData', ['I', 'I'], 'I')
closeClipboard = Win32API.new('user32', 'CloseClipboard', [], 'I')
globalAlloc = Win32API.new('kernel32', 'GlobalAlloc', ['I', 'I'], 'I')
globalLock = Win32API.new('kernel32', 'GlobalLock', ['I'], 'I')
globalUnlock = Win32API.new('kernel32', 'GlobalUnlock', ['I'], 'I')
memcpy = Win32API.new('msvcrt', 'memcpy', ['I', 'P', 'I'], 'I')
filename = Dir.getwd.tr('/','//') + '//' + filename unless filename.index('//')
if active_window_only ==false
keybd_event.Call(VK_SNAPSHOT,0,0,0) # Print Screen
else
keybd_event.Call(VK_SNAPSHOT,1,0,0) # Alt+Print Screen
end
winExec.Call('mspaint.exe', SW_SHOW)
sleep(1)
# Ctrl + V : Paste
keybd_event.Call(VK_CONTROL, 1, 0, 0)
keybd_event.Call(vkKeyScan.Call(?V), 1, 0, 0)
keybd_event.Call(vkKeyScan.Call(?V), 1, KEYEVENTF_KEYUP, 0)
keybd_event.Call(VK_CONTROL, 1, KEYEVENTF_KEYUP, 0)
# Alt F + A : Save As
keybd_event.Call(VK_MENU, 1, 0, 0)
keybd_event.Call(vkKeyScan.Call(?F), 1, 0, 0)
keybd_event.Call(vkKeyScan.Call(?F), 1, KEYEVENTF_KEYUP, 0)
keybd_event.Call(VK_MENU, 1, KEYEVENTF_KEYUP, 0)
keybd_event.Call(vkKeyScan.Call(?A), 1, 0, 0)
keybd_event.Call(vkKeyScan.Call(?A), 1, KEYEVENTF_KEYUP, 0)
sleep(1)
# copy filename to clipboard
hmem = globalAlloc.Call(GMEM_MOVEABLE, filename.length+1)
mem = globalLock.Call(hmem)
memcpy.Call(mem, filename, filename.length+1)
globalUnlock.Call(hmem)
openClipboard.Call(0)
setClipboardData.Call(CF_TEXT, hmem)
closeClipboard.Call
sleep(1)
# Ctrl + V : Paste
keybd_event.Call(VK_CONTROL, 1, 0, 0)
keybd_event.Call(vkKeyScan.Call(?V), 1, 0, 0)
keybd_event.Call(vkKeyScan.Call(?V), 1, KEYEVENTF_KEYUP, 0)
keybd_event.Call(VK_CONTROL, 1, KEYEVENTF_KEYUP, 0)
if save_as_bmp == false
# goto the combo box
keybd_event.Call(VK_TAB, 1, 0, 0)
keybd_event.Call(VK_TAB, 1, KEYEVENTF_KEYUP, 0)
sleep(0.5)
# select the first entry with J
keybd_event.Call(vkKeyScan.Call(?J), 1, 0, 0)
keybd_event.Call(vkKeyScan.Call(?J), 1, KEYEVENTF_KEYUP, 0)
sleep(0.5)
end
# Enter key
keybd_event.Call(VK_RETURN, 1, 0, 0)
keybd_event.Call(VK_RETURN, 1, KEYEVENTF_KEYUP, 0)
sleep(1)
# Alt + F4 : Exit
keybd_event.Call(VK_MENU, 1, 0, 0)
keybd_event.Call(VK_F4, 1, 0, 0)
keybd_event.Call(VK_F4, 1, KEYEVENTF_KEYUP, 0)
keybd_event.Call(VK_MENU, 1, KEYEVENTF_KEYUP, 0)
sleep(1)
end
end
end
#screenCapture( "f.bmp", false , true)
用Watir测试QTP的Demo程序Mercury Tours相关推荐
- qtp启动java程序_转: QTP六脉神剑之调用Java程序
查看( 1147 ) / 评论( 21 ) 六脉神剑之调用程 序0Xp1zLN_0版权声明:原创作品,转载请以链接方式注明出自http://www.51testing.com/?35,否则将追究法律责 ...
- Android中通过USB接口与和PC进行通讯的demo程序
以往开发过多款安卓嵌入式设备,这些设备与PC通讯主要通过设备上的以太网网口进行网络通讯,最近一个项目设备没有以太网网口,设备与PC通讯要求使用普通安卓数据线连接设备与PC完成数据通讯. 查阅相关资料以 ...
- 新浪微博开发平台基于php的sdk包(包含demo程序),新浪微博API开发教程(一)-体验篇...
现在新浪微博开放平台(http://open.weibo.com)非常火啊,所以...,你懂的! 首先,想要开发新浪微博API,你就必须获取APP KEY和APP SECRET,我毫不犹豫的就用新浪微 ...
- Skia4Dephi 的 Demo 程序界面架构分析
前言 Skia 是一个高效率的 2D 画图引擎,由 Google 开源出来.目前可以运行在 Android, iOS 和 Win32 上面. Skia4Delphi 是一个开源的 Delphi 控件, ...
- qtp启动java程序_QTP六脉神剑之调用Java程序
版权声明:原创作品,转载请以链接方式注明出自,否则将追究法律责任.本文出自songfun的51Testing软件博客:不少网友对于QTP调用Java程序感到束手无策,实际上要调用Java程序是非常容易 ...
- Android API Demo程序框架
前言 android API Demo程序主要演示了Android常见API的使用方法, 本文将该程序的框架提取出来, 以作为自己研究和学习Android编程的一个示例收集框架,即将所有自己研究过的例 ...
- ADO.NET Entity Framework 入门示例向导(附Demo程序下载)
ADO.NET Entity Framework 入门示例向导(附Demo程序下载) ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架, ...
- .QT-制作最强电压电阻表盘,可以自定义阴影效果,渐变颜色,图标,文字标签等-附带demo程序
.QT-制作最强电压电阻表盘,可以自定义阴影效果,渐变颜色,图标,文字标签等-附带demo程序 qt自定义控件-圆形通用指示表盘
- 使用sikuli和Arquillian测试HTML5 canvas应用程序
HTML5引入了一个很棒的新元素,可以用来在窗格上绘制任意内容: canvas元素. 数十年来,胖客户端应用程序的标准功能现已引入Web应用程序领域. Web开发人员不再需要使用专有插件在其应用程序中 ...
- 测试无服务器应用程序的最佳方法
Serverless is more than a cloud computing execution model. It changes the way we plan, build, and de ...
最新文章
- svn由于连接方在一段时间后没有正确答复或连接的主机没有反应连接尝试失败...
- 数据库系统的三级模式结构知识笔记
- java多个文件压缩_java实现多个文件压缩
- java中枚举表示数据状态
- QT中如何固定窗口的大小?
- hdu 1818 It's not a Bug, It's a Feature!(位运算+bfs优先队列)
- Mysql密码加密方式
- 【渝粤教育】电大中专电子商务网站建设与维护 (3)作业 题库
- linux 操作系统级别监控 free命令
- 2021华为软挑-成渝复赛复盘
- 软件工程:可行性研究
- 打开eclipse翻译错误值13 的解决办法
- 如何修改图片大小?图片怎么调整尺寸?
- JWT解析及安全问题
- 转----一个图形爱好者的书架.-也来介绍一下我的藏书.
- Spring的Tomcat服务关闭后,Quartz进程无法正常关闭,出现内存泄露
- 基于粒子群算法的组卷系统的研究与实现
- 算法分析学习笔记二 蛮力法
- OpenStack T版服务组件--Keyston身份服务
- 系统运维架构 DevOps