即使它是用 Java 编写的,您也无法直接访问其他应用程序控件(如按钮、复选框、列表和其他 UI 元素),除非该应用程序提供一些选项来控制其 UI(我怀疑许多应用程序都提供了这样的东西)。
所以可能只有两种方法(我猜两者都一样糟糕): 1. 使用一些 3rd 方本机库与应用程序交互,但在这种情况下会有很多痛苦和问题,具体取决于测试的应用程序。2. 使用 Robot 并在该应用程序窗口上模拟键和鼠标事件来执行某些操作(例如按下按钮、填充文本字段或滚动列表),但这需要您也无法检索的组件的精确坐标,因此您可能只对这些坐标进行硬编码,并祈祷在测试运行时没有人移动/调整测试窗口的大小。
总结 - 使用 Java 编写 UI 测试应用程序并不是最好的事情。实际上我敢打赌,在某些情况下使用其他语言编写它可能会很痛苦。
也许我大错特错了,有人可以分享一种在Java中以更好的方式做这些事情的方法......
PS 小机器人示例(填写抽象登录表单):
public static void main ( String[] args )
{
fillForm ();
}
private static void fillForm ()
{
try
{
Robot r = new Robot ();
// Set to true so we will wait for events to process
// Still we might need some delays to let application take the input in some cases
r.setAutoWaitForIdle ( true );
// Login
typeKey ( r, KeyEvent.VK_A );
typeKey ( r, KeyEvent.VK_D );
typeKey ( r, KeyEvent.VK_M );
typeKey ( r, KeyEvent.VK_I );
typeKey ( r, KeyEvent.VK_N );
// Tab to password field
typeKey ( r, KeyEvent.VK_TAB );
// Password
typeKey ( r, KeyEvent.VK_P );
typeKey ( r, KeyEvent.VK_A );
typeKey ( r, KeyEvent.VK_S );
typeKey ( r, KeyEvent.VK_S );
// Process form
typeKey ( r, KeyEvent.VK_ENTER );
}
catch ( AWTException e )
{
e.printStackTrace ();
}
}
private static void typeKey ( Robot r, int a )
{
r.keyPress ( a );
r.keyRelease ( a );
}