2013-04-26 89 views
2

我正在编写自动化测试应用程序。大部分事情已经完成。现在我需要做一些GUI自动化。安装应用程序是其中的一部分,我需要编写Java代码来启动应用程序安装程序并选择适当的选项并安装应用程序。如果有任何应用程序弹出窗口,然后捕捉并响应这些弹出窗口。捕获UI中的任何错误或警告。这一切都需要用Java开发,我不允许使用任何现有的第三方工具。在Java中自动执行UI测试

只是想知道什么是做这件事的最好方法。 我在阅读http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#radiobutton,有没有其他最好或简单的方法来实现这一点。任何想法或文章都会有所帮助。

+0

我想你应该问是否可以使用任何免费软件后,别人看看它。在非常严格的情况下穿着= ked,但即使有免费的东西只要它的建筑师的睾丸就可以。但我们必须通过相同的插件。不要试图建立自己的 – tgkprog 2013-04-26 13:06:00

+0

感谢您的建议。但我相信我不会得到任何其他工具的批准。我仍然在寻找开发这个东西的最佳选择。 – 2013-04-26 13:11:50

+0

这个问题有几个版本 - 我将这个[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

回答

1

不能获得对其他的应用程序控件直接访问(如按钮,复选框,列表和其他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); 
} 
+0

感谢Mikle的输入。让我至少在机器人课上尝试一下。所以至少我会有更好的数据与我的管理层分享。在过去,我尝试使用Perl自动化这种类型的案例,并且它在perl/python中很容易。但Java对我来说还是新手,所以我仍处于学习阶段。我不确定它会有多困难,但让我试一试。 – 2013-04-26 13:27:23

+0

java.awt.Robot非常容易编程。凝灰岩部分就像Mikle所提到的那样 - UI变化时会发生什么等。可以使数据轻松地在机器人中运行 - 使用属性文件告诉机器人该做什么(移动鼠标,单击,双击,发送按键等)你可以快速开始。但是稍后会有瓶颈:) – tgkprog 2013-04-26 13:54:39

+0

是的,您实际上需要自行尝试以确定Java是否适合您的需求:)无论如何,您可以使用Robot类轻松模拟真正的键盘按键和鼠标点击 - 请参阅小例子我已经添加到答案... – 2013-04-26 14:01:33

2

可能最好的方法是编写一个Java应用程序来记录用户在使用要测试的应用程序时所做的操作。

这意味着记录所有的鼠标移动和所有击键。

稍后,您的应用程序将播放所有鼠标移动和所有击键。

每当鼠标移动开始,鼠标移动结束,按键序列开始,按键序列结束时,您还必须将图像记录在显示器(屏幕)上。

您的Java应用程序必须将这些图像与播放过程中看到的图像进行比较。如果图像太不同,你的Java应用程序会抛出一个错误。祝你好运,确定差异太大了。

我几年前使用的工具有一个过程,用户可以浏览回放图像,并标出可能会更改的图像,如日期和时间显示。

如果您从链接的维基百科列表中选择了GUI testing tools之一,则您的时间会更好。有些是开源的,有些是专有的。

正如在生活中大多数事情,你是幸运的,如果你得到你所支付的,

+0

感谢吉尔伯特的回复。不幸的是,我不能使用任何现成的工具。即使我使用我也必须努力争取同样的认可。我的印象是编写用于安装任何应用程序的Java代码(如点击下一步,然后单击安装并捕获所有弹出窗口)并不困难。但看起来我必须真的想通过它找到一些简单或可行的解决方案。 Java没有提供其他选项来处理UI单击并获取UI文本。 – 2013-04-26 13:08:30

+0

查看机器人课程。 http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html即使是最有才华的Swing程序员,编写GUI测试人员也是极其困难的。如果我们将Stack Overflow的前十名Swing回答者聚集在一起,我们可能会在大约一年的时间内生成一个GUI测试者。 – 2013-04-26 13:15:25

+0

感谢您的链接。我会通过它。至少我必须在放弃之前做出最好的尝试。 – 2013-04-26 13:25:10