C# 初探UI Automation


最近研究自动化测试,看了一下UI Automation的微软例子,表示太老了,遇到各种问题,

UI Spy 好像已经被放弃了,可以用inspect.exe来代替,win10 的路径为:"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\inspect.exe"

这个用来查询automationId,

官网是以计算器例子,下面是在win10 修改后能运行版本


    class CalcAutomationClient
    {

         AutomationElement calWindow = null;//计算器窗口主窗口元素


         string resultTextAutoID = "CalculatorResults";
         string btn5AutoID = "num5Button";
         string btn3AutoID = "num3Button";
         string btn2AutoID = "num2Button";
         string btnPlusAutoID = "plusButton";
         string btnSubAutoId = "94";
         string btnEqualAutoID = "equalButton";
        static void Main(string[] args)
        {
            CalcAutomationClient autoClient = new CalcAutomationClient();
            AutomationEventHandler eventHandler = new AutomationEventHandler(autoClient.OnWindowOpenOrClose);
            Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, AutomationElement.RootElement, TreeScope.Children, eventHandler);
            Process.Start("calc.exe");
            Console.ReadLine();
        }

        private void OnWindowOpenOrClose(object sender, AutomationEventArgs e)
        {
            if (calWindow != null)
                return;
            if(e.EventId!=WindowPattern.WindowOpenedEvent)
            {
                return;
            }
            if(sender ==null)
            {
                Console.WriteLine("sender is null");
                return;
            }
            Thread.Sleep(1000);//此处必须等待一下,应该是计算器的等待计算器完全加载,不然控件 找不到
            AutomationElement sourceElement = null;
            sourceElement = sender as AutomationElement;
            Console.WriteLine(sourceElement.Current.Name);
            try
            {
                sourceElement = sender as AutomationElement;
                Console.WriteLine(sourceElement.Current.Name);
                if (sourceElement.Current.Name=="计算器")
                {
                    calWindow = sourceElement;
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("ex:" + ex.Message);
                return;
            }
            if(calWindow == null)
            {
                return;
            }
            ExcuteTest();
        }
        private  void ExcuteTest()
        {
            ExcuteButtonInvoke(btn2AutoID);
            ExcuteButtonInvoke(btnPlusAutoID);
            ExcuteButtonInvoke(btn3AutoID);
            ExcuteButtonInvoke(btnEqualAutoID);
            string rs = GetCurrentResult();
            Console.WriteLine(rs);
        }
        private  void ExcuteButtonInvoke(string automationId)
        {
            Condition conditions = new AndCondition(
                new PropertyCondition(AutomationElement.AutomationIdProperty,automationId),
                new PropertyCondition(AutomationElement.ControlTypeProperty,ControlType.Button));
            if (calWindow == null)
                return;
            AutomationElementCollection collection = calWindow.FindAll(TreeScope.Descendants, conditions);
            if (collection == null || collection.Count == 0)
                return;
            AutomationElement btn = collection[0];
            if (btn != null)
            {
                InvokePattern invokeptn = (InvokePattern)btn.GetCurrentPattern(InvokePattern.Pattern);
                invokeptn.Invoke();
            }
            Thread.Sleep(1000);
        }
        private string GetCurrentResult()
        {
            Condition conditions = new AndCondition(
                new PropertyCondition(AutomationElement.AutomationIdProperty, resultTextAutoID),
                new PropertyCondition(AutomationElement.ControlTypeProperty,ControlType.Text));
            AutomationElement text = calWindow.FindAll(TreeScope.Descendants, conditions)[0];
            return text.Current.Name;
        }
    }


  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UIAutomation 和 Pywinauto 都是针对 Windows 操作系统的 UI 自动化测试工具。 UIAutomation 是微软提供的一种用于 UI 自动化测试的框架。它支持 Windows 应用程序、Windows 10 应用程序和 Web 应用程序的 UI 自动化测试,同时也提供了一些非常强大的功能,例如 UI 交互测试、数据驱动测试、跨平台自动化测试等。使用 UIAutomation 时,需要使用 C# 或 VB.NET 编程语言编写测试脚本,并使用 Visual Studio 或 Visual Studio Code 或其他类似工具进行开发和调试。 Pywinauto 是一个基于 Python 的 UI 自动化测试框架,是 Python 社区中最受欢迎的 UI 自动化测试库之一。它支持 Windows 应用程序和控件的 UI 自动化测试,使用方便,功能强大,API 友好,能够通过自动生成代码、调试脚本等方式简化测试脚本代码的编写。测试人员只需要使用 Python 编程语言编写测试脚本,就可以快速构建 UI 自动化测试用例并在 Windows 操作系统下执行。 虽然 UIAutomation 和 Pywinauto 都是针对 Windows 操作系统的 UI 自动化测试工具,但是它们之间还是存在一些不同之处。例如,UIAutomation 支持 Web 应用程序、Windows 10 应用程序,而 Pywinauto 仅支持 Windows 应用程序和控件的测试。同时,UIAutomation 还提供了一些丰富的功能,例如跨平台自动化测试、数据驱动测试等,这些功能在 Pywinauto 中还没有实现。 综上所述,UIAutomation 和 Pywinauto 都是非常优秀的 UI 自动化测试工具,测试人员可以根据自己的需要选择使用其中的一种或两种工具来完成针对 Windows 操作系统的 UI 自动化测试工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值