C++ 记录用于GUI测试的鼠标单击事件。什么比像素坐标更可靠?
我一直在编写一些GUI测试框架,通过记录鼠标和键盘事件并重放它们,可以记录和重放一些GUI用户场景 鼠标事件当前记录为C++ 记录用于GUI测试的鼠标单击事件。什么比像素坐标更可靠?,c++,qt,macros,mouse,gui-testing,C++,Qt,Macros,Mouse,Gui Testing,我一直在编写一些GUI测试框架,通过记录鼠标和键盘事件并重放它们,可以记录和重放一些GUI用户场景 鼠标事件当前记录为(按下或释放,(x,y))。然而,这是非常脆弱的,因为如果只有目标小部件移动了几个像素,但结构和其他一切保持不变,testcase就会停止工作 有什么更好的方法可以做到这一点?一些我能想到的事情 在小部件及其父小部件的树中记录目标小部件的“树路径”。即(按下或释放,(顶层、第一个子、第二个子、目标)),其中“子列表”是Qt的QObject子列表返回的内容。我认为这有一个缺点,即
(按下或释放,(x,y))
。然而,这是非常脆弱的,因为如果只有目标小部件移动了几个像素,但结构和其他一切保持不变,testcase就会停止工作
有什么更好的方法可以做到这一点?一些我能想到的事情
- 在小部件及其父小部件的树中记录目标小部件的“树路径”。即
,其中“子列表”是Qt的(按下或释放,(顶层、第一个子、第二个子、目标))
子列表返回的内容。我认为这有一个缺点,即现在的测试依赖于内部代码结构QObject
- 为每个可测试的小部件指定一个唯一的名称,并在重播时使用该名称搜索小部件。这似乎是一项不容忽视的开销
测试代码还具有关于特定事件分类的重要知识。例如,如果是在绘画程序的画布上单击,则单击的坐标本身可能很重要。否则,它可能是小部件中重要的特定视觉元素,而不是它的精确坐标。在后一种情况下,由于平台样式或代码更新而对小部件外观的更改可能会使相对坐标过时。我将采用两种方法的组合:基于层次和目标属性的方法。你需要为每个对象生成唯一的名称。我同意@vahancho的观点,如果你不打算使用基于坐标的系统(一种合理的方法),那么你必须找到另一种识别小部件的系统——唯一的命名方案是一种合理的选择。