PC端自動化測試(二)

測試對象:

  • 窗口

  • 菜單

  • 文件

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

參數

  1. wait_for:等待的狀態

  • exists 表示該窗口是有效句柄

  • visible 表示該窗口未隱藏

  • enabled 表示未禁用窗口

  • ready 表示該窗口可見並啓用

  • active 表示該窗口處於活動狀態

  1. timeout:超時時間

  2. 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

參數

  1. threshold 該進程CPU佔用率

  2. timeout:超時時間

  3. 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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章