Console.WriteLine("Moving form"); SetFormPropertyValue("Location", new System.Drawing.Point(200,200)); SetFormPropertyValue("Location", new System.Drawing.Point(500,500));
Console.WriteLine("Resizing form"); SetFormPropertyValue("Size", new System.Drawing.Size(600,600)); SetFormPropertyValue("Size", new System.Drawing.Size(300,320));
我使用 Thread.Sleep 方法来暂停测试自动化以确保待测试应用程序已启动并运行。创建表示应用程序窗体类型的 Type 对象之后,我使用 Type.GetField 方法检索 Form 对象中指定字段(控件)的信息。然后调用 FieldInfo.GetType 方法获得表示想要操作的控件的 Type 对象。一旦拥有控件对象,我就可以像操作 Form 对象那样操作该控件对象,即获取控件的 PropertyInfo,然后调用 SetValue 方法。对于 SetFormPropertyValue,需要确保所有的属性更改都是在正确的线程中进行的。
请注意,测试自动化并不直接模拟极低水平的用户操作。例如,自动化并不模拟对 textBox1 控件的各次击键,而是直接设置 Text 属性。同样,自动化不模拟对 comboBox1 控件的点击,而是设置 SelectedItem 属性。这是我的测试自动化系统的一个设计缺陷。要采取那种方式测试,您可以按照 John Robbins 在前面提到的文章中的建议来做。
模拟用户在文本框和 Combobox 控件中键入颜色的操作之后,自动化会模拟点击按钮控件:
Console.WriteLine("Clicking button1"); InvokeMethod("button1_Click", new object[]{null, EventArgs.Empty} );
Console.WriteLine("\nClicking menu File->Exit in 5 seconds . . . "); Thread.Sleep(3500); InvokeMethod("menuItem4_Click", new object[] {null, new EventArgs()} );
James McCaffrey 就职于 Volt Information Sciences, Inc.,负责对在 Microsoft 工作的软件工程师进行技术培训。他参与开发多种 Microsoft 产品,包括 Internet Explorer 和 MSN Search。您可以通过 jmccaffrey@volt.com 或 v-jammc@microsoft.com 与 James 取得联系。