• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

界面自动化测试技术方案

发布: 2008-5-21 09:49 | 作者: 网络转载 | 来源: 网络转载 | 查看: 556次 | 进入软件测试论坛讨论

领测软件测试网自动化测试工具主要是界面自动化工具(当然,从大方面来讲性能工具也能归类为自动化测试工具,但这里暂不考虑它)。

Unix/Linux下有界面的软件相当少,另外其下的界面开发一般基于GTK+库,完全异于Windows下。所以,通常大家讨论的界面自动化开发是Windows下的应用程序。但Unix/Linux下也有些GUI自动化测试工具,比如运行在X11(Mac OS X)环境下的GNU Xnee,运行在Unix/Linux下支持GNOME的GNU/Linux Desktop Testing Project (GNU/LDTP)等等。

 

从零开始开发界面自动化工具可以如下走:

1.     采用Hook技术,截取键盘信息、鼠标信息、事件信息来得到界面的HWnds、Controls、Properties,此类程序一般命名为*SPY*;

2.     采用Win32函数FindWindow/FindWindowEx来一级一级的识别窗口,或EnumWindows/EnumChildWindows枚举窗口再用GetClassName、GetWindowText(GetWindowTextA)/ GetWindowTextW分别获取窗口类名、窗口标题栏,Win32优点在于更快和更可靠(MSAA和UI Automation对某些界面元素不能应用,MSAA没用SendMessageTimeout);

例:使用EnumChildWindows

BOOL CALLBACK EnumChildProc(HWND hwndChild,LPARAM lParam)

{

TCHAR szWndTitle[1024];

int nLen = GetWindowText(hwndChild,szWndTitle,1024);

return TRUE;

}

 

HWND hNMMainWnd = FindWindowEx(NULL,NULL,NULL,"DemoForm");

EnumChildWindows(hNMMainWnd,EnumChildProc,NULL);

例:检查checkbox选中

HWND hwndCB = FindWindow(NULL,"DemoForm");

hwndCB = FindWindowEx(hwndCB,NULL,NULL,"Check1");

GetDlgItem(hwndCB,00400000);

int a = (int)::SendMessage(hwndCB, BM_GETCHECK, 0, 0);

例:IE地址栏自动输入

HWND hWnd = FindWindow("IEFrame",NULL);

SetForegroundWindow(hWnd); //前端显示

hWnd = FindWindowEx(hWnd,NULL,"WorkerW",NULL);

hWnd = FindWindowEx(hWnd,NULL,"ReBarWindow32",NULL);

hWnd = FindWindowEx(hWnd,NULL,"ComboBoxEx32",NULL);

hWnd = FindWindowEx(hWnd,NULL,"ComboBox",NULL);

hWnd = FindWindowEx(hWnd,NULL,"Edit",NULL);

 

CRect rect;

GetWindowRect(hWnd,&rect);

ClipCursor(&rect);

ClipCursor(NULL);

 

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

 

for(int i=0; i<10; i++)

{

  keybd_event(65,0,0,0);

  keybd_event(65,0,KEYEVENTF_KEYUP,0);

  Sleep(500);

}

3.     等待界面出现的过程中,加入同步机制,直到界面元素Clickable;

使界面元素Clickable的途径:

l  移动窗口

l  设置焦点

l  扩展原型

l  滚动

4.     采用MS提供的已封装好的MSAA库(通用于Windows Vista之前的OS但不包括Win98)或者Windows UI Automation库(支持Windows Vista及以后),此库已集成在最新的VS 2008中的WPF里面。利用这些已经封装好的库能对所有标准的Windows控件进行自动化识别。但对非标准控件支持不好,比如腾讯公司的QQ系列。

 

总结,Windows界面自动化主要用到的APIs

1.     Win32/Win64

2.     UI Automation/MSAA

3.     DOM等其它扩展,主要支持Web程序

 

附录A:extern "C" __declspec(dllexport)

__declspec(dllexport)声明动态导出函数;“C”表示按照标准C进行编译,extern "C" 保证输出的函数按C的方式命名,即在原函数名前加下划线前缀“_”。

 

附录B:MSAA库中函数列表

[oleacc.dll]

AccessibleObjectFromWindow

CreateStdAccessibleObject

GetRoleTextW

LresultFromObject

ObjectFromLresult

DllRegisterServer

DllUnregisterServer

AccessibleChildren

AccessibleObjectFromEvent

AccessibleObjectFromPoint

CreateStdAccessibleProxyA

CreateStdAccessibleProxyW

DllCanUnloadNow

DllGetClassObject

GetOleaccVersionInfo

GetProcessHandleFromHwnd

GetRoleTextA

GetStateTextA

GetStateTextW

IID_IAccessible

IID_IAccessibleHandler

LIBID_Accessibility

WindowFromAccessibleObject

[Msaatext.dll]

DllCanUnloadNow

DllGetClassObject

DllRegisterServer

DllUnregisterServer

 

附录C:前沿

据传微软采用一种基于Win32消息、MSAA、DOM等技术;一种基于UI Automation技术;一种支持MSAA、IE和UI Automation录制/回放工具。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: 方案 技术 界面 自动化


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网