今天是一个高兴的日子,我终于成功地利用AutoIt关闭IE弹窗了。
利用Watir进行网页测试已经有2年多了,但始终在处理IE弹窗上卡壳,网上有不少介绍和例子可供借鉴,但以前均未能测试成功。
先将代码列出:
require 'watir'
require 'win32ole'
require 'watir/windowhelper'
.........
ie33.link(:id, "something").click_no_wait
sleep 3 #时间长短可能影响能否关闭弹窗
#sleep 2
puts "before autoit"
autoit = WIN32OLE.new('AutoItX3.Control')
puts "before loop do"
loop do
puts "in loop"
#ret = autoit.WinWaitActive("Windows Internet Explorer", "",9)
#ret = autoit.WinWaitActive("来自网页的信息", "",9)
ret = autoit.WinWaitActive("Microsoft Internet Explorer", "",9)
puts "after ret"
puts(ret)
if (ret==1)
autoit.Send("{Enter}")
exit
end
sleep 3
end
以前不成功的原因,主要是测试用电脑的环境不一样,今天尝试以上代码时,刚开始也不成功,ret始终等于0,偶然用鼠标碰了一下IE窗口,ret变为1。这才发现
ie33.link(:id, "something").click_no_wait
语句之后的sleep时间长短很关键,不同的电脑以及网络速度不同,sleep时间不匹配的话,以上代码不能正常运行。
比较疑惑的是,以下代码不能正常运行:
Thread.new{
puts "before autoit"
autoit = WIN32OLE.new('AutoItX3.Control')
puts "before loop do"
loop do
puts "in loop"
#ret = autoit.WinWaitActive("Windows Internet Explorer", "",9)
#ret = autoit.WinWaitActive("来自网页的信息", "",9)
ret = autoit.WinWaitActive("Microsoft Internet Explorer", "",9)
puts "after ret"
puts(ret)
if (ret==1)
autoit.Send("{Enter}")
exit
end
sleep 3
end
}
ie33.link(:id, "something").click_no_wait
在将
ie33.link(:id, "something").click_no_wait
修改为
ie33.link(:id, "something").click
之后,以上代码运行成功。
我自己的原创: http://www.sdgz.cn