我一直在编写一些 GUI 测试框架,它们可以通过记录鼠标和键盘事件并重放它们来记录和重放一些 GUI 用户场景。
鼠标事件当前记录为(press or release, (x, y))
. 但是,这是非常脆弱的,因为如果仅目标小部件移动了几个像素,但结构和其他一切都保持不变,则测试用例将停止工作。
有什么更好的方法来做到这一点?我能想到的一些事情
在小部件及其父小部件树中记录目标小部件的“树路径”。即
(press or release, (top level, first child, second child, destination))
,“子列表”是 Qt 的QObject
子列表返回的内容。我认为这有一个缺点,即现在的测试依赖于内部代码结构。给每个可测试的小部件一个唯一的名称,并在重放时使用该名称搜索小部件。这似乎是一个不可忽视的开销。
任何其他想法,以及普遍接受的“最佳”方法是什么?