使用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关闭问题作了简单的探讨。

 

原文地址:https://www.cnblogs.com/kangyi/p/1590500.html