使用JNA解决自动化测试无法做密码输入操作的问题
作者:网络转载 发布时间:[ 2013/4/8 10:11:16 ] 推荐标签:
其中用到的各种事件类型定义如下:1.public class Win32MessageConstants {
2.
3. public static final int WM_SETTEXT = 0x000C; //输入文本
4.
5. public static final int WM_CHAR = 0x0102; //输入字符
6.
7. public static final int BM_CLICK = 0xF5; //点击事件,即按下和抬起两个动作
8.
9. public static final int KEYEVENTF_KEYUP = 0x0002; //键盘按键抬起
10.
11. public static final int KEYEVENTF_KEYDOWN = 0x0; //键盘按键按下
12.
13.}
下面写一段测试代码来测试支付宝密码安全控件的输入,测试代码如下:
1.import java.util.concurrent.TimeUnit;
2.
3.import static org.hamcrest.core.Is.is;
4.import static org.junit.Assert.assertThat;
5.
6.import static org.hamcrest.core.IsNull.notNullValue;
7.import org.junit.Test;
8.
9.import com.sun.jna.platform.win32.WinDef;
10.import com.sun.jna.platform.win32.WinDef.HWND;
11.
12.public class AlipayPasswordInputTest {
13.
14. @Test
15. public void testAlipayPasswordInput() {
16. String password = "your password";
17. HWND alipayEdit = findHandle("Chrome_RenderWidgetHostHWND", "Edit"); //Chrome浏览器,使用Spy++可以抓取句柄的参数
18. assertThat("获取支付宝密码控件失败。", alipayEdit, notNullValue());
19. boolean isSuccess = Win32Util.simulateCharInput(alipayEdit, password);
20. assertThat("输入支付宝密码["+ password +"]失败。", isSuccess, is(true));
21. }
22.
23. private WinDef.HWND findHandle(String browserClassName, String alieditClassName) {
24. WinDef.HWND browser = Win32Util.findHandleByClassName(browserClassName, 10, TimeUnit.SECONDS);
25. return Win32Util.findHandleByClassName(browser, alieditClassName, 10, TimeUnit.SECONDS);
26. }
27.}
测试一下,看看是不是输入成功了!
后说下这个方法的缺陷,任何方法都有不可避免的存在一些问题,完美的事情很少。
1、sendMessage和postMessage有很多重载的函数,不是每种都有效,从上面的Win32Util中能看出,实现了很多个方法,需要尝试下,成本略高;
2、输入时需要注意频率,输入太快可能导致浏览器中安全控件崩溃,支付宝的安全控件在Firefox下输入太快会崩溃;
3、因为是系统API,所以MAC、UNIX、WINDOWS下都不同,如果只是在windows环境下运行,可以忽略;
4、从测试代码可以看到,是针对Chrome浏览器的,因为每种浏览器的窗口句柄不同,所以要区分,不过这个相对简单,只是名称不同;
5、如果你使用Selenium的RemoteDriver,并且是在远程机器上运行脚本,这个方法会失效。因为remoteDriver终是http操作,对操作系统API的操作是客户端行为,不能被翻译成Http Command,所以会失效。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11