使用UI Automation实现自动化测试--4.3 (InvokePattern)

InvokePattern

InvokePatternUIA中最常用的Pattern之一,WPFWinform中的button控件都支持InvokePattern

InvokePatternInvoke()方法的调用应立即返回,没有出现阻止情况。但是,此行为完全依赖于 Microsoft UI 自动化提供程序实现。在调用 Invoke() 会引起阻止问题(如Winform中的模式对话框,但是WPF中的对话框的处理方式和winform不同,所以可以使用Invoke()方法来操作WPF中的模式对话框,因为WPF中的模式对话框不会出现阻止的问题)的情况下,要调用此方法,则需要另起线程来操作。


Code

被测程序xaml代码如下:
Code

对应的cs文件:
Code
      本文主要针对InvokePattern的Invoke方法来操作button控件。
posted @ 2009-09-13 16:06 开着拖拉机 阅读(1761) 评论(2) 编辑 收藏

 回复 引用 查看   
#1楼2009-09-13 17:47 | lixiong      
关于您提到的
在调用 Invoke() 会引起阻止问题

原因是UIAutomation对于WPF的实现是native的, 通信是通过named pipe

对于WinForm等Win32的实现是DCOM Message, 也就是Windows Message, 所以需要message pump

不过无论如何, 把test client中的main thread标记为STAThread, 都因该没有问题

希望作者能多介绍下UI Automation中更多的知识, 比如UI Event怎么用,还有常见的问题, 比如timming issue等

 回复 引用 查看   
#2楼[楼主]2009-09-13 20:45 | 开着拖拉机      
@lixiong
在调用 Invoke() 会引起阻止问题
此问题困扰我很久,谢谢解答,对于UI Automation中的UI Event我接触的比较少,实在抱歉,但我会尽自己最大的努力,还望多多帮忙啊