• 使用UI Automation实现自动化测试5 (Winfrom和WPF中弹出和关闭对话框的不同处理方式)


    在使用UI AutomationWinformWPF的程序测试中发现有一些不同的地方,而这些不同来自于WinformWPF的处理机制不同。下面我们通过一个简单的实例来加以说明:

    实例描述

    我们使用InvokePattern来点击按钮弹出一个对话框,然后点击对话框中的“确定”按钮关闭对话框。

    两种方式对比

    首先我们使用如下代码来针对WinfomWPF分别进行测试:

    Code

             上面的代码主要是用来点击按钮,我们的目的是点击按钮弹出MessageBox,然后点击MessageBox中的“OK”按钮关闭此对话框。

    通过测试结果发现,上面的代码在WPF程序中完全可以通过,但是在Winform程序中,点击按钮弹出对话框之后发生阻塞现象,导致程序无法向下执行,所以我们通过如上代码视图点击MessageBox中的按钮来关闭此MessageBox将不可能实现,原因就在于Winform中的MessageBox弹出后就会出现阻塞现象,而WPF中使用了另一种处理方式(对此笔者解释的不够深刻,欢迎广大高手帮忙指正, 另外,此问题在Windows 7操作系统上面不会呈现,也可能与操作系统中API对UI Automation的支持有关)。

    解决方案

         那么我们通过什么方式来解决此问题呢?很多人会想到多线程,但是我们也可以通过发送异步消息来达到相应的效果。下面我们就通过多线程和发送异步消息的方式来方式来点击WinformMessageBox中的“OK”按钮,此方法同样可以点击WPFMessageBox中的按钮达到关闭对话框的效果。

    1.       多线程的方式

    Code

     

    1.       发送异步消息的方式

    Code

     

    相关FindWindow和FindElement代码:

    Code

     

              本节主要针对在非Window 7操作系统上面出现的有关WPFWinform中的MessageBox关闭问题作了简单的探讨。

     

  • 相关阅读:
    很有意思的“老黄历”网站
    ubuntu
    getopt在Python中的使用
    系统变量TERM不知是用来干什么的?它的值有vt100,vt220等,这些值代表什么意思?
    >/dev/null 2>&1
    linux下常用的ftp服务器软件
    Windows环境下访问NFS
    linux iSCSI target配置全过程
    iSCSI target在安全方面相关设定
    folly学习心得
  • 原文地址:https://www.cnblogs.com/kangyi/p/1590500.html
Copyright © 2020-2023  润新知