在我的测试应用程序中,我不断地打开和重新打开一个表单。每次打开表单时,我必须将表单上的所有元素都放入一个AutomationElementCollection
,以便我可以对元素进行操作。但是,重复获取这些元素似乎很昂贵(由于树导航/上下文切换等)。
我试图围绕获取元素的方法设置一个布尔值。如果第一次调用该方法,它将正常运行,并将布尔值设置为 true。如果该方法被第二次调用,它将什么也不做,因为数组已经被填充了。
但是,当我尝试对AutomationElement
数组中的任何一个(第二次)执行操作时,这些元素似乎不可用。关闭表单是否会以某种方式“禁用”这些元素?每次打开表单时我都必须找到这些元素,以使它们“新鲜”吗?
我看了看CacheRequest
方法,但这似乎只与访问属性/模式有关,而不是与元素有关。
这是代码/错误消息:
AutomationElement GAP;
AutomationElementcollection GAP1;
private bool initGAP1 = false;
public void initGAP()
{
if (!initGAP1)
{
int refnum = ...;
int refnum2 = ...;
AutomationElementCollection temp = MMChildren[refnum].FindAll(TreeScope.Children, findCondition);
GAP = temp.FindAll(TreeScope.Children, findCondition)[refnum2];
GAP1 = GAP.FindAll(TreeScope.Children, findCondition); //this contains the elements I want to operate on
initGAP1 = true;
}
}
System.Windows.Automation.ElementNotEnabledException:引发了“System.Windows.Automation.ElementNotEnabledException”类型的异常。