How to refresh child objects during test run (in desktop testing)?
There is a desktop window, which has more tabs, and some tabs include a text editor. I wrote a test which checks the functions of the text editor in the following way:
lprops := ['FullName','WndClass']; lvals := ['*Toolbar', 'TWPToolPanel']; ltarget := Aliases.(Application Name).Find(lprops,lvals,20,true); ltarget.button.Click;
I chose this way, because more elements in the object tree are cached and their mapping name is always changing. It properly works on any single tab of the window. Although, when I try to run the editor check more times in one test, the test fails after changing tab, because it searches the button on the previous tab. I tried Refresh and RefreshMappingInfo methods on the common parent object of the tabs, but they doesn't help. (The names and number of tabs can change in the window depending on the conditions.)
Is there any way to clear cached mapping tree during test run?
Thank you in advance for any suggestion!
Solved! Go to Solution.
Let me show you the simplified structure of the code:
The editor buttons have the following mapping on the first tab:
Window.PageControl.Tab1.Editor.Panel.Button2 and so on.
The editor buttons have the following mapping on the second tab:
Window.PageControl.Tab2.Editor.Panel.Button2 and so on.
(Sometimes the Editor and other objects between Panel and Buttons are cached and their mapping is not stable.)
The test looks like:
Window.PageControl.TabIndex := 1;
Window.PageControl.TabIndex := 2;
The editor_test looks like:
lprops := ['FullName','WndClass'];
lvals := ['*Panel', 'TWPToolPanel'];
ltarget := Aliases.(application name).Find(lprops,lvals,20,true);
ltarget.Button2.Click; (and so on)
Is there any mistake in the concept? Or is there any additional thing which can help refreshing?
Are tabs that are not active and their controls disposed of or continue to exist?
If they continue to exist then nothing in your code prevents TestComplete from finding a control on the inactive tab.
a) Change object addressing to search not from application, but from the tab root. E.g.
ltarget := Aliases.(Application Name).tab1.Find(lprops,lvals,20,true);
b) Add some other criterion (e.g. VisibleOnScreen) to the search conditions to prevent TestComplete from matching invisible controls.
Does this help?
/Alex [Community Champion]
[Community Champions] are not employed by SmartBear Software but
are just volunteers who have some experience with the tools by SmartBear Software
and a desire to help others. Posts made by [Community Champions]
may differ from the official policies of SmartBear Software and should be treated
as the own private opinion of their authors and under no circumstances as an
official answer from SmartBear Software.
The [Community Champion] signature is assigned on quarterly basis and is used with permission by SmartBear Software.
Since the original purpose was to create an editor test which is independent from the mapping route of the editor, I chose the second suggestion to try out.
It worked, so many thanks for your help! 😊