记录阿里巴巴QA架构组成长点滴。2008年关键词为效率,技术,影响力!QA/测试架构师定义:开发和设计测试框架测试库;纵横全局的考虑产品的功能,设计复杂的测试系统;负责研发某一项特定的测试技术;为公司考虑如何提高测试效率。领导公司测试技术的发展和测试策略上的方向,关注整个公司的测试部门的问题,前瞻性的考虑未来的版本的测试策略和技术。测试架构师计划/设计测试平台,关注着产品的测试过程,提供咨询服务,影响到公司内的测试机构测试社区,以及开发机构等,对产品各个方面施加深远而正确的影响,最终提高整体软件质量。

[watir] 弹出框的另一种解决方法

上一篇 / 下一篇  2008-10-28 14:22:37 / 个人分类:开源工具与新技术研究

  watir对于弹出框的处理一直都不是非常的好,网上很多的解决方案都是采用autoit的方法来解决的。其实,使用win32api中自带的方法,也能解决这个问题,而且,可能效率更高。

 我们主要用到以下几个win32api的函数:

 FindWindowEx #可以根据handle值获取特定类的子类的句柄

 SendMessage #发送win32消息

 GetWindowText #取得空间的caption或者title属性

其中的几个常量

WM_CLICK = 0x00F5

IDC_BUTTON1 = 1000

我们先声明这些win32函数

require 'win32API'

 SendMessage = Win32API.new('user32.dll','SendMessageA',['l','l','l','l'],'v')

FindWindowEx = Win32API.new('user32.dll','FindWindowExA',['l','l','p','p'],'l')

GetWindowText = Win32API.new('user32.dll','GetWindowTextA',['l','p','l'],'l')

我们先找到ie的弹出框。

hwnd =ie.hwnd #根据ie对象获取他的hwnd值

popup_hwnd = FindWindowEx.call(hwnd,0,"#32770",nil) #'#32770'是ie弹出框的类名

#找到弹出框后,遍历弹出框上的button控件

button_hwnds =Array.new

button_hwnd = FindWindowEx.call(popup_hwnd,0,"button",nil)

while button_hwnd!=0

 button_hwnds << button_hwnd

 button_hwnd = FindWindowEx.call(popup_hwnd,0,"button",nil)

end

#找到button的集合后,要点第i个button,直接使用button_hwnd[i]

#调用sendmessage点击按钮

SendMessage.call(button_hwnd[i], WM_CLICK,IDC_BUTTON1,0)

SendMessage.call(button_hwnd[i], WM_CLICK,IDC_BUTTON1,0) #在实际的使用过程中,发现需要调用2次wm_click消息,不知道为什么

 

使用这个方法,还可以根据button上的文字来点击

主要是使用GetWindowText方法,这里不做详细的讲解

 


TAG: 开源工具与新技术研究

yugisnow的个人空间 引用 删除 yugisnow   /   2009-04-02 16:11:55
我来说两句,首先
while button_hwnd!=0

button_hwnds << button_hwnd

button_hwnd = FindWindowEx.call(popup_hwnd,0,"button",nil)

end
这个是死循环,不知qaarchitech有没调试过,因为 FindWindowEx的第二个参数是0,所以它每次都是从第一个子窗口开始找,都只是找到第一个按钮。第二个参数的定义 : hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。所以应该把0改成 button_hwnd
引用 删除 dleyanlin   /   2008-12-03 15:26:18
用”FindWindowEx“好像一直无法获取弹出框 的句柄?
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2017-06-15  
    123
45678910
11121314151617
18192021222324
252627282930 

数据统计

  • 访问量: 70462
  • 日志数: 163
  • 文件数: 1
  • 建立时间: 2008-02-26
  • 更新时间: 2008-12-10

RSS订阅

Open Toolbar