pywinauto教程
1. 環境安裝
2. PC端元素定位工具介紹及判斷backend
先用win32試一試,出錯,改用uia試一試。記事本用uia出錯。
3. 啟動並創建一個實例對象
- 啟動
start(self, cmd_line, timeout=app_start_timeout) # 默認超時時間為5s
app = Application(backend = 'uia').start(r"E:\Office\Office14\EXCEL.exe")
- 連接
app = Application().connect(process=2341)
app = Application().connect(handle=0x010f0c)
app = Application().connect(path=“D:\Office14\EXCEL.exe”)
app = Application().connect(title_re=".*Notepad", class_name=“Notepad”)
4. 窗口、對話框及控件元素定位方式
- 窗口、對話框定位
wind_1 = app.窗口名或類名 # 只能適應於英文系統
wind_2 = app["窗口名或類名"] #適應於非英文系統
app.window(class_name = ‘Notepad’) # 關鍵字 title, title_re,class_name_re等
- 控件定位
可以通過print_control_identifiers()這個方法,來獲取這個窗口下的直接子控件
app["窗口名"]["控件名"] # 基於title定位
app.window(class_name = ’Notepad’).window(class_name = ‘#32770’) # 層級定位
app.window(class_name = ‘Notepad’).child_window(class_name = ‘#32770’)
app_window.children()[1].children()[0].children()[0] .children()[2] #定位用戶名輸入框控件(序號從0開始查)
5. 常用方法
- 窗口方法
dlg.minimize()
dlg.maximize()
dlg.restore()
dlg.close()
dlg.get_show_state() #最大化是1,正常是0
dlg.rectangle() # 返回窗口上下左右的xy坐標
- 調試定位控件
print_control_identifiers(depth = None, filename = None) #depth:打印的深度 filename:將返回的標識存成文件
draw_outline(colour =’green’,thickness = 2)
is_dialog 判斷是否為dialog
- 隱式等待
wait(wait_for, timeout = None, retry_interval = None) # visible,ready: visible + enable
wait_not(wait_for_not,timeout = None,retry_interval = None)
- 輸入框輸入
Dlg.control.type_keys(“xxxxx”)
- 菜單欄
app['窗口名或類名'].menu_select(Edit -> Replace)
- 鼠標點擊
pywinauto. mouse 需要導入此模塊
move(coords=(x軸坐標,y軸坐標))
mouse.click(button='left', coords=(40, 40)) # double_click
mouse.right_click(coords=(400, 400))
click()
check() 勾選checkbox
uncheck() 不勾選checkbox
is_checked(勾選返回true,為勾選返回false,不定返回None)
get_check_state() 返回checkbox的勾選狀態(0沒勾選,1勾選,2不定)
- 鍵盤操作
“+”:Shift
“^”:Control
“%”:Alt
from pywinauto.keyboard import send_keys
send_keys("^a") # 全選
send_keys("{VK_RETURN}") # 回車
實例:
from pywinauto import application
app = application.Application(backend="win32") # 默認為win32,設置成‘uia’出錯
app.start(r"notepad.exe")
app['Notepad'].wait('ready') # 'Notepad'為類名,用標題名“無標題 - 記事本”也可以,app.UntitledNotepad 也可以
app['Notepad'].menu_select("文件->頁面設置...") # 不用加“.click()”,已經點擊,“...”不能少
app['頁面設置']['ComboBox1'].select(4) # ComboBox1是第一個,ComboBox2是第二個,select從0開始
app['頁面設置']['ComboBox1'].select("A5") #直接選擇里面的項
app['頁面設置']['取消'].click() # 按鈕點擊
app['頁面設置']['Edit3'].set_edit_text("68") # Edit 置文本
app['頁面設置']['Edit2'].type_keys("86") # Edit 輸入按鍵(輸入的插入到前面)