考虑代码
for(i = 0; i < 5; i++)
{
if(control.Exists)
{
mouse.Click(button);
}
}
在此,控件是一个弹出窗口。第一次执行时,control.Exists = true,第二次虽然控件存在,但它是假的。为什么会这样?如何使它成为现实?
提前致谢。
答案 0 :(得分:2)
程序经常绘制另一个控件的副本,它看起来与眼睛完全相同但却不同。因此,循环control
周围的第二次引用控件的旧版本,但它不再存在。
您的代码可能等同于
for(i = 0; i < 5; i++)
{
if(top.middle.control.Exists)
{
mouse.Click(top.middle.button);
}
}
UI控制层次结构中可能有更多级别,但有三个级别足以在此处进行解释。
正常修复是在使用控件之前找到控件的新副本。因此,将代码更改为
for(i = 0; i < 5; i++)
{
top.middle.Find();
if(top.middle.control.Exists)
{
mouse.Click(top.middle.button);
}
}
如果这不起作用,因为middle
也不可用,请使用top.Find();
。
要详细了解哪些控件可用,请尝试这样的代码,并观察屏幕的哪些部分用蓝色框突出显示。
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);
}
}
答案 1 :(得分:0)
改为使用TryFind(),并设置searchTimeout。
答案 2 :(得分:0)
您可以使用Inspect / UISpy检查控件的 RuntimeId 。我认为这是一种控制方式。 AdrianHHH的回复中描述的版本。
但是,让我最困惑的是我可以在第一次使用找到的控件,在以下循环中,虽然我的应用程序重新启动。