企业中做自动化测试,会用到Selenium,它确实是一个强大,免费,而便捷的自动化测试框架。但有时候我们会遇到一些特别的浏览器输入控件,他们不是正常的Html input元素,因此Selenium无法获取到。这时候我们需要用本地化操作进行模拟。当然,这种技术也不仅可以用来做测试,还可以....你懂的。切入正题。
问题/任务描述: 实现向支付宝密码控件自动输入密码
解决方案:使用JNA提供的Native代理,调用Windows系统函数,通过SendMessage函数发送字符,实现输入。
具体步骤:(1)找到控件窗口的句柄(可以使用Spy++),总结如何找到的,这是一个自定义的算法.因为支付宝的控件类名是随机的乱码.
(2)循环发送密码的每一个字符。
上代码:
package org.tbworks.auto_alipay;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinUser.WNDENUMPROC;
import com.sun.jna.win32.W32APIOptions;
/**
* @author tangb Note: className means the class name of window (frame), you can
* get it by spy++
*/
public class AlipayEditInputTyper {
// load the user32.dll
final protected static User324J user32 = (User324J) Native.loadLibrary(
"user32", User324J.class, W32APIOptions.DEFAULT_O