Welcome

首页 / 软件开发 / 数据结构与算法 / 测试运行: 使用Windows PowerShell实现UI自动化

测试运行: 使用Windows PowerShell实现UI自动化2012-01-09 MSDN James McCaffrey尽管问世时间相对较短,但 Windows PowerShellTM 已经成为我最喜爱的工具之一。我最近发现,Windows PowerShell 拥有创建小型库所需的全部功能,您可以使用这些功能编写超轻型的 UI 自动化代码。

在本月的专栏中,我将介绍如何创建一个小型的自定义 Windows PowerShell cmdlet 集合,以执行 Windows® UI 自动化任务。其中包括获得应用程序和控件的句柄、操作控件以及检查应用程序状态。在本次讨论中,我将假设您对 Windows PowerShell 以及对使用 C# 语言的 Microsoft® .NET Framework P/Invoke 机制调用 Win32® API 函数都有基本的了解。不过,即使您刚开始接触这些,稍微花点精力也能理解本专栏。

使用 Windows Powershell

对我而言,讲解如何使用 Windows PowerShell 完成超轻型 UI 自动化的要点的最简便方法是使用屏幕快照,如图 1 所示。外壳程序中的前几行输出只是表示我使用的是 Windows PowerShell。接下来的几行则表示正在注册我的自定义 cmdlet;这是由一个自定义启动脚本完成的,每当启动 Windows PowerShell 外壳的新实例时,就会运行此脚本。(我的启动脚本还会将当前的工作目录设置为 C:UIautomationWithPowerShell。)在本例中,我编写并注册了八个自定义 cmdlet 来实现超轻型 UI 自动化:get-window、get-control、get-controlByIndex、send-chars、send-click、get-listBox、send-menu 和 get-textBox。

图 1 使用 Windows PowerShell 实现 UI 自动化

然后,我发出以下命令来显示当前目录中以字母“t”开头的所有项目的名称:

复制代码

PS C:UIautomationWithPowerShell> get-childitem t* | select-object Name | format-table -auto
在图 1 中,输出内容告诉我,我有一个名为 TheAppToTest 的目录和一个名为 testScenario.ps1 的文件。这个文件是我的 Windows PowerShell 测试脚本。

get-childitem 命令是大约 130 个内置 Windows PowerShell cmdlet 中的一个。其中的很多 cmdlet 也都有别名。例如,get-childitem cmdlet 就有几个别名 — 它可以是“dir”(对于非常熟悉旧的 cmd.exe 命令外壳和 .bat 文件的人)、“ls”(对于习惯 UNIX 环境的工程师)及“gci”(命令行中一种简单方便的缩写)。

我的命令将 get-childitem 的输出用管道传送到 select-object cmdlet,我使用后者将结果筛选为最终只有文件和目录名属性。然后,我使用 -auto 开关将该结果用管道传送到 format-table cmdlet,以产生一个紧缩的显示。当然,我本可以只键入“get-childitem”(或它的别名之一),而不进行任何管道传送以接受命令的所有默认参数。

我可以在命令行输入命令 . estScenario.ps1 来调用我的测试脚本。请注意,与大多数脚本语言不同,在 Windows PowerShell 中,即使脚本位于当前的工作目录中,仍需要使用一个相对路径(像我做的那样)或完整路径来指定脚本的路径。这是为了安全起见。另外,默认情况下,Windows PowerShell 不允许执行脚本,所以,如果想要运行脚本,必须显式启动执行。您可以通过输入命令“get-executionpolicy”来检查当前的脚本执行策略,并通过输入带有参数“remoteSigned”或“unrestricted”的“set-executionpolicy”来修改该策略。

设置好后,特定系统上的执行策略对 Windows PowerShell 外壳和用户会话的所有新实例仍然有效。当我启动一个新外壳时,我的启动脚本(只是一个普通的 Windows PowerShell 脚本)实际上能够执行这一事实表明,我当前的执行策略允许执行脚本。