自动化测试系列之pywinauto<二>

目录

9.控件操作

click_input()

right_click_input()

double_click_input()

texts()

window_text()

get_properties()

capture_as_image()

10.鼠标操作

11.键盘操作

send_keys()

type_keys()

12.菜单控件操作

items()

item_by_index()

item_by_path()

多层菜单选项的定位

13.列表控件的操作

get_items()

item_count()

get_item()

14.访问系统控制区域

9.控件操作

click_input()

函数作用:模拟鼠标左键的点击

app = Application(backend='uia').connect(process=8732)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")

#点击最大化按钮
win.child_window(title="最大化", control_type="Button").click_input()
right_click_input()

函数作用:模拟鼠标右键单击操作

app = Application(backend='uia').connect(process=8732)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")


#右键窗口
win.right_click_input()
double_click_input()

函数作用:模拟鼠标双击操作

app = Application(backend='uia').connect(process=8732)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")

menu = win['应用程序']

#双击菜单栏——达到窗口最大化目的
menu.double_click_input()
texts()

函数作用:用于获取窗口或控件中的所有文本内容,返回一个列表,其中每个元素是一个字符串,表示窗口或控件中的某个文本片段

app = Application(backend='uia').connect(process=2392)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")

print(win.texts())

window_text()

函数作用:用于获取窗口或控件的主文本内容,通常是指窗口的标题或主要显示的文本。它返回一个字符串

app = Application(backend='uia').connect(process=2392)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")

print(win.window_text())

get_properties()

函数作用:以字典形式返回控件的属性

capture_as_image()

函数作用:对窗口或控件进行截图,再通过save保存

win = app.window(title_re='.*Sublime Text.*')

#进行截图
pic=win.capture_as_image()

#进行保存,图片名为01.png
pic.save("01.png")

10.鼠标操作

在前面对控件操作的三个click函数中,允许通过指定 coords 参数来实现基于坐标的点击操作,如win.double_click_input(coords=(1043, 130)),但往往这种方法在实际操作时会出现偏差,导致无法精确的点击

因此pywinauto 提供了一个独立的 mouse 模块,专门用于模拟真实用户的鼠标事件

mouse 模块常见操作:

额外两个操作函数

rectangle() :获取元素对应坐标,返回矩形尺寸,具有top,left,right,bottom属性

mid_point() :获取元素中间位置坐标,返回类型为元组,元组中两个整数分别是X、Y轴的值

app=Application(backend="uia").connect(process=19652)
win=app.window(title_re=".*Sublime Text.*")
win.wait("exists")

# win.print_control_identifiers()

proc=win.child_window(title="应用程序", auto_id="MenuBar", control_type="MenuBar")
rect=proc.rectangle()
# print(rect)

#获取控件的中心坐标--手动计算,会有一定的误差
# width=rect.right-rect.left
# height=rect.bottom-rect.top
# print(f"{width}---{height}")
#
# width=math.floor(width/2)+rect.left
# height=math.floor(height/2)+rect.top
# mouse.move(coords=(width,height))

#通过mid_point直接得出控件的中心位置
# mid_point=rect.mid_point()
# mouse.move(coords=(mid_point.x,mid_point.y))

for i in proc.children():
    point=i.rectangle().mid_point()
    # #计算控件的中间位置
    # width=rect.right-rect.left
    # height=rect.bottom-rect.top

    mouse.click(coords=(point.x,point.y))
    time.sleep(1)
    mouse.click(coords=(point.x,point.y))
    time.sleep(1)

11.键盘操作

send_keys()

函数作用:键盘输入方法,可以直接将按键序列发送到当前具有焦点的窗口

而在实际的自动化场景中,我们通常需要针对特定的控件(如文本框、按钮等)进行精确的输入操作,而不是依赖于窗口的焦点状态,因此封装了下面的type_keys()

type_keys()

函数作用:是控件对象(例如 Edit 控件或 Button 控件)的专属方法,可以直接作用于指定的控件,确保输入内容精准无误。适合在复杂的用户界面中进行自动化操作

语法:

type_keys(

        keys,                                  # 要输入的键序列,可以是普通字符、特殊键或组合键

        pause = None,                   #每次按键后的延迟时间(秒)

        with_spaces = False,         # 如果为 True,则会在输入的字符串中保留空格。

        with_newlines = False,       #如果为 True,则会在输入的字符串中保留换行符。

... )

app=Application(backend="uia").connect(process=19652)

#定位窗口
win=app.window(title_re=".*Sublime Text.*")
win.wait("visible")

#在subText中输入文本 keys,pause with_spaces默认为False不保留空格,with_newlines,默认不保留换行
win.type_keys(keys="123456",pause=1)
win.type_keys(keys="123  456",with_spaces=False)
win.type_keys(keys="123\n456",with_newlines=True)

按键

其余的为输入正常英文字母或标点字符即可

win.type_keys("hello{SPACE}world")

#虚拟键码-ctrl+s
win.type_keys("^s")

win.type_keys("^a")
win.type_keys("{BACKSPACE}")
win.type_keys("{VK_DELETE}")

#合并使用
win.type_keys("^a{VK_DELETE}")

#指定重复次数
#shift(+) 输出括号----{SAPCE 5}表示按下5次space
win.type_keys("+9hello{SPACE 5}world+0")
win.type_keys("1{+}2=3")

#使用 {} 包裹特殊字符(如 {+} , {%} , {^} )以避免被识别为修饰符
win.type_keys("1{+}2=3")

12.菜单控件操作

items()

函数作用:返回对话框的菜单项,如果没有菜单项,则返回空列表

与children()方法比较:

1.items()底层调用的是children()方法

2.children()可以获取所有类型控件的子控件

3.items()只能获取菜单类型控件的菜单项

item_by_index()

函数作用:

查找索引指定的菜单项,其中参数填写的为下标,从0开始,也仅次于菜单控件查找菜单项

app = Application(backend='uia').connect(process=38544)
win = app.window(title_re='.*Sublime Text.*')
win.wait("visible")
menu = win['应用程序']

print(menu.items())

menu.item_by_index(0)
item_by_path()

函数作用:用户查找路径指定的菜单项

函数原型:

item_by_path(path, exact=False)

path :用于指定要选择的菜单项路径。

exact :设置为 True,则要求菜单项名称与路径中的名称完全匹配;如果为 False,则允许模糊匹配 路径可以是“MenuItem-> MenuItem-> MenuItem ...”形式的字符串,其中每个MenuItem是菜单该级别的项目文本。

menu_bar = win.child_window(title="应用程序", auto_id="MenuBar",control_type="MenuBar")
#选择保存文件File->Save   ----不区分大小写
save=menu_bar.item_by_path(path="File->Save")
point=save.rectangle().mid_point()
mouse.move(coords=(point.x, point.y))

#选择File->Reopen With Encoding --精确匹配,区分大小写
reopen=menu_bar.item_by_path(path="File -> Reopen with Encoding",exact=True)
point=reopen.rectangle().mid_point()
mouse.move(coords=(point.x, point.y))
多层菜单选项的定位

可以采用定位一个,点击下,调起新窗口,然后再定位Open Recent,再定位Clear Items的方式,进行由外往里的进行定位

win = app.window(title_re=".*Sublime Text.*")
win.wait("visible")
menu_bar = win.child_window(title="应用程序", auto_id="MenuBar",control_type="MenuBar")

#定位File菜单,并点击
file_menu = win.child_window(title="File",control_type="MenuItem")

#调起Open Recent窗口
menu_bar.item_by_path("File->Open Recent").click_input()

#定位到Open Recent窗口
openRecent_win = file_menu.child_window(title="Open Recent",control_type="Window")
openRecent_win.wait("visible")

#定位Open Recent窗口Clear Items菜单项
clear_items = openRecent_win.child_window(title="Clear Items", auto_id="31",
control_type="MenuItem")

point = clear_items.rectangle().mid_point()
mouse.move(coords=(point.x,point.y+30))
time.sleep(3)
mouse.click(coords=(point.x,point.y+30))

函数作用:用户查找路径指定的菜单项

函数原型:

menu_select(path, exact=False)

path :用于指定要选择的菜单项路径。
exact :设置为 True,则要求菜单项名称与路径中的名称完全匹配;如果为 False,则允许模糊匹配

menu_select在查找到菜单项后还会进行选择(点击操作)

13.列表控件的操作

get_items()

函数作用:获取列表视图中的所有项目

item_count()

函数作用:列表视图中的项数

get_item()

函数作用:返回列表视图中的指定项目,参数为row

app = Application(backend='uia').connect(process=9628)
win = app.window(title_re='.*文件资源管理器')
win.wait('visible')
data_list = win.child_window(auto_id="HomeListView", control_type="List")

#打印列表项
print("items:",data_list.get_items())

#打印列表项数量
print("items:",data_list.item_count())

#获取列表中第一项
print("items:",data_list.get_item(row=0))

14.访问系统控制区域

这个是系统通知区域,对于这个区域的访问,可以通过启动Explorer.exe这个程序

app=Application(backend="uia").connect(path="explorer")
app["任务栏"].print_control_identifiers()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值