如何使用 TestComplete 在桌面测试中刷新子对象

问题描述

一个桌面窗口,里面有更多的标签,有些标签包括一个文本编辑器。 编辑器按钮在第一个选项卡上具有以下映射(此处简化):

Window.PageControl.Tab1.Editor.Panel.Button1
Window.PageControl.Tab1.Editor.Panel.Button2 and so on.

编辑器按钮在第二个选项卡上具有以下映射(此处简化):

Window.PageControl.Tab2.Editor.Panel.Button1
Window.PageControl.Tab2.Editor.Panel.Button2 and so on.

(有时编辑器和编辑器和面板之间的其他对象会被缓存并且它们的映射不稳定。)

我编写了一个测试,它通过以下方式检查文本编辑器的功能

Window.PageControl.TabIndex := 1;
editor_test;
Window.PageControl.TabIndex := 2;
editor_test;

editor_test 看起来像:

Window.PageControl.Refresh;

lprops := ['FullName','WndClass'];
lvals := ['*Panel','TWPToolPanel'];
ltarget := Aliases.(application name).Find(lprops,lvals,20,true);

ltarget.Button1.Click;
ltarget.Button2.Click...

editor_test 在窗口的任何单个选项卡上都能正常工作。虽然,当我尝试在一个测试中多次运行 editor_test 时,更改选项卡后测试失败,因为它搜索一个选项卡上的按钮。 我在选项卡的公共父对象上尝试了 Refresh 和 RefreshMappingInfo 方法(见上文),但它们没有帮助。 (选项卡的名称数量可以根据条件在窗口中更改。)

在测试运行期间有没有其他方法可以清除缓存的映射树?这个概念有什么错误吗?

预先感谢您的任何建议!

解决方法

解决方案是通过以下方式补充编辑器测试:

lprops := ['FullName','WndClass','VisibleOnScreen'];
lvals := ['*Panel','TWPToolPanel',true];

使用此功能,TestComplete 无法识别窗口的非活动选项卡上的编辑器按钮,这在原始场景中发生。