automationElement.RootElement.FindFirst始终返回null

时间:2018-06-19 20:15:56

标签: c# ui-automation

我有一个要求,可能需要使用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运行这些测试。

1 个答案:

答案 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");
    }