不能获得对其他的应用程序控件直接访问(如按钮,复选框,列表和其他UI元素),即使如果它是用Java编写的,除非该应用程序提供了一些选项来控制其UI(我怀疑许多应用程序提供这样的事情)。
所以可能只有两种方式(两者同样不好,我猜): 1.使用一些第三方本机库与应用程序进行交互,但在这种情况下会有很多痛苦和问题,具体取决于测试应用程序 2.使用机器人并在该应用程序窗口上模拟键和鼠标事件来执行某些操作(如按下按钮,填充文本框或滚动列表),但这需要组件的精确坐标,而且这些坐标也无法检索,所以您只能对这些坐标进行硬编码,并祈祷在测试运行时没有人移动/调整测试窗口的大小。
总结 - 使用Java编写UI测试应用程序并不是最好的选择。 其实我敢打赌,在某些情况下使用其他语言编写它可能会很痛苦。
也许我是非常错误的,有人可以共享一种方式,以更好的方式在Java中做这样的事情......
P.S.小机器人的例子(填写抽象的登录表单):
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);
}
我想你应该问是否可以使用任何免费软件后,别人看看它。在非常严格的情况下穿着= ked,但即使有免费的东西只要它的建筑师的睾丸就可以。但我们必须通过相同的插件。不要试图建立自己的 – tgkprog 2013-04-26 13:06:00
感谢您的建议。但我相信我不会得到任何其他工具的批准。我仍然在寻找开发这个东西的最佳选择。 – 2013-04-26 13:11:50
这个问题有几个版本 - 我将这个[Java GUI应用程序测试自动化的开源工具]引用给人们(https://sqa.stackexchange.com/questions/18554/open-source-tools从现在开始,Java-gui-application-testing-for-automation-of-java-gui-application-testing)。它有很好的回应,我想鼓励_Thinking Q/A_。 – will 2017-07-14 04:47:07