PC端自动化测试(二)

PC端自动化测试(二)

测试对象:

  • 窗口
  • 菜单
  • 文件
1
2
3
4
5
6
7
8
9
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()

1
2
3
4
5
dlg.wrapper_object() # Dialog

menu.wrapper_object() # Menu

file.wrapper_object() # MenuItem

查看对象所支持的方法

dir()

1
dir(dlg.wrapper_object())

控件的文本内容获取

.texts()

1
file.texts() # ['文件']

获取子元素

.children()

1
2
3
dlg.children()
menu.children()
file.children()

获取控件的类名

.class_name()

1
menu.class_name()

获取控件的属性

menu.get_properties()

1
2
3
4
5
6
7
8
9
10
11
12
13
{
'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'
}

截图

截图窗口

1
2
pic = dlg.capture_as_image()
pic.save("dlg.png")

截图菜单

1
2
pic1 = menu.capture_as_image()
pic1.save("menu.png")

截图菜单项

1
2
pic3 = file.capture_as_image()
pic3.save("file.png")

菜单操作

  • 获取菜单的子菜单项
1
menu.items()
  • 通过下标去选择菜单项
1
menu.item_by_index(1)
  • 通过路径去选择菜单项
1
menu.item_by_path('文件->新建连接...')

菜单项的方法

  • 获取菜单项
1
file.items()
  • 点击菜单项
1
file.click_input()
  • 点击新建连接

需要先点击文件出现了「新建连接…」后再点击

1
2
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:重试时间间隔

例子

1
2
3
4
5
6
7
# 等待窗口处于可见状态
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:重试时间间隔

1
2
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 给执行函数传递关键字参数
1
from pywinauto.timings import wait_until,Timings
1
2
# 等待work返回的结果为5,继续往下执行
wait_until(10, 1, work, 15)
  • 讲全局计时设为默认
1
Timings.Defaults()
  • 时间延长,脚本执行速度降低为1/2(慢2倍)
1
Timings.slow()
  • 时间间断,所有计时器/2(快两倍)
1
Timings.fast()
 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
您的支持将鼓励我继续创作!