AutoItX是AutoIt3提供的针对其它编程语言和开发环境的一个组件。该组件支持ActiveX/COM/DLL调用。因此,基于AutoIt3的这个feature,你完全可以摆脱其自带的开发环境,转而使用你擅长的编程环境通过调用AutoItX辅助完成自动化测试的任务。个人认为这是一个进步,更是广大工具粉丝的福音。
下面是一个在C#使用AutoItX的简单示例。
环境IDE:Visual Studio2010
新建一个命令行工程(Consol Application Project),打开功能的引用面板,选择COM中的AutoItX3 Type Library。
在代码中使用AutoItX的命名空间:using AutoItX3Lib;
然后New一个AutoItX3Class类的实例就可以调用诸如ControlClick之类的函数了。
示例代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using AutoItX3Lib; namespace AutoItXTest { class Program { static void Main(string[] args) { AutoItX3Lib.AutoItX3Class ai = new AutoItX3Class(); ai.Run(@"calc.exe"); ai.WinActivate("[CLASS:SciCalc]"); ai.ControlClick("", "", "[ID:125]"); } } } |
AutoItX3Class类的成员在对象浏览器(Object Browser)中查看如下,从这里可以看到AutoItX公开了那些方法。
还可以通过P/Invoke的方式在托管代码中是使用其中的静态方法,展示如下,注意DllImport的AutoItX.dll还有一个64位的版本,它们分别是:
C:\Program Files\AutoIt3\AutoItX\AutoItX3.dll或者64位上的版本——
C:\Program Files\AutoIt3\AutoItX\AutoItX3_x64.dll
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace AutoItXTest { class Program { public const int SW_SHOW = 6; public const int SW_SHOWDEFAULT = 7; public const int SW_SHOWMAXIMIZED = 8; public const int SW_SHOWMINIMIZED = 9; [DllImport("AutoItX3.dll", SetLastError = true, CharSet = CharSet.Auto)] static public extern int AU3_ControlClick([MarshalAs(UnmanagedType.LPWStr)] string Title , [MarshalAs(UnmanagedType.LPWStr)] string Text, [MarshalAs(UnmanagedType.LPWStr)] string Control , [MarshalAs(UnmanagedType.LPWStr)] string Button, int NumClicks, int X, int Y); [DllImport("AutoItX3.dll", SetLastError = true, CharSet = CharSet.Auto)] static public extern int AU3_Run([MarshalAs(UnmanagedType.LPWStr)]string Run , [MarshalAs(UnmanagedType.LPWStr)]string Dir, int ShowFlags); [DllImport("AutoItX3.dll", SetLastError = true, CharSet = CharSet.Auto)] static public extern void AU3_WinActivate([MarshalAs(UnmanagedType.LPWStr)]string Title , [MarshalAs(UnmanagedType.LPWStr)]string Text); [DllImport("AutoItX3.dll", SetLastError = true, CharSet = CharSet.Auto)] static public extern void AU3_Sleep(int Milliseconds); |
:
static void Main(string[] args) { AU3_Run("calc.exe", "", SW_SHOWMAXIMIZED); AU3_WinActivate("[CLASS:SciCalc]", ""); AU3_Sleep(2000); AU3_ControlClick("", "", "[ID:125]", "", 1, 0, 0); AU3_ControlClick("", "", "[ID:125]", "", 1, 0, 0); AU3_ControlClick("", "", "[ID:125]", "", 1, 0, 0); } |
啃一下代码:
唯一需要交代就是DllImport的静态方法列表可以通过AutoItX帮助文档找到,这里不再赘述。
在VBScript中将以创建COM对象的方式使用AutoItX的功能,如下是一段代码演示:
Set oShell = WScript.CreateObject("WScript.Shell") Set oAutoIt = WScript.CreateObject("AutoItX3.Control") oShell.Run "calc.exe", 1, FALSE oAutoIt.WinWaitActive "[CLASS:SciCalc]", "" oAutoIt.Send "1{+}1=" |
那么到底AutoItX提供了哪些COM对象可供使用呢,还是要参见AutoItX帮助文档,这里仅仅列出目录: