watir 处理弹出窗口
[fxzeng 原创]
(转载请保留此标志)
fxzeng
mail: fxzeng@126.com
处理弹出窗口是进行web测试的必经之路, 对于对于初学者这似乎是一个并不太好解决的问题, watir 自带的unittests里有这样的例子,但是牵扯的文件多, 而且还涉及到块的调用, 往往初学者只能照葫芦画瓢的解决这个问题.
这里介绍一种简便的处理方法, 先看看unittests中是如何处理弹出窗口的:
共牵扯到三个文件
#-----------------unittests/jscript_test.rb-------------------------------
# check_dialog, to create a new thread to help push the dialog button
#
def check_dialog(extra_file, expected_result, &block)
goto_javascript_page()
Thread.new { system("rubyw \"#{$mydir}\\#{extra_file}.rb\"") }
# system(), call win cmd to run
jscriptExtraAlert.rb
block.call
testResult = $ie.text_field(:id, "testResult").value
assert_match( expected_result, testResult )
end
# test method
def test_alert_button()
check_dialog('jscriptExtraAlert', /Alert OK/){ $ie.button(:id, 'btnAlert').click }
end
#--------------END--jscript_test.rb-------------------------------
#---------------unittests/jscriptExtraAlert.rb-------------------------------
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
require 'watir/WindowHelper'
helper = WindowHelper.new
helper.push_alert_button()
#-------------END--jscriptExtraAlert.rb-------------------------------
#-------------watir/WindowHelper.rb------------------------------
require 'win32ole'
class WindowHelper
def initialize( )
@autoit = WIN32OLE.new('AutoItX3.Control')
end
def push_alert_button()
@autoit.WinWait "Microsoft Internet Explorer", ""
@autoit.Send "{ENTER}"
end
#------------END--WindowHelper.rb--------------------------
文件之间的调用关系真是够复杂的, : ) 涉及到了三个文件, 如果需要按Cancel键的话还得增加一个jscriptExtraConfirmCancel.rb, 需要处理安全警告的话还得增加一个...., 或许你会说, 这些文件都不复杂, 写在主文件里不就行了么, 干吗还得调用文件?? 呵呵, 试试就知道为什么了...
这里介绍的方法用一个文件就可以代替原来的多个文件, 即可以处理确认, 撤消, 安全警告, 选择文件等多种情况的弹出窗口.
#----------main-method-----------------------------
def test_push_button
... ...
thrs = []
thrs << Thread.new{system("rubyw #{mydir}\\myWinHelper.rb Microsoft delete TAB ENTER")}
# Microsoft, title of the popup window, delete, text contained in the window, TAB ENTER, push TAB key then ENTER
thrs << Thread.new{$ie.button(:id, 'btnAlert').click }
thrs.each{|x| x.join}
... ...
end
#---------END--main-method--------------------
#--------myWinHelper.rb-----------------------
require 'win32ole'
autoit = WIN32OLE.new"AutoItX3.Control"
title = ARGV[0]
texts = ARGV[1]
operation = []
for i in 2..(ARGV.lengh - 3)
operaton << ARGV[i]
end
autoit.WinWait(title,texts)
operatoin.each{|x|
autoit.Send"{x}"
}
#---------END--myWinHelper.rb------------
这样, 弹出窗口问题就可以轻松解决了, 只需一个myWinHelper.rb就可以处理确定取消等常见问题, 这里的myWinHelper.rb只是一个例子, 如果有兴趣, 可以在里面添加语句, 可以轻松处理更多问题, 比如
安全警告窗口:
thrs << Thread.new{system("rubyw #{mydir}\\myWinHelper.rb \"TAB 3\" ENTER")}
# push TAB key three times, and ENTER
选择文件窗口:
thrs << Thread.new{system("rubyw #{mydir}\\myWinHelper.rb d:\\file\\test.txt !o")}
# enter the directory of the file, and then push Alt+o
watir 处理弹出窗口 [fxzeng 原创]
fxzeng
mail: fxzeng@126.com