最近又开始弄一些自动化测试的东西,所以在这总结一下。
其实以前也零零散散做过一些自动化的测试,但是基本上都是在一套现有的框架上面做一些相对来说比较简单的开发,但这一次没有框架,没有任何技术支持。还好,要做的东西不难,所以一个人应付下来了。
自动化测试核心部分之一就是要模拟用户的输入,主要有三个方面:
模拟键盘输入
键盘输入其实就是调用系统的API函数
VOID keybd_event(
BYTE bVk,
BYTE bScan,
DWORD dwFlags,
DWORD dwExtraInfo
);
有了这个函数,只要我们知道你想模拟的键的Virtual Code,你就可以模拟敲键了,具体的Virtual Code可以查阅MSDN手册。这其中有一点点小问题,那就是对PC来说,Virtual Code很容易一一确定,但是在Windows Mobile来说,就不那么显而易见了,比如说那两个软件分别是VK_F1和VK_F2,而那个Center键则是VK_RETURN。当时我就是琢磨了不少时间才确定这些虚拟码,最简洁的办法就是自己写一个程序捕捉一下这些键到底是啥,不要瞎猜,嘿嘿~
模拟文本输入
上面说的模拟键盘输入确实可以模拟输入一些ASCI码值,比如你要输入英文,那绝对没有问题,只需一个一个的发送Virtual Code就行了,但是如果要输入Unicode比如中文什么的,那就不行了,因为keybd_event中的bVk参数本身就是BYTE类型的,应该不可能传送Unicode,所以只能用另外一个办法,就是向你想输入的窗口发送WM_CHAR消息,所以问题就是我们如何得到目标窗口的句柄。由于所测App与我们的自动化测试程序不在同一个线程,所以我们没法直接找到那些窗口,这里我采用了另外一种方法,因为通常情况下目标窗口都是当前的Focused的窗口,所以只要我们能用GetFocus这个API那就可以得到句柄了,但是不同线程之间是没有共享Input Status