測試對象:
窗口
菜單
文件
from pywinauto.application import Application
# 啓動Navicat
app = Application("uia").start(r"D:\Navicat for MySQL\navicat.exe")
# 選擇窗口
dlg = app["Navicat for MySQL"]
# 選擇菜單
menu = dlg["menu"]
# 選擇菜單項:文件
file = menu.child_window(title="文件")
查看控件類型
wrapper_object()
dlg.wrapper_object() # Dialog
menu.wrapper_object() # Menu
file.wrapper_object() # MenuItem
查看對象所支持的方法
dir()
dir(dlg.wrapper_object())
控件的文本內容獲取
.texts()
file.texts() # ['文件']
獲取子元素
.children()
dlg.children()
menu.children()
file.children()
獲取控件的類名
.class_name()
menu.class_name()
獲取控件的屬性
menu.get_properties()
{
'class_name': 'TActionMainMenuBar',
'friendly_class_name': 'Menu',
'texts': [''],
'control_id': 6555556,
'rectangle': <RECT L780, T151, R1980, B185>,
'is_visible': True,
'is_enabled': True,
'control_count': 6,
'is_keyboard_focusable': True,
'has_keyboard_focus': True,
'automation_id': '6555556'
}
截圖
截圖窗口
pic = dlg.capture_as_image()
pic.save("dlg.png")
截圖菜單
pic1 = menu.capture_as_image()
pic1.save("menu.png")
截圖菜單項
pic3 = file.capture_as_image()
pic3.save("file.png")
菜單操作
獲取菜單的子菜單項
menu.items()
通過下標去選擇菜單項
menu.item_by_index(1)
通過路徑去選擇菜單項
menu.item_by_path('文件->新建連接...')
菜單項的方法
獲取菜單項
file.items()
點擊菜單項
file.click_input()
點擊新建連接
需要先點擊文件出現了「新建連接...」後再點擊
file.click_input()
menu.item_by_path("文件->新建連接...").click_input()
等待
wait
wait_not
參數
wait_for:等待的狀態
exists 表示該窗口是有效句柄
visible 表示該窗口未隱藏
enabled 表示未禁用窗口
ready 表示該窗口可見並啓用
active 表示該窗口處於活動狀態
timeout:超時時間
retry_interval:重試時間間隔
例子
# 等待窗口處於可見狀態
new_dlg.wait(wait_for="ready",timeout=10,retry_interval=1)
print("等待通過,當前新建連接的窗口處於可見狀態")
# 等待窗口不處於可見狀態
new_dlg.wait_not(wait_for_not="ready",timeout=10,retry_interval=1)
print("等待通過,當前新建連接的窗口不處於可見狀態")
等待CPU閥值
wait_cpu_usage_lower
參數
threshold 該進程CPU佔用率
timeout:超時時間
retry_interval:重試時間間隔
app.wait_cpu_usage_lower(threshold=20,timeout=5,usage_interval=1)
print("等待通過,當前該進程cup佔用率低於%20")
timings模塊
wait_until方法:
Timeout 超時時間
retry_interval 重試時間
func 執行的函數
value 比較的值
Op 比較函數(默認爲相等)
args 給執行函數傳位置參數
kwargs 給執行函數傳遞關鍵字參數
from pywinauto.timings import wait_until,Timings
# 等待work返回的結果爲5,繼續往下執行
wait_until(10, 1, work, 15)
講全局計時設爲默認
Timings.Defaults()
時間延長,腳本執行速度降低爲1/2(慢2倍)
Timings.slow()
時間間斷,所有計時器/2(快兩倍)
Timings.fast()