用python進行應用程式自動化測試(uiautomation)

覆手為雲p發表於2017-08-28

 

        本文主要用到一個uiautomation的開源框架,是一個我們們中國人寫的,支援MFC,Windows Forms,WPF,Metro,Qt介面;此文主要是自己的個人總結,開源作者原文:http://www.cnblogs.com/Yinkaisheng/p/3444132.html

 

        此自動化的主要思想是利用此框架抓取到程式的各種控制程式碼,然後對控制程式碼執行各種操作。

 

一、uiautomation方法

1、WindowContrl(searchDepth,ClassName,SubName)          查詢視窗中的程式,如果有中文則需用Unicode;可用window.Exists(maxSearchSeconds)來判斷此視窗是否存在;

2、EditControl(searchFromControl)                 查詢編輯位置,找到後可用DoubleClick()來改變電腦的focus;edit.SetValue("string")輸入值;

3、Win32API.SendKeys("string")                      如果已在編輯位置,則可用此方法來輸入值,{Ctrl}為ctrl鍵,其他類似;{@  8}格式可輸入8個@,對於數字也可實現此功能,但對於字母不能...;

4、MenuItemControl(searchFromControl,Name)                   查詢選單按鈕;

5、ComboBoxControl(searchFromControl,AutomationI)       查詢下拉框,然後在此基礎上用Select("name")方法來選擇需要的選項;

6、BottonControl(searchFromControl,Name,SubName)        查詢按鈕;

7、automation.FindControl(firefoxWindow,

                           lambda c:(isinstance(c, automation.EditControl) or isinstance(c, automation.ComboBoxControl)) and c.Name == 'Enter your search term'

                           ) 按條件搜尋handle

 

二、對找到控制程式碼常用操作

Click()            點選;

RighClik()       右鍵點選;

SendKeys()     傳送字元;

SetValue()      傳值,一般對EditControl用;

 

三、對windows程式常用操作

subprocess.Popen('Name')    用程式開啟程式;

window.Close()            關閉視窗;

window.SetActive()           使用;

window.SetTopMost()       設定為頂層

window.ShowWindow(uiautomation.ShowWindow.Maximize)  視窗最大化

window.CaptureToImage('Notepad.png')  截圖;

 

uiautomation.Win32API.PressKey(uiautomation.Keys.VK_CONTROL)    按住Ctrl鍵

uiautomation.Win32API.ReleaseKey(uiautomation.Keys.VK_CONTROL) 釋放Ctrl鍵

automation.GetConsoleWindow()      #return console window that runs python,開啟控制檯

automation.Logger.ColorfulWriteLine('\nI will open <Color=Green>Notepad</Color> and <Color=Yellow>automate</Color> it. Please wait for a while.')  控制檯傳值(彩色字型),普通傳值用WriteLine;

automation.ShowDesktop() 顯示桌面;

 

四、控制程式碼的抓取

直接執行automation模組列舉視窗時,支援下列引數(從doc視窗執行automation.py程式 ):

-t intValue     延遲列舉時間,單位秒

-r                  從樹的根部列舉,如果不指定,從當前視窗列舉

-d intValue    列舉控制元件樹的的深度,如果不指定,列舉整個樹

-f                  從焦點控制元件列舉,如果不指定,從當前視窗列舉

-c                  從游標下的控制元件列舉,如果不指定,從當前視窗列舉

-a                  獲取游標下控制元件及其所有父控制元件

 

-n                 顯示控制元件的完整Name, 如果不指定,只顯示前30個字元

-m                顯示控制元件更多屬性,預設只顯示控制元件的四個屬性

示例:

automation.pyc –t3, 3秒後列舉當前視窗所有控制元件

automation.pyc –d2 –t3, 3秒後列舉當前視窗前三層控制元件

automation.pyc –r –d1 –t0 -n, 0秒後從根部列舉前兩層控制元件,並顯示控制元件完整名稱

automation.pyc –c –t3, 3秒後顯示滑鼠游標下面的控制元件資訊

 

相關文章