首页 > 代码库 > UIAutomation 测试winForm

UIAutomation 测试winForm

 static void Main(string[] args)        {            Console.WriteLine("\n开始窗口程序自动化测试\n");            //启动被测试程序            string path = @"程序路径";            Process p = Process.Start(path);            //自动化跟元素            AutomationElement desktop = AutomationElement.RootElement;            //查找主窗体方法1            //Thread.Sleep(2000);            //AutomationElement aeForm = AutomationElement.FromHandle(p.MainWindowHandle);            AutomationElement aeForm;            //方法2            int numWaits = 0;            do            {                Console.WriteLine("等待测试窗口……");                //查找第一个自动化元素                aeForm = desktop.FindFirst(TreeScope.Children, new PropertyCondition(                AutomationElement.NameProperty, "Form1"));                ++numWaits;                Thread.Sleep(100);            } while (null == aeForm && numWaits < 50);            if (aeForm == null)                throw new NullReferenceException("找不到测试窗口!");            else                Console.WriteLine("找到测试窗口~");            //找到第一个Button            AutomationElement aeButton = aeForm.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "btnCalc"));                        //找到所有textbox控件            AutomationElementCollection aeAllTextBoxs=aeForm.FindAll(TreeScope.Children,new PropertyCondition(AutomationElement.ControlTypeProperty,ControlType.Edit));            AutomationElement aeText3 = aeAllTextBoxs[0];//集合的索引和控件位置相反            AutomationElement aeText2 = aeAllTextBoxs[1];            AutomationElement aeText1 = aeAllTextBoxs[2];            ValuePattern vpText1 = (ValuePattern)aeText1.GetCurrentPattern(ValuePattern.Pattern);            vpText1.SetValue("300");            ValuePattern vpText2 = (ValuePattern)aeText2.GetCurrentPattern(ValuePattern.Pattern);//把控件转换成Value模式            vpText2.SetValue("500");            Thread.Sleep(500);            //通过InvokePattern模拟点击按钮            InvokePattern ipbtnCalc = (InvokePattern)aeButton.GetCurrentPattern(InvokePattern.Pattern);//把控件转换成Invoke模式            ipbtnCalc.Invoke();            Thread.Sleep(500);          //  Console.ReadKey();                        //验证实际结果和预期结果是否相符            TextPattern tpText3 = (TextPattern)aeText3.GetCurrentPattern(TextPattern.Pattern);//把控件转换成Text模式            string actual= tpText3.DocumentRange.GetText(-1);            // string actual = tpText3.DocumentRange.GetText(2);//getext中的值要>=返回结果的长度,才可以取全值.方便起见-1也可以取全值            string expect = "800";            if (actual == expect)            {                Console.WriteLine("【实际值】=" + actual);            }            else {                Console.WriteLine("【实际值】="+actual+";【期望值】"+expect);            }            Thread.Sleep(5000);            WindowPattern wpCloseForm = (WindowPattern)aeForm.GetCurrentPattern(WindowPattern.Pattern);            wpCloseForm.Close();            Console.WriteLine("\n测试结束\n");            Console.ReadKey();        }

 MS提供的控件Pattern
 
DockPattern                              
ExpandCollapsePattern

GridPattern                                 
GridItemPattern

InvokePattern                             
MultipleViewPattern

RangeValuePattern 

ScrollPattern
ScrollItemPattern

SelectionPattern

SelectionItemPattern                 

TablePattern
TableItemPattern                       

TextPattern
TogglePattern                           

TransformPattern
ValuePattern

WindowPattern