我正在编写自动化测试应用程序。大部分事情都已经完成了。现在我需要做一些GUI自动化。安装应用程序是其中的一部分,我需要编写Java代码来启动应用程序安装程序并选择适当的选项并安装应用程序。如果有任何应用程序弹出,然后捕捉和响应这些弹出。捕获UI中的任何错误或警告。这一切都需要在Java中开发,我不允许使用任何现有的第三方工具。
我只是想知道做这件事的最好方法是什么。我在看http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#radiobutton,有没有其他最好的或简单的方法来实现这一点。关于这方面的任何想法或文章都会有所帮助。最好的方法可能是编写一个Java应用程序来记录用户在使用您想要测试的应用程序时所做的事情。
这意味着记录所有的鼠标移动和所有的按键。
之后,你的应用程序会回放所有的鼠标移动和所有的按键。
您还必须在监视器(屏幕)上记录每次鼠标移动开始、鼠标移动结束、击键序列开始和击键序列结束时的图像。
Java应用程序必须将这些图像与回放期间看到的图像进行比较。如果图像差异太大,Java应用程序将抛出错误。祝你好运,确定多少差别太大了。
我几年前使用的工具有一个过程,用户可以浏览播放图像,并标记出可能更改的图像,如日期和时间显示。
如果您从链接的维基百科列表中选择一个GUI测试工具,那么您的时间会花得更好。有些是开源的,有些是专有的。
就像生活中的大多数事情一样,物有所值是很幸运的。
即使是用Java编写的,也不能直接访问另一个应用程序的控件(如按钮、复选框、列表和其他UI元素),除非该应用程序提供一些控制其UI的选项(我怀疑许多应用程序提供这样的东西)。
所以可能只有两种方法(我猜这两种方法都一样糟糕):1. 使用一些第三方原生库与应用程序交互,但在这种情况下会有很多痛苦和问题,这取决于被测试的应用程序。2. 使用Robot和模拟该应用程序窗口上的键和鼠标事件来做一些事情(如按下按钮,填充文本字段或滚动列表),但这将需要您也无法检索的组件的精确坐标,所以您可能只硬编码这些坐标并祈祷在测试运行时没有人移动/调整被测试窗口的大小。
总而言之,用Java编写UI测试应用程序并不是最好的选择。事实上,我敢打赌,在某些情况下,使用其他语言编写它可能会很痛苦。也许我大错特错了,有人可以分享一种更好的方法在Java中做这些事情…
注:小机器人示例(填写抽象登录表单):
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 );
}