我有一个要求,可能需要使用UI自动化之类的东西,所以我试图学习基础知识,但是运气不高。
我在来自不同文章的几个示例中找到了这行代码:
var calcWindow = AutomationElement.RootElement.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.NameProperty, "Calculator"));
但是每当我运行此行时,calcWindow为null。我注意到当我运行2个计算器实例时,它将被设置为一个值。
同样的问题也适用于RootElement.FindAll,当计算器的一个实例运行时,它返回null,但是当我运行2个实例时,它将返回一个值并将其.Count()属性设置为1。
有什么想法吗?
谢谢。
更新1
我可能应该包括我正在看的文章:
请注意,我正在Windows 10 Pro 64位(操作系统内部版本:17134.112-版本:1803)上使用.NET 2015运行这些测试。
答案 0 :(得分:1)
在Windows 10中,计算器是UWP应用,因此您需要使用其他方法来找到它。
以下是FlaUI如何获得新计算器与旧计算器的示例。 FlaUI是在托管UIAv2 API和非托管UIAv3 COM包装器之上编写的。
protected override Application StartApplication()
{
if (OperatingSystem.IsWindows10())
{
// Use the store application on those systems
return Application.LaunchStoreApp("Microsoft.WindowsCalculator_8wekyb3d8bbwe!App");
}
if (OperatingSystem.IsWindowsServer2016())
{
// The calc.exe on this system is just a stub which launches win32calc.exe
return Application.Launch("win32calc.exe");
}
return Application.Launch("calc.exe");
}