UI自动化-uiautomation

  • 0- 前言
  • 1- inspect
  • 2- uiautomation
  • 3- 【实战】RustDesk软件自动 安装、指定服务器信息
  • 4- 参考文章

0- 前言

做应用程序自动点击的记录,暂不完整,仅供参考。参考多位大佬文章,链接在后面

涉及工具

  1. inspect【应用程序元素定位辅助工具; UI SPY 这个软件好像也可以,见别人用过】
  2. uiautomation【本文自动化的重点】
  3. pyautogui【技术不到位,有些元素没法精确定位,用uiautomation获取旁边元素的位置坐标,再用这个模拟键鼠操作】

1- inspect

# --常用解析--# Name,有些程序有,有些没有
Name:   "学习助手"# ControlType,控件类型,查找窗口的时候 不同控件类型,用不同方法
ControlType:    UIA_WindowControlTypeId (0xC370)# BoundingRectangle,边界矩形,显示这个窗口或按钮、标签、文本框  的 位置信息【左上x坐标,左上y坐标,右下x坐标,右下y坐标】
BoundingRectangle:  {l:88 t:110 r:358 b:309}# 这个 查找窗口的时候 用
ClassName:  "TkTopLevel"
How found:   Selected from tree...
Name:   "微信"
ControlType:    UIA_WindowControlTypeId (0xC370)
LocalizedControlType:   "窗口"
BoundingRectangle:  {l:-498 t:193 r:642 b:998}
IsEnabled:  true
IsOffscreen:    false
IsKeyboardFocusable:    false
HasKeyboardFocus:   false
AccessKey:  ""
ProcessId:  2708
RuntimeId:  [2A.2406AE]
FrameworkId:    "Win32"
ClassName:  "WeChatMainWndForPC"
NativeWindowHandle: 0x2406AE
IsControlElement:   true
ProviderDescription:    "[pid:2400,providerId:0x2406AE Main:Nested [pid:2708,providerId:0x2406AE Annotation(parent link):Microsoft: Annotation Proxy (unmanaged:uiautomationcore.dll); Main:Microsoft: MSAA Proxy (IAccessible2) (unmanaged:uiautomationcore.dll)]; Hwnd(parent link):Microsoft: HWND Proxy (unmanaged:uiautomationcore.dll)]"
AriaProperties: ""
IsPassword: false
IsRequiredForForm:  false
IsDataValidForForm: true
HelpText:   ""
Culture:    0
IsDialog:   false
LegacyIAccessible.ChildId:  0
LegacyIAccessible.DefaultAction:    ""
LegacyIAccessible.Description:  ""
LegacyIAccessible.Help: ""
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "微信"
LegacyIAccessible.Role: 客户端 (0xA)
LegacyIAccessible.State:    正常 (0x0)
LegacyIAccessible.Value:    ""
Transform.CanMove:  true
Transform.CanResize:    true
Transform.CanRotate:    false
Window.CanMaximize: true
Window.CanMinimize: true
Window.IsModal: false
Window.IsTopmost:   false
Window.WindowInteractionState:  ReadyForUserInteraction (2)
Window.WindowVisualState:   Normal (0)
IsAnnotationPatternAvailable:   false
IsDragPatternAvailable: false
IsDockPatternAvailable: false
IsDropTargetPatternAvailable:   false
IsExpandCollapsePatternAvailable:   false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable:   false
IsItemContainerPatternAvailable:    false
IsLegacyIAccessiblePatternAvailable:    true
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable:  false
IsRangeValuePatternAvailable:   false
IsScrollItemPatternAvailable:   true
IsScrollPatternAvailable:   false
IsSelectionItemPatternAvailable:    false
IsSelectionPatternAvailable:    false
IsSpreadsheetItemPatternAvailable:  false
IsSpreadsheetPatternAvailable:  false
IsStylesPatternAvailable:   false
IsSynchronizedInputPatternAvailable:    false
IsTableItemPatternAvailable:    false
IsTablePatternAvailable:    false
IsTextChildPatternAvailable:    false
IsTextEditPatternAvailable: false
IsTextPatternAvailable: false
IsTextPattern2Available:    false
IsTogglePatternAvailable:   false
IsTransformPatternAvailable:    true
IsTransform2PatternAvailable:   false
IsValuePatternAvailable:    false
IsVirtualizedItemPatternAvailable:  false
IsWindowPatternAvailable:   true
IsCustomNavigationPatternAvailable: false
IsSelectionPattern2Available:   false
FirstChild: "" 窗格
LastChild:  "" 窗格
Next:   "【python】UI自动化-uiautomation.md• - Typora" 窗口
Previous:   "Home - 360极速浏览器X 21.0" 窗口
Other Props:    Object has no additional properties
Children:   "" 窗格"" 窗格
Ancestors:  "桌面 1" 窗格[ No Parent ]

2- uiautomation

一、uiautomation方法

方法 备注
WindowContrl(searchDepth,ClassName,SubName) 查找窗口中的程序,如果有中文则需用Unicode
window.Exists(maxSearchSeconds) 来判断此窗口是否存在
EditControl(searchFromControl) 查找编辑位置,找到后可用DoubleClick()来改变电脑的focus;edit.SetValue(“string”)输入值
Win32API.SendKeys(“string”) 如果已在编辑位置,则可用此方法来输入值,{Ctrl}为ctrl键,其他类似;{@8}格式可输入8个@,对于数字也可实现此功能,但对于字母不能…;
MenuItemControl(searchFromControl,Name) 查找菜单按钮
ComboBoxControl(searchFromControl,AutomationI) 查找下拉框,然后在此基础上用Select(“name”)方法来选择需要的选项
import uiautomation
import subprocess# 查找窗口中的程序,如果有中文则需用Unicode;可用
uiautomation.WindowContrl(searchDepth,ClassName,SubName) # 来判断此窗口是否存在
uiautomation.window.Exists(maxSearchSeconds)# 查找编辑位置,找到后可用DoubleClick()来改变电脑的focus;edit.SetValue(“string”)输入值
uiautomation.EditControl(searchFromControl) # 查找菜单按钮
uiautomation.MenuItemControl(searchFromControl,Name) #  查找下拉框,然后在此基础上用Select(“name”)方法来选择需要的选项
uiautomation.ComboBoxControl(searchFromControl,AutomationI)# 查找按钮
uiautomation.BottonControl(searchFromControl,Name,SubName)
# Uiautomation元素获取方法如下程序窗口:uiautomation.WindowControl
按钮:uiautomation.ButtonControl
文本:uiautomation.TextControl
输入窗口:uiautomation.EditControl
文档控件:uiautomation.DocumentControl
单选控件:uiautomation.CheckBoxControl
复选控件:uiautomation.ComboBoxControl
日历控件:uiautomation.CalendarControl'''
ControlType为”ControlType.Window”
那么捕获窗口就用:uiautomation.WindowControl如果ControlType为”ControlType.Text”
那么捕获窗口就用:uiautomation.TextControl依次类推...
如果ControlType为”ControlType.Xxx”
那么捕获窗口就用:uiautomation.XxxControl如果类型不明确,则使用uiautomation.Control
'''
# 常用的操作有
DoubleClick()双击
Click()单击
RightClick()右键点击
SendKeys()发送字符
SetValue()传值
# 三、对windows程序常用操作subprocess.Popen(‘Name’)   用进程打开程序;window.Close()         关闭窗口;window.SetActive()     使用;window.SetTopMost()     设置为顶层window.ShowWindow(uiautomation.ShowWindow.Maximize) 窗口最大化window.CaptureToImage(‘Notepad.png’) 截图;

3- 【实战】RustDesk软件自动 安装、指定服务器信息

下面代码引入的文件 的内容

192.168.1.78
vEJU4Fasd/asdadagsdaasdgadfasdasfasfaasffffffddddddddddddddda6W8=
rustdesk-1.1.9-putes.exe---读取顺序---
---第1行 服务器ip---
---第2行 KEY---
---第3行 rustdesk安装包名字[要带拓展名]---功能:自动安装rustdesk客户端,安装后开启"允许IP直接访问",执行期间不要使用键盘鼠标
# -*- coding: utf-8 -*-
# @Time : 2022/11/18 9:06
# @File : UI自动化.py
# @Software: PyCharmimport time
import uiautomation as auto
import subprocessimport pyautogui
import pyperclip
import osf = open('key.txt', mode='r', encoding='utf-8')
key_list = f.read().split('\n')
f.close()# 打开软件
subprocess.Popen(key_list[2])
auto.uiautomation.SetGlobalSearchTimeout(5)  # 设置全局搜索超时 5# 获取
print('----开始安装--请勿操作键盘鼠标----')
win_0 = auto.WindowControl(searchDepth=1, Name="", ClassName='H-SMILE-FRAME')
win_0.ButtonControl(Name='同意并安装').Click()
# time.sleep(int(key_list[2]))
time.sleep(10)
for i in range(1, 20):print(f'{i}')if os.access(r'C:\Users\Public\Desktop\RustDesk.lnk', os.X_OK):time.sleep(5)try:win_0 = auto.WindowControl(searchDepth=1, Name="", ClassName='H-SMILE-FRAME')win_0.ButtonControl(Name='关闭').Click()time.sleep(3)except:passbreakelse:time.sleep(1)# -------执行-----
print('打开软件')
subprocess.Popen(r"C:\Program Files\RustDesk\RustDesk.exe")
# os.system(r'start C:\"Program Files"\RustDesk\RustDesk.exe')
auto.uiautomation.SetGlobalSearchTimeout(5)  # 设置全局搜索超时 5# 获取
win = auto.WindowControl(searchDepth=1, Name="", ClassName='H-SMILE-FRAME')
print(win.BoundingRectangle)# 点击最大化
# win.ButtonControl(Name="最大化").Click()# 控制的应用窗口前置
win.SetTopmost(True)# 获取 三个点 位置
button = win.TextControl(Name='你的桌面可以通过下面的ID和密码访问。')
# print(button.BoundingRectangle)# ---把三个点的位置转换成列表,并点击---
a = str(button.BoundingRectangle)a = list(map(int, a[1:a.find(')')].split(',')))  # 把列表中的字符串转成整型print(a)# x,y 为 单击坐标,button 为 鼠标左或右键点击('left' / 'right')
pyautogui.click(a[2], a[3] + 20, button='left')
time.sleep(1)
# ---把三个点的位置转换成列表,并点击---END---# 设置
win.TextControl(Name='允许IP直接访问').Click()pyautogui.click(a[2], a[3] + 20, button='left')
time.sleep(1)
win.TextControl(Name='ID/中继服务器').Click()
time.sleep(1)# pyautogui.hotkey('ctrl', 'a')  # 按下 ctrl + c 组合键。此次测试不生效
# ---------
def key_cv(c, v):""" 模拟执行快捷键 """pyautogui.keyDown(c)pyautogui.keyDown(v)pyautogui.keyUp(v)pyautogui.keyUp(c)key_cv('ctrl', 'a')pyperclip.copy(key_list[0])  # 复制
pyperclip.paste()  # 粘贴key_cv('ctrl', 'v')# ---------time.sleep(0.5)
pyautogui.press('Tab')
pyautogui.press('Tab')
pyautogui.press('Tab')# ---------
key_cv('ctrl', 'a')pyperclip.copy(key_list[1])  # 复制
pyperclip.paste()  # 粘贴key_cv('ctrl', 'v')time.sleep(1)
pyautogui.press('tab')
pyautogui.press('tab')
time.sleep(0.5)
pyautogui.press('enter')time.sleep(1)win.ButtonControl(Name='关闭').Click()
print('--------执行结束--------')
time.sleep(5)

4- 参考文章

# inspect
https://blog.csdn.net/knighthood2001/article/details/124297008# uiautomation
https://blog.csdn.net/yangzhichao_csdn/article/details/124799781
https://blog.csdn.net/chenmozhe22/article/details/106926071
https://blog.csdn.net/qq_21142893/article/details/84874406# PyautoGui
https://blog.csdn.net/weixin_38640052/article/details/112387653

【python】UI自动化-uiautomation相关推荐

  1. python ui自动化配置文件,python UI自动化实战记录八:添加配置

    添加配置文件写入测试地址等,当环境切换时只需修改配置文件即可. 1 在项目目录下添加文件 config.ini 写入: [Domain] domain = http://test.domain.cn ...

  2. python ui自动化_pythonUI自动化整理

    python实现UI自动化整理 1.用到的包 selenium 常见的浏览器操作 openpyxl 读写处理excel数据参数 PyMySQL(python3) 读写mysql数据库 unittest ...

  3. python UI自动化知识点总结

    关于python自动化的知识点问答 使用selenium做自动化测试常见问题 1.selenium中如何判断元素是否存在? isElementPresent 2.selenium中hidden或者是d ...

  4. appium示例代码python_(appium+python)UI自动化_07_UI自动化实例【拼多多搜索商品为例】...

    前言 初学UI自动化的小伙伴,在配置好appium+python自动化环境后,往往不知道如何下手实现自动化.小编在初期学习的时候也有这种疑惑,在此以拼多多搜索为实例,展示下appium是如何实现自动化 ...

  5. python 苹果试玩_(appium+python)UI自动化_01_自动化环境搭建【MAC版】

    Appium简介 Appium是一个开源的.跨平台的测试框架,主要用来进行app UI自动化,适用于原生应用.混合应用和移动网页应用(H5页面).目前支持Python.JavaScript.Objec ...

  6. python ui自动化测试仪器_python UI自动化测试

    为了减小维护成本: 1.UI自动化测试需要有较为稳定的环境 2.代码设计合理,那么我们就需要面向对象的设计一个框架,将重复的代码模块化 一.首先总结一下 UI自动化大概要哪些模块 1.config(配 ...

  7. python ui自动化脚本_ui自动化:python+appium----环境搭建

    前言: appium可以说是app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本支持java和python.以下为python+appium的安装教程... 环境准备... ...

  8. python代码设计测试用例_(appium+python)UI自动化_08_unittest编写测试用例

    前言 unittest是python自带的单元测试框架,类似于Junit(Java单元测试框架).支持自动化测试,可编写测试前置&后置条件,并且可批量运行测试用例并生成测试报告. 使用unit ...

  9. python ui自动化配置文件,Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)...

    在自动化测试项目中,可能会碰到一些经常使用的但 很少变化的配置信息,下面就来介绍使用configparser来读取配置信息config.ini 读取的信息(config.ini)如下: [config ...

最新文章

  1. 昨夜,5G R16标准正式冻结!5G物联网扬帆起航
  2. 信息安全系统设计基础第十一周学习总结
  3. CodeForces - 632E Thief in a Shop 完全背包
  4. 开运算和闭运算_OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)...
  5. java爬取新浪微博登陆_30行jsoup代码搞定新浪微博登录抓取爬虫
  6. php 跨二级域名 设置cookie
  7. php crypt mysql password_使用PHP 5.5的password_hash和password_verify函数
  8. 探地雷达(GPR)的 C-scan (三维图)的绘制
  9. 特斯拉员工薪酬曝光 最低54万元!
  10. 利用php利用root权限执行shell脚本必须进行以下几个步骤
  11. ERStudio使用细则
  12. linux化学公式软件下载,化学公式编辑器下载-Efofex FX Chem(化学公式编辑器)下载 v3.004.0 官方特别版-IT猫扑网...
  13. WIN10创建虚拟桌面
  14. android N编译
  15. Jenkins集成动态salve报错 连接测试报错:
  16. 移动apn接入点哪个快_51物联卡:使用物联网卡时为什么总要让你设置APN?
  17. 新的开始,fighting
  18. 魔改大西瓜源码下载之后画面显示只有一半的解决方法
  19. APP强制更新(uni-app)
  20. 前端面试题【131道】

热门文章

  1. android permission denial starting intent,adb shell 启动应用时的权限问题
  2. Office Online Server 文档在线预览编辑【速成篇】
  3. 通过一张图片分析拍摄地点
  4. php 便利jq,jquery怎样遍历数组?jquery遍历数组常用的两种方式
  5. Matlab之设定运行内核数量函数——parpool
  6. 我今年收到最特别的新年礼物!
  7. 如何使用ContentResolver
  8. 都说PHP简单,那新手开始如何入门PHP?
  9. 没人比得过的游吧看吧
  10. 报错 | {errMsg: “chooseWXPay:fail, the permission value is offline verifying“}errMsg: “chooseWXPay