浏览 7199 次
锁定老帖子 主题:在Watir中利用AutoIt关闭弹窗
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-18
利用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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-18
写个BHO就好了
|
|
返回顶楼 | |
发表时间:2010-12-18
ruby调用AutoIT3?真给力。头一次知道还可以搭配使用的。
|
|
返回顶楼 | |
发表时间:2010-12-19
呵呵~我也遇到和LZ一样的问题了,我查了一下发现有人说click_no_wait在某些版本的ruby里面有问题的,所以LZ不妨换个ruby版本试下,而且靠sleep 3来解决,这个貌似不大严谨啊
|
|
返回顶楼 | |
发表时间:2010-12-22
最后修改:2010-12-22
我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。
可以配合Spy++来寻找需要的窗口信息。 感觉这样好像比调用AutoItX3.dll来得可靠些。 如果需要,还可以把它做成后台进程,来监视并自动关闭某些弹出窗口。 |
|
返回顶楼 | |
发表时间:2010-12-22
billgui 写道 我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。
可以配合Spy++来寻找需要的窗口信息。 感觉这样好像比调用AutoItX3.dll来得可靠些。 如果需要,还可以把它做成后台进程,来监视并自动关闭某些弹出窗口。 这正是我要找的解决方案啊~可惜我不懂Windows API和编程,能告诉我如果我要学这些要从哪里学起吗?能推荐几本书吗?谢谢 |
|
返回顶楼 | |
发表时间: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... |
|
返回顶楼 | |
发表时间:2010-12-23
drug 写道 billgui 写道 我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。
可以配合Spy++来寻找需要的窗口信息。 感觉这样好像比调用AutoItX3.dll来得可靠些。 如果需要,还可以把它做成后台进程,来监视并自动关闭某些弹出窗口。 这正是我要找的解决方案啊~可惜我不懂Windows API和编程,能告诉我如果我要学这些要从哪里学起吗?能推荐几本书吗?谢谢 AutoIT也是用find window做的... |
|
返回顶楼 | |