consider the code
for(i = 0; i < 5; i++)
{
if(control.Exists)
{
mouse.Click(button);
}
}
In this, control is a popup
You can use Inspect/UISpy to check the RuntimeId of the control. I think it's kind of controls' version described in AdrianHHH's reply.
But, what confuses me most is that I can use the found control in the first time, in the following loops, Although my application is restarted.
Programs often draw another copy of a control, it looks identical to the eye but it is different. Hence the second time around the loop control
refers to the old version of the control but it is no longer present.
Your code is likely to be equivalent to
for(i = 0; i < 5; i++)
{
if(top.middle.control.Exists)
{
mouse.Click(top.middle.button);
}
}
There may be more levels in the UI Control hierarchy but three is enough for the explaination here.
The normal fix is to find the new copy of the control before using it. So change the code to be
for(i = 0; i < 5; i++)
{
top.middle.Find();
if(top.middle.control.Exists)
{
mouse.Click(top.middle.button);
}
}
If that does not work, because middle
is also not available, then use top.Find();
.
To learn more about which controls are available or not, try code like this and observe which parts of the screen are highlighted with blue boxes.
for(i = 0; i < 5; i++)
{
top.DrawHighLight();
top.middle.DrawHighLight();
top.middle.control.DrawHighLight();
if(top.middle.control.Exists)
{
mouse.Click(top.middle.button);
}
}
Use TryFind() instead, and set the searchTimeout.