AutomationElement 还活着?
AutomationElement is still alive?
我正在使用 Microsoft UI Automation,但遇到了一些问题,其中之一是我想知道 AutomationElement 是否仍然存在。更准确地说,我想检查 window 是否已关闭。我认为这是此类问题最常见的情况,我尝试了不同的场景,最终得到了一个解决方案,我尝试访问元素的不同属性并查看它是否抛出 ElementNotAvailableException。我还偶然发现了一个名为 IsOffscreen 的 属性,它在这种情况下似乎非常有用。但是,由于我在网上找不到太多相关信息,所以我想知道是否有更好的解决方案。最近几天我对这个框架不太满意,因为它对我来说似乎很不稳定(尤其是在寻找 AutomationElement 时)。也许您可以帮助我在实施过程中获得更多专业知识。
非常感谢
马塞尔
在获取 AutomationElement 之前,您可能会捕获 ElementNotAvailableException
try
{
var info = automationElement.Current;
var name = info.Name;
}
catch (ElementNotAvailableException) {}
我会把它包装在一个扩展中:
public static bool Alive(this AutomationElement ae)
{
try
{
var t = ae.Current.Name;
return true;
}
catch(ElementNotAvailableException)
{
return false;
}
}
我正在使用 Microsoft UI Automation,但遇到了一些问题,其中之一是我想知道 AutomationElement 是否仍然存在。更准确地说,我想检查 window 是否已关闭。我认为这是此类问题最常见的情况,我尝试了不同的场景,最终得到了一个解决方案,我尝试访问元素的不同属性并查看它是否抛出 ElementNotAvailableException。我还偶然发现了一个名为 IsOffscreen 的 属性,它在这种情况下似乎非常有用。但是,由于我在网上找不到太多相关信息,所以我想知道是否有更好的解决方案。最近几天我对这个框架不太满意,因为它对我来说似乎很不稳定(尤其是在寻找 AutomationElement 时)。也许您可以帮助我在实施过程中获得更多专业知识。
非常感谢
马塞尔
在获取 AutomationElement 之前,您可能会捕获 ElementNotAvailableException
try
{
var info = automationElement.Current;
var name = info.Name;
}
catch (ElementNotAvailableException) {}
我会把它包装在一个扩展中:
public static bool Alive(this AutomationElement ae)
{
try
{
var t = ae.Current.Name;
return true;
}
catch(ElementNotAvailableException)
{
return false;
}
}