我必须为 Java“绘图”应用程序 GUI(如 ArgoUML/LaTeXDraw/等)自动生成测试。我需要验证被测试的应用程序是否正常运行。在我给出的示例中,我需要检查撤消/重做按钮是否正常工作 = 撤消将 Canvas 置于先前状态,重做将其再次置于原来的状态。
我已经知道我将如何解决这个问题,但我希望有经验的人提供反馈:
- 我应该使用 Robot 类来模拟 GUI 上的输入吗?或者 有更简单的方法吗?
我需要捕获程序的状态以供以后分析查看 如果程序的状态是一致的,我应该只是截图 窗口或者有没有办法遍历所有 JFrame 的 组件并捕获它们的属性(它应该包括 Canvas 状态)?
更重要的是,我不知道如何定位每个按钮 界面。告诉机器人给定的最简单的方法是什么 按钮在窗口中的某个 (x, y) 位置?我应该搜索吗 按钮的 .jpeg 版本中的像素?我应该找到每个 手动在界面上按钮(即为每个按钮创建一个类 包含 x, y 属性)?
- 最后,我从未将机器人“附加”到给定程序。能 我只是加载我要测试的软件的 .jar 文件并告诉 在那个窗口上操作的机器人?或者我需要和所有的人一起工作吗? 来自原始项目的源文件?
感谢您抽出时间,如果我的问题的任何部分不够清楚,请告诉我,我会尽力解释得更清楚。
P.S:欢迎任何关于我需要做的工作的建议:)
最佳答案
我已经 done你有什么explained在对其他答案的评论中。
Robot
可用于流程的各个部分,但取决于它的编写方式、遵循最佳测试实践的愿望以及总体需求,它可能会很快受到限制。如果您没有编写它或最佳编码实践使您无法访问或直接测试应用程序的各个方面,则需要其他方法。
根据我的经验,我使用反射来挖掘主要入口点以测试实际状态(如各种组件的文本值)。 Robot
只对我的案例有用,可以执行 key events .
最终,答案取决于许多因素:
- 机器人? - 当然,请根据您的需要使用它。
- 在满足要求的情况下做最简单的事情。如果屏幕截图可以,请执行(使用
Robot
)。如果您需要更多信息,可以get the componentsJFrame
或JPanel
并保存所提供的所有属性。 - 这可以通过调查 UI 以多种方式完成。找到按钮并执行
doClick
直接在上面,用Robot
移动鼠标并按下鼠标等。 - 当您实例化一个新的
机器人
时,它将链接到主设备。在简单的场景中,只需要new Robot().keyPress(KeyEvent.VK_ENTER);
考虑到这一切,存在像焦点这样的陷阱。最好开始模拟/测试并且不要触摸机器的任何外围设备。此外,根据某些方法的运行时间,您可能希望 Thread.sleep()
(遗憾的是我们这样做了)或使用连接线程。
关于java - 测试使用 Java Swing : best approach? 编码的应用程序 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41523541/