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 Application

if __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 Application


if __name__ == '__main__':
    # 启动qq
    app = 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 Application


if __name__ == '__main__':
    # 启动qq
    app = 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_elements

if __name__ == '__main__':
    # 查看当前窗口都有哪些可选中 或者替换为win32
    wins = find_elements(backend="uia")
    print(wins)

3、简单点击事件

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

from pywinauto import Application

if __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 Application

if __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 Application

if __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 Application

if __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 time

from pywinauto.application import Application

if __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 time

from pywinauto.application import Application

if __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 time

from pywinauto.application import Application
from pywinauto.keyboard import send_keys

if __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 time

from pywinauto.application import Application
from pywinauto.keyboard import send_keys

if __name__ == '__main__':
    # 启动qq
    app = 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 ImageGrab

if __name__ == '__main__':
    # 启动qq
    app = 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:
        # 尝试获取元素,如果找到就返回 True
        app['Untitled - Notepad'].Edit
        return True
    except Exception as e:
        return False

# 等待直到元素出现,最长等待时间为10秒 每隔0.5查一下
try:
    wait_until(10, 0.5, element_exists)
    print("元素出现了!")
except TimeoutError:
    print("超时,未找到元素")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端页面优化做的工作

1.分析模块占用空间 new (require(webpack-bundle-analyzer).BundleAnalyzerPlugin)() 2.使用谷歌浏览器中的layers,看下有没有影响性能的模块,或者应该销毁没销毁的 3.由于我们页面中含有很大的序列帧动画,所以会导致页面性能低&#xff0…

合并 K 个升序链表[困难]

一、题目 给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如…

Maven 依赖管理项目构建工具 教程

Maven依赖管理项目构建工具 此文档为 尚硅谷 B站maven视频学习文档,由官方文档搬运而来,仅用来当作学习笔记用途,侵删。 另:原maven教程短而精,值得推荐,下附教程链接。 atguigu 23年Maven教程 目录 文章目…

2024-01-11 部署Stable Diffusion遇挫记

点击 <C 语言编程核心突破> 快速C语言入门 部署Stable Diffusion遇挫记 前言一、一如既往的GitHub部署二、使用的感受总结 create by Stable Diffusion; prompt: fire water llama 前言 要解决问题: 由于近期的努力, 已经实现语音转文字模型, 通用chat迷你大模型的本地…

适配 IOS 安全区域

安全区域指的是一个可视窗口范围&#xff0c;处于安全区域的内容不受圆角&#xff08;corners&#xff09;、齐刘海&#xff08;sensor housing&#xff09;、小黑条&#xff08;Home Indicator&#xff09;影响。 造成这个问题的主要原因就是 iphoneX 之后在屏幕上出现了所谓…

Swoft - Bean

一、Bean 在 Swoft 中&#xff0c;一个 Bean 就是一个类的一个对象实例。 它(Bean)是通过容器来存放和管理整个生命周期的。 最直观的感受就是省去了频繁new的过程&#xff0c;节省了资源的开销。 二、Bean的使用 1、创建Bean 在【gateway/app/Http/Controller】下新建一个名为…

鸿蒙HarmonyOS兼容JS的类Web开发-开发指导

鸿蒙HarmonyOS兼容JS的类Web开发-开发指导 文章目录 鸿蒙HarmonyOS兼容JS的类Web开发-开发指导常用组件开发指导list开发指导创建list组件添加滚动条添加侧边索引栏实现列表折叠和展开场景示例 dialog开发指导创建dialog组件设置弹窗响应场景示例 form开发指导创建form组件实现…

经管类CSSCI、北核期刊投稿指南数据(2023年更新)/经管类的期刊投稿指南

经管类CSSCI、北核期刊投稿指南&#xff08;2023年更新&#xff09; 1、内容包括&#xff1a;投稿指南-CSSCI版本、CSSCI扩展版本、北大核刊版本、建议期刊版本、所有期刊。 2、范围&#xff1a;CSSCI、CSSCI扩展、北大核刊 3、说明&#xff1a;包含经管类期刊的发表难度&am…

css3边框与圆角

css3边框与圆角 前言边框的三要素边框的三要素小属性 四个方向的边框四个方向边框的三要素小属性 去掉边框利用边框制作三角形圆角 border-radius单独设置四个圆角小属性百分比为单位 盒子阴影阴影延展内阴影多阴影 结语 前言 在网页设计中&#xff0c;边框与圆角不仅仅是简单…

FAST OS DOCKER 可视化Docker管理工具

介绍 FAST OS DOCKER 界面直观、简洁&#xff0c;非常适合新手使用&#xff0c;方便大家轻松上手 docker部署运行各类有趣的容器应用&#xff0c;同时 FAST OS DOCKER 为防止服务器负载过高&#xff0c;进行了底层性能优化&#xff1b;其以服务器安全为基础&#xff0c;对其进…

天津大数据分析培训班 常见的大数据培训课程

大数据现在属于热门职业技能之一&#xff0c;不管是大学毕业生&#xff0c;计算机和数据相关专业青年&#xff0c;已经工作一阵的开发人员&#xff0c;运营小白&#xff0c;还是其他想进入这个行当的&#xff0c;可能还没有编程基础的转行人&#xff0c;都想尝试大数据行业&…

联手英特尔,释放星飞分布式全闪存储潜能

近日&#xff0c;英特尔官网发布了与 XSKY 星辰天合联手打造的解决方案&#xff0c;即 XSKY 的新一代全闪分布式存储系统 XINFINI&#xff0c;该存储系统采用英特尔 QAT 加速数据压缩/解压缩&#xff0c;从而大幅度提升存储系统性能。 全闪存储系统面临的解压缩挑战 在存储系统…

【开源】基于JAVA+Vue+SpringBoot的大病保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统配置维护2.2 系统参保管理2.3 大病保险管理2.4 大病登记管理2.5 保险审核管理 三、系统详细设计3.1 系统整体配置功能设计3.2 大病人员模块设计3.3 大病保险模块设计3.4 大病登记模块设计3.5 保险审核模块设计 四、…

Java21 如何使用switch case

1. Java8 和 Java21 Java8 引入字符串和枚举 Java21 可以返回值, yield关键字, switch 表达式, 模式匹配, null值处理 2. 代码案例 1. Java8 public static void java8() {String day "tuesday";switch (day) {case "monday":System.out.println("w…

3.4 在开发中使用设计模式

现在&#xff0c;我们应该对设计模式的本质以及它们的组织方式有了初步的认识&#xff0c;并且能够理解ROPES过程在整体设计中的作用。通过之前章节对“体系结构”及其五个视图的探讨&#xff0c;我们打下了坚实的基础。初步了解了UML的基本构建模块后&#xff0c;我们现在可以…

Qt优秀开源项目之二十一:遇见QSkinny,一个轻量级Qt UI库

目录 一.QSkinny简介 二.工作原理 三.编译 一.QSkinny简介 QSkinny库基于Qt Graphic View和Qt/Quick中少量的核心类。它提供了一组轻量级控件&#xff0c;可以在C或QML中使用这些控件。QSkinny默认是启用硬件加速的&#xff0c;非常适合嵌入式设备&#xff0c;目前已经应用于…

修改SSH默认端口,使SSH连接更安全

以CentOS7.9为例&#xff1a; 1、修改配置文件 vi /etc/ssh/sshd_config 2、远程电脑可连接&#xff0c;暂时将SELinux关闭 # 查询状态 getenforce # 关闭 setenforce 0 # 开启 setenforce 1 3、SELinux设置&#xff08;如果启用&#xff09;&#xff0c;semanage管理工具安…

XCTF-Misc1 pcap1 misc2-1

pcap1 附件是一个xxxxx.pcap流量包 分析 1. 流量包筛选 统计协议分级&#xff0c;发现主要是TCP协议 查看TCP协议的流量包&#xff0c;筛选关键词tcp contains flag 跟踪TCP流&#xff0c;发现是python代码&#xff0c;将其导出 2. 导出的代码分析 导出的代码&#xff…

计算机图形学作业:Cohen-Sutherland和Liang-Barsky 裁剪算法

参考书籍和资料&#xff1a; Liang-Barsky参考下面视频14.2.1 [14.2.1]--讲解经典的梁友栋-巴斯基算法。_哔哩哔哩_bilibili Cohen-Sutherland参考孔令德的计算机图形学实验及课程设计&#xff08;第二版&#xff09;&#xff0c;实验五直线段的裁剪 题目如下&#xff1a; …

助力智能密集人群检测计数,基于YOLOv8全系列模型【n/s/m/l/x】开发构建通用场景下密集人群检测计数识别系统

在一些人流量比较大的场合&#xff0c;或者是一些特殊时刻、时段、节假日等特殊时期下&#xff0c;密切关注当前系统所承载的人流量是十分必要的&#xff0c;对于超出系统负荷容量的情况做到及时预警对于管理团队来说是保障人员安全的重要手段&#xff0c;本文的主要目的是想要…