python进行简单的app自动化测试(pywinauto)+ 截屏微信二维码

一、开始需要了解准备

1、安装

pip install pywinauto

2、选择(后面会通过工具进行判断用哪个)

在这里插入图片描述

3、自动化控制进程的范围

在这里插入图片描述

示例

Application单进程
在这里插入图片描述

Desktop多进程

在这里插入图片描述

4、程序辅助检测工具

在这里插入图片描述
3中的下载连接
链接

点击放大镜拖到对应位置即可

二、简单的开始

1、打开应用程序

在这里插入图片描述

from pywinauto.application import Application# 打开指定的程序
### 1、打开自带的记事本
app = Application(backend="uia").start("notepad.exe")### 2、 打开qq r为转义符
app = Application(backend="uia").start(r"D:\qq\Bin\QQScLauncher.exe")

2、使用句柄工具

在这里插入图片描述
拖着放大镜到打开的应用上就可以看到信息
在这里插入图片描述

每次打开都会改变的

3、去连接你打开的应用程序(已经打开的窗口)

from pywinauto.application import Applicationif __name__ == '__main__':# 通过进程号进行连接# app = Application("uia").connect(process=16264)# print(app)# 通过窗口句柄进行连接app = Application("uia").connect(handle=265004)print(app)

4、如何选择对应的窗口

ps注意这里win32打不开就去换成uia

在这里插入图片描述

from pywinauto.application import Applicationif __name__ == '__main__':# 启动qqapp = Application("win32").start(r"D:\qq\Bin\QQ.exe")# 方式一 app[类名/标题]  推荐# 使用类名选择窗口dlg = app["TXGuiFoundation"]# 通过窗口标题# dlg = app["QQ"]# 方式二 app.类名# dlg = app.TXGuiFoundation# 打印窗口所有的控件dlg.print_control_identifiers()

5、窗口的操作方法

from pywinauto.application import Applicationif __name__ == '__main__':# 启动qqapp = Application("win32").start(r"D:\qq\Bin\QQ.exe")# 方式一 app[类名/标题]  推荐# 使用类名选择窗口# dlg = app["TXGuiFoundation"]# 通过窗口标题# dlg = app["QQ"]# 方式二 app.类名dlg = app.TXGuiFoundation# 打印窗口所有的控件dlg.print_control_identifiers()# 窗口最大化dlg.maximize()# 窗口最小化 就是窗口的-的意思 qq最小化托盘dlg.minimize()#恢复dlg.restore()# 获取窗口状态state = dlg.get_show_state()# 坐标rect = dlg.rectangle()# 关闭窗口dlg.close()

下面是坐标
在这里插入图片描述

三、简单案例

上述的资料我没了解太多,万事开头难,上去就给我报了太多错就不看他们的资料学习了,这里换了一套看着比较简单

这是视频地址

1、标题(title_re ,在已经打开的时候会用到)re代表正则

鼠标停留在任务栏中
在这里插入图片描述

2、小技巧(获取窗口)

from pywinauto.findwindows import find_elementsif __name__ == '__main__':# 查看当前窗口都有哪些可选中 或者替换为win32wins = find_elements(backend="uia")print(wins)

3、简单点击事件

注意要把微信移到最前面并且不能动鼠标

from pywinauto import Applicationif __name__ == '__main__':app = Application(backend="uia").connect(title_re="微信")# 查看窗口的对话框dlgs = app.windows()print(dlgs)#  进入对话框dlg = app.window(title="微信")# 找到对应文字btn = dlg['仅传输文件']# 点击事件btn.click_input()

4、显示选中的元素,用颜色框住

btn.draw_outline(colour='red')

from pywinauto import Applicationif __name__ == '__main__':app = Application(backend="uia").connect(title_re="微信")#  进入对话框dlg = app.window(title="微信")# 找到对应文字btn = dlg['登录']btn.draw_outline(colour='red')# 点击事件# btn.click_input()

5、使用工具定位

在这里插入图片描述

6、获取微信获取更多信息的版本

在这里插入图片描述

1、定位到按钮

from pywinauto.application import Applicationif __name__ == '__main__':app = Application(backend="uia").connect(title_re="微信")#  进入对话框dlg = app.window(title="微信")# 让微信还原到界面上dlg.restore()# 根据条件去匹配find_elements()函数中查看都有哪些字典值  dlg["设置及其他"]#  btn = dlg["设置及其他"]kwargs = {"title":"设置及其他"}btn = dlg.child_window(**kwargs)# 红圈btn.draw_outline(colour='red')
2、使用打印(不要动鼠标 不然打印白瞎)

由于现在1、中的这个设置会点击才可以展示,所以UISpy就定位不到对应的位置所以我们就打印


from pywinauto.application import Applicationif __name__ == '__main__':app = Application(backend="uia").connect(title_re="微信")#  进入对话框dlg = app.window(title="微信")# 让微信还原到界面上dlg.restore()# 根据条件去匹配kwargs = {"title":"设置及其他"}btn = dlg.child_window(**kwargs)#btn.draw_outline(colour='red')dlg.print_control_identifiers()

小技巧我们可以看到打印的内容,也就dlg.这个方法就可以定位到元素 dlg.child_window(**kwargs) 改为文字横线一样会定位到
在这里插入图片描述
新点出来的一般在上面,你从打印开头开始找找到就接着写

import timefrom pywinauto.application import Applicationif __name__ == '__main__':app = Application(backend="uia").connect(title_re="微信")#  进入对话框dlg = app.window(title="微信")# 让微信还原到界面上dlg.restore()# 根据条件去匹配btn = dlg["设置及其他"]#点击btn.click_input()dlg.child_window(title="设置", control_type="Button").click_input()
3、最后结果

在这里插入图片描述

import timefrom pywinauto.application import Applicationif __name__ == '__main__':app = Application(backend="uia").connect(title_re="微信")#  进入对话框dlg = app.window(title="微信")# 让微信还原到界面上dlg.restore()# 根据条件去匹配btn = dlg["设置及其他"]#点击btn.click_input()dlg.child_window(title="设置", control_type="Button").click_input()#  切换窗口app1 = Application(backend="uia").connect(title_re="设置")dlg = app1.window(title="设置")dlg.restore()btn1 = dlg["关于微信"]btn1.click_input()version = dlg.child_window(title_re = "微信 .*").texts()print(version)

7、微信文件助手发送消息

1、输入文字 选中窗口
import timefrom pywinauto.application import Application
from pywinauto.keyboard import send_keysif __name__ == '__main__':app = Application(backend="uia").connect(title_re="微信")#  进入对话框dlg = app.window(title="微信")# 让微信还原到界面上dlg.restore()# 根据条件去匹配btn = dlg["聊天"]btn.click_input()dlg.child_window(title="搜索").click_input()send_keys("文件传输助手")dlg.child_window(title="文件传输助手", control_type="ListItem").click_input()# 选中文件传输助手 第二种方案"""dlg.set_focus()  # 激活窗口time.sleep(1)send_keys("{ENTER}")"""
2、发送

这边看发送定位按钮自己去点击即可,这边就不写了,自己玩玩吧

8、打开软件并且进行点击注册账号

import timefrom pywinauto.application import Application
from pywinauto.keyboard import send_keysif __name__ == '__main__':# 启动qqapp = Application("uia").start(r"D:\qq\Bin\QQScLauncher.exe")time.sleep(1)con = app.connect(title_re = "QQ")qq = con.window(title="QQ")qq.child_window(title="注册帐号", control_type="Button").click_input()

四、截屏微信登录二维码

注意需要把界面app拿出来到页面上哦


from pywinauto.application import Application
from PIL import ImageGrabif __name__ == '__main__':# 启动qqapp = Application("uia").connect(title = "微信")wx = app.window(title="微信")rect = wx.child_window(title="二维码").rectangle()### 截屏坐标  不加参数就是全屏截图screenshot = ImageGrab.grab(bbox=(rect.left, rect.top, rect.right, rect.bottom))### 展示图片是阻塞方法x掉后才会进行后面screenshot.show()

五、切换页面(模拟 Alt + Tab 切换窗口)

from pywinauto.keyboard import send_keys
# 模拟 Alt + Tab 切换窗口
send_keys('%{TAB}')

六、窗口顶置

import win32gui
import win32con# 获取目标窗口的句柄hwnd = win32gui.FindWindow(None, "QQ")  # 替换为你要置顶窗口的标题# 将目标窗口置顶if hwnd:win32gui.ShowWindow(hwnd, win32con.SW_SHOW)win32gui.SetForegroundWindow(hwnd)

七、不用time.sleep等待元素出现

此方法本人没尝试 大概是可以的 也就是循环去判断元素是否出现没啥难度 自己也可以实现

from pywinauto import application
from pywinauto.timings import wait_until, TimeoutError# 启动应用程序
app = application.Application().start('notepad.exe')# 定义等待条件
def element_exists():try:# 尝试获取元素,如果找到就返回 Trueapp['Untitled - Notepad'].Editreturn Trueexcept Exception as e:return False# 等待直到元素出现,最长等待时间为10秒 每隔0.5查一下
try:wait_until(10, 0.5, element_exists)print("元素出现了!")
except TimeoutError:print("超时,未找到元素")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/340541.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数指针和回调函数

文章目录 一.函数指针1.什么是函数指针2.函数指针的形式3.函数指针的用途。1.调用函数2.作为参数进行传递 二.函数指针数组三.回调函数 一.函数指针 1.什么是函数指针 函数指针是指向函数的指针。在C语言和C中,函数指针可以用来存储函数的地址,并且可以…

RT-Thread:STM32实时时钟 RTC开启及应用

说明:STM32F103/407系列基于 RT-Thread 系统的 RTC 开启及应用 应用流程介绍。 1. RTC功能开启 1.1 开启系统RTC驱动 1.2 打开系统RTC相关的宏 1.3 打开库函数 RTC 相关的宏 完成以上系统配置,编译无误情况下RTC 就已经开启了。 2. RTC 应用 官方 AP…

爬虫01-爬虫原理以及爬虫前期准备工作

文章目录 1 爬虫基本原理什么是爬虫爬虫功能详解爬虫基本流程两个概念:request和response 2 一些问题爬虫能抓取什么样的数据?抓取的数据怎么提取部分内容?数据解析方式。为什么我爬虫抓取的数据和浏览器看到的不一样怎样解决JavaScript渲染的…

B端产品经理学习-如何进行埋点

目录: 为什么要做埋点 如何埋点 埋点的设计流程 B端埋点的注意事项 在B端产品中,前端负责向用户呈现结果,后端负责存储计算 两种追踪需求 业务追踪 用户执行了哪些业务动作 行为追踪 用户在界面做了哪些事情 前后端分开后&#xff0…

语义解析:如何基于SQL去实现自然语言与机器智能连接的桥梁

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 语义解析 定义 作用 语义解析的应用场景 场景一: 场景二: 总结语…

创建型模式 | 工厂模式

文章目录 一、简单工厂1.1、原理1.2、核心角色1.3、UML类图1.4、代码实现1.5、总结 二、工厂模式2.1、原理2.2、关键角色2.3、代码实现2.4、总结 三、抽象工厂模式3.1、原理3.2、关键角色3.3、UML类图3.4、工厂模式与抽象工厂模式的区别 前言 工厂模式是最常用的设计模式之一&a…

C#用正则表达式获取字符串中汉字的数量

目录 一、关于字符串和判断其组成常识 二、用正则表达式获取字符串中汉字的数量 1.字符是否为汉字的正则表达式 2.实例 3.生成结果 三、相关知识点 1.Regex.IsMatch 方法 一、关于字符串和判断其组成常识 字符串中可以包括数字、字母、汉字或者其他字符。使用Char类型的…

pyhon中File对象的属性及如何读取DBF文件

pyhon中File对象的属性 一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。 以下是和file对象相关的所有属性的列表: 如下实例: #!/usr/bin/python# 打开一个文件 fo open("foo.txt", "wb&quo…

HarmonyOS自定义组件生命周期函数介绍

aboutToAppear 在创建自定义组件的新实例后,在执行其build()函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build()函数中生效。 aboutToDisappear 在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变…

【K8S 存储卷】K8S的存储卷+PV/PVC

目录 一、K8S的存储卷 1、概念: 2、挂载的方式: 2.1、emptyDir: 2.2、hostPath: 2.3、NFS共享存储: 二、PV和PVC: 1、概念 2、请求方式 3、静态请求流程图: 4、PV和PVC的生命周期 5、…

scratch考试“画图”相关考点一网打尽

最近2023年12月17日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第3题—六花阵图 在讲解这个题目,可以延申scratch所有的基础图形,学会这篇,碰到关于“图形”类题目基本上都可以搞定 六花阵图 编程实现: 六花阵图。 注意:六花阵图必须使用画笔绘制,画面中不允…

Vue 自定义仿word表单录入之日期输入组件

因项目需要&#xff0c;要实现仿word方式录入数据&#xff0c;要实现鼠标经过时才显示编辑组件&#xff0c;预览及离开后则显示具体的文字。 鼠标经过时显示 正常显示及离开时显示 组件代码 <template ><div class"paper-input flex flex-col border-box "…