论坛首页 编程语言技术论坛

在Watir中利用AutoIt关闭弹窗

浏览 7204 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-18  
今天是一个高兴的日子,我终于成功地利用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
   发表时间:2010-01-18  
写个BHO就好了
0 请登录后投票
   发表时间:2010-12-18  
ruby调用AutoIT3?真给力。头一次知道还可以搭配使用的。
0 请登录后投票
   发表时间:2010-12-19  
呵呵~我也遇到和LZ一样的问题了,我查了一下发现有人说click_no_wait在某些版本的ruby里面有问题的,所以LZ不妨换个ruby版本试下,而且靠sleep 3来解决,这个貌似不大严谨啊
0 请登录后投票
   发表时间:2010-12-22   最后修改:2010-12-22
我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。

可以配合Spy++来寻找需要的窗口信息。

感觉这样好像比调用AutoItX3.dll来得可靠些。

如果需要,还可以把它做成后台进程,来监视并自动关闭某些弹出窗口。
0 请登录后投票
   发表时间:2010-12-22  
billgui 写道
我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。

可以配合Spy++来寻找需要的窗口信息。

感觉这样好像比调用AutoItX3.dll来得可靠些。

如果需要,还可以把它做成后台进程,来监视并自动关闭某些弹出窗口。



这正是我要找的解决方案啊~可惜我不懂Windows API和编程,能告诉我如果我要学这些要从哪里学起吗?能推荐几本书吗?谢谢
0 请登录后投票
   发表时间:2010-12-23  
drug 写道
billgui 写道
我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。

可以配合Spy++来寻找需要的窗口信息。

感觉这样好像比调用AutoItX3.dll来得可靠些。

如果需要,还可以把它做成后台进程,来监视并自动关闭某些弹出窗口。



这正是我要找的解决方案啊~可惜我不懂Windows API和编程,能告诉我如果我要学这些要从哪里学起吗?能推荐几本书吗?谢谢


1)可以直接在Ruby语言里边调用Windows API,Ruby for Windows自带的《Programming Ruby》电子书里好像有例子;
2)Google...
0 请登录后投票
   发表时间:2010-12-23  
drug 写道
billgui 写道
我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。

可以配合Spy++来寻找需要的窗口信息。

感觉这样好像比调用AutoItX3.dll来得可靠些。

如果需要,还可以把它做成后台进程,来监视并自动关闭某些弹出窗口。



这正是我要找的解决方案啊~可惜我不懂Windows API和编程,能告诉我如果我要学这些要从哪里学起吗?能推荐几本书吗?谢谢


AutoIT也是用find window做的...
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics