`
try001
  • 浏览: 5477 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

在Watir中利用AutoIt关闭弹窗

阅读更多
今天是一个高兴的日子,我终于成功地利用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
分享到:
评论
7 楼 mathgl 2010-12-23  
drug 写道
billgui 写道
我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。

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

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

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



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


AutoIT也是用find window做的...
6 楼 billgui 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...
5 楼 drug 2010-12-22  
billgui 写道
我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。

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

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

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



这正是我要找的解决方案啊~可惜我不懂Windows API和编程,能告诉我如果我要学这些要从哪里学起吗?能推荐几本书吗?谢谢
4 楼 billgui 2010-12-22  
我用的一个办法是直接使用Windows API,比方FindWindow、FindWindowEx、GetDlgItem、GetDlgCtrlID、PostMessage和keybd_event等来寻找和关闭窗口。

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

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

如果需要,还可以把它做成后台进程,来监视并自动关闭某些弹出窗口。
3 楼 drug 2010-12-19  
呵呵~我也遇到和LZ一样的问题了,我查了一下发现有人说click_no_wait在某些版本的ruby里面有问题的,所以LZ不妨换个ruby版本试下,而且靠sleep 3来解决,这个貌似不大严谨啊
2 楼 yzhkpli 2010-12-18  
ruby调用AutoIT3?真给力。头一次知道还可以搭配使用的。
1 楼 ray_linn 2010-01-18  
写个BHO就好了

相关推荐

    watir 自动化测试相关

    首先,通过Cucumber定义清晰的测试场景,然后利用Watir编写具体的测试步骤,最后在遇到Windows交互难题时,调用AutoIt进行补充。这样,不仅确保了测试的覆盖率,还提高了测试的效率,降低了人为错误的可能性。 总结...

    watir-cn中文补丁包

    watir-cn中文语言包 watir-cn中文语言包 watir-cn中文语言包 watir-cn中文语言包 watir-cn中文语言包 watir-cn中文语言包 watir-cn中文语言包 watir-cn中文语言包 watir-cn中文语言包 watir-cn中文语言包 watir-cn...

    ruby watir教程

    **Ruby Watir** 是一种用于网页自动化测试的工具库,它能够模拟用户在浏览器中的操作行为,如点击按钮、填写表单等,非常适合进行功能测试、回归测试和系统测试。 #### 二、安装Ruby Watir ##### 1. 安装Ruby环境 ...

    自动化测试Watir参考手册

    然而,随着时间的推移,Watir也在不断改进,其稳定性已经大大提高。 - **可维护性**:Watir的脚本因为更接近于自然语言,所以在修改和维护方面相对容易些。 - **代码行数**:一般情况下,使用Watir编写的脚本比使用...

    watir测试框架介绍

    watir测试框架介绍 watir测试框架介绍 watir测试框架介绍

    Watir测试框架介绍

    3. **Watir库**: 在Ruby环境中,使用`gem install watir`命令安装Watir库。 4. **其他依赖库**: 根据你的需求,可能还需要安装其他的辅助库,如`rspec`用于编写规范化的测试代码。 ### **三、API介绍** Watir提供了...

    watir安装所需要的gem包

    Watir,全称为Web Application Testing in Ruby,是一个用于自动化浏览器操作的开源库,它使得编写测试脚本变得简单直观,可以模拟用户在浏览器中的各种交互行为。在Ruby编程语言环境中,Watir允许开发者通过编写...

    watir api chm

    **Watir API CHM文档详解** Watir,全称Web Application Testing In Ruby,是一个用于自动化浏览器操作的开源库,...在实际工作中,结合具体的项目需求和测试场景,灵活运用Watir API,能够大大提高测试效率和质量。

    watir安装包之三 IE watir

    安装命令:gem install watir --local。

    ruby and watir 安装指南

    在尝试安装 Watir 时遇到问题,尤其是在服务器 2003 上。主要问题是 Watir 的依赖包 `activesupport` 需要 Ruby 版本 >= 1.8.7,而当前系统上安装的是 Ruby 1.8.6。此外,RubyGems 的自动更新功能也出现了问题。 ##...

    Watir自动化测试的实践代码

    在这个文件中,你可以看到如何使用Watir库来定位和操作网页元素,例如: 1. 导入Watir库:`require 'watir'` 2. 创建浏览器实例:`browser = Watir::Browser.new :chrome`(或其他浏览器) 3. 访问网页:`browser....

    Watir的介绍文档:基于RUBY的web UI自动化测试库

    它的设计目的是模拟人们在浏览器中的行为,如点击链接、填写表单和按下按钮,并能够检查预期的文本是否出现在页面上。Watir适用于各种类型的Web应用程序,包括ASP.Net、JSP、PHP和Rails等。由于其开源特性,Watir由...

    Ruby-Watir在Ruby中Web应用程序测试

    Ruby-Watir是一种开源自动化测试框架,专门用于在Ruby编程语言中进行Web应用程序的测试。它允许开发者通过编写Ruby代码来模拟用户与浏览器的交互,从而实现端到端的测试。这个工具的名字“Watir”是“Web ...

    test_logger1.rar_Logger wat_ruby _watir_watir ruby_watir-webdriv

    在IT行业中,自动化测试是提升效率、确保软件质量的关键手段之一。Ruby作为一种简洁且强大的编程语言,被广泛用于编写自动化测试脚本。Watir(Web Application Testing in Ruby)是Ruby社区开发的一个开源库,它允许...

    watir语法详解和描述

    Watir,全称为Web Application Testing in Ruby,是一个用于自动化浏览器操作的开源测试框架。...在实际应用中,可能还需要结合其他Ruby库和工具,如Selenium WebDriver,以实现更复杂的浏览器自动化测试。

    代替Watir中click_no_wait的方法。

    然而,`click_no_wait`方法在某些版本的Watir中可能已经被弃用或不存在,因此在更新的版本中寻找替代方案是必要的。这篇博客文章(尽管描述部分为空,但根据标题推测)可能是介绍如何在Watir中实现类似`click_no_...

Global site tag (gtag.js) - Google Analytics