pywinauto之上传PC电脑上的文件

pywinauto 定位windows原生控件入门 windows空间自动化测试 阅读详情

pywinauto的使用介绍

关于文件上传的弹窗一共有三个步骤:
1.文件路径填写
2.文件名填写
3.点击打开
在进行操作之前,我们就需要定位到这几个控件1、路径输入框,2、文件输入框、3、打开按钮
具体定位代码如下:
import pywinauto

#使用pywinautoc创建一个操作桌面窗口的对象
app = pywinauto.Desktop()

#选中文件上传的窗口
dlg = app[“打开”]

#选中文件地址输入框
dlg[“Toolbar3”]

#选中文件名输入框
dlg[“文件名(&N):Edit”]

#选择打开按钮
dlg[“打开(&O)”].click()

实战练习1


```python

```python
from selenium import webdriver
import pywinauto
from pywinauto.keyboard import send_keys

class Demo:
    def __init__(self):
        '''
        webdriver.Chrome:谷歌浏览器
        implicitly_wait(10):隐形等待10秒
        maximize_window():放大窗口
        '''
        self.device = webdriver.Chrome()
        self.device.maximize_window()
        self.device.implicitly_wait(10)
        self.device.get('https://www.wenshushu.cn/')

    def Update(self):
        '''上传文件'''
        self.device.find_element_by_css_selector('.chooice-btn span[class="text"]').click()  # 定位上传按钮
        app = pywinauto.Desktop()  # 使用pywinauto来选择文件
        dlg = app["打开"]  # 选择文件上传的窗口
        sleep(1)
        dlg["Toolbar3"].click()  # 选择文件地址输入框
        send_keys("C:\\Users\\Admin\\Desktop")  # 键盘输入上传文件的路径
        sleep(1)
        send_keys("{VK_RETURN}")  # 键盘输入回车,打开该路径
        dlg["文件名(&N):Edit"].type_keys("1.txt")  # 选中文件名输入框,输入文件名
        sleep(1)
        dlg["打开(&O)"].click()  # 点击打开


if __name__ == '__main__':
    a = Demo()
    a.Update()

实战练习2:优化后的


```python

```python
from selenium import webdriver
import pywinauto
from pywinauto.keyboard import send_keys

class Demo:
    def __init__(self):
        '''
        webdriver.Chrome:谷歌浏览器
        implicitly_wait(10):隐形等待10秒
        maximize_window():放大窗口
        '''
        self.device = webdriver.Chrome()
        self.device.maximize_window()
        self.device.implicitly_wait(10)
        self.device.get('https://www.wenshushu.cn/')

    def Update(self):
        '''上传文件'''
        self.device.find_element_by_css_selector('.chooice-btn span[class="text"]').click()  # 定位上传按钮
        app = pywinauto.Desktop()  # 使用pywinauto来选择文件
        dlg = app["打开"]  # 选择文件上传的窗口
        # dlg["Toolbar3"].click()  # 选择文件地址输入框
        dlg["文件名(&N):Edit"].type_keys("C:\\Users\\Admin\\Desktop")  # 选中文件名输入框,输入文件路径
        send_keys("{VK_RETURN}")  # 键盘输入回车,打开该路径
        dlg["文件名(&N):Edit"].type_keys("1.txt")  # 选中文件名输入框,输入文件名
        sleep(1)  # 这里一定要加1秒延长,否则文件选择窗口不消失,即是点击打开按钮不成功
        # dlg["打开(&O)"].click()  # 点击打开,这个可以,也可以用下面的
        send_keys("{VK_RETURN}")  # 键盘输入回车,打开该路径


if __name__ == '__main__':
    a = Demo()
    a.Update()

一、环境安装

**
1.命令行安装方法
pip install pywinauto

2.手动安装方法
安装包下载链接:
pyWin32: python调用windows api的库
https://sourceforge.net/projects/pywin32/files/pywin32/Build 220/

comtypes: COM接口的调度https://github.com/enthought/comtypes/releases

six: 用来兼容Python2和Python3的库
https://pypi.org/project/six/

Pillow:可选,用来做屏幕截图的
https://pypi.org/project/Pillow/2.7.0/

Pywinauto:PC端自动化工具
https://github.com/pywinauto/pywinauto/releases

解压缩后执行 python setup.py install
注:建议使用第一种命令行安装,方便。

3.环境检查
命令行中打开python解释器,运行以下代码,windows自带的记事本会被启动,若无报错,则证明pywinauto已安装成功。

  from pywinauto.application import Application
  app = Application(backend="uia").start("notepad.exe")

在这里插入图片描述

二、PC端元素定位工具介绍及判断backend
1.Backend判断
Pywinauto中backend有两种:win32和uia,默认为win32。可使用spy++和Inspect工具判断backend适合写哪种。例如:如果使用Inspect的UIA模式,可见的控件和属性更多的话,backend可选uia,反之,backend可选win32。

2.工具介绍
Spy++ (定位元素工具(win32))
Inspect(定位元素工具(uia))
UI Spy (定位元素工具)
Swapy(可简单生成pywinauto代码)
三、启动并创建一个实例对象
1.启动
start()用于还没有启动软件的情况。timeout为超时参数(可选),若软件启动所需的时间较长可选timeout,默认超时时间为5s。
start(self, cmd_line, timeout=app_start_timeout)
示例:
app = Application(backend = ‘uia’).start(r"E:\Office\Office14\EXCEL.exe)

2.连接
connect()用于连接已经启动的程序。连接一个已经运行的程序有以下几种方法:
a)process:进程id
app = Application().connect(process=2341)
b)handle:应用程序的窗口句柄
app = Application().connect(handle=0x010f0c)
c)path:进程的执行路径(GetModuleFileNameEx 模块会查找进程的每一个路径并与我们传入的路径去做比较)
app = Application().connect(path=“D:\Office14\EXCEL.exe”)

d)参数组合(传递给pywinauto.findwindows.find_elements()这个函数)
app = Application().connect(title_re=“.*Notepad”, class_name=“Notepad”)

注:
应用程序必须先准备就绪,才能使用connect(),当应用程序start()后没有超时和重连的机制。在pywinauto外再启动应用程序,需要sleep,等程序start

四、 窗口、对话框及控件元素定位方式
1.window,dialog定位方式
1)基于title定位
a)如何获取title?
title为窗口的名称,可使用UISpy一类的定位元素工具去查找。
如图所示,该对话框中的title为Name属性值:“替换”

b)若使用定位元素工具找不到title怎么办?
使用print_control_identifiers()方法打印出当前窗口或对话框中的所有title
格式:
app.YourDialog. print_control_identifiers()

示例如图,demo详见locate_by_title.py:
在这里插入图片描述

c)使用title定位方式的写法
Untitled_notepad = u’无标题 – 记事本’
app. Untitled_notepad.draw_outline(colour = ‘red’) #app.window(best_match=‘Untitled - Notepad’)
注:这种写法适用于英文系统,英文软件,其他语言的系统会存在编码问题,需转码再使用。
或
app[‘无标题 – 记事本’] .draw_outline(colour = ‘red’)
注:适用于除英文外其他语言的系统,不用转码

2)top_window()定位
app.top_window() #此方法可返回应用软件的最顶层窗口(是窗口,不是窗口弹出的对话框)
注:此方法目前没有经过测试,它会返回应用程序的顶级窗口,但可能不是Z-Order中的顶级窗口。

3)关键字传参
若以上方法不能满足定位元素的需求,可使用以下列表中的参数传参定位元素,参数可以组合使用。
示例:
app.window(class_name = ‘Notepad’).draw_outline(colour = ‘red’)

常用参数表:

可传参数 对应属性名称备注
class_name ClassName
class_name_re 正则匹配window Classname
title Name Window窗口名
title_re 正则匹配窗口名
best_match 模糊匹配类似的title
handle 句柄
framework_id FrameworkId(一般情况下FrameworkId不是唯一的)
process ProcessId,进程id(注意:每次启动后,进程id都会变)
control_id control_id
control_type ControlType()
auto_id AutomationId
2. control定位方式

基于title定位(同window,dialog中的title定位)
app[‘your dialog title’][‘your control title’]
或
app.dlg.control

层级定位
app.window(class_name = ’Notepad’).window(class_name = ‘#32770’)
app.window(class_name = ‘Notepad’).child_window(class_name = ‘#32770’)

wpath定位
若元素值为空,或不是唯一的情况下,可使用类似selenium中xpath的定位方式,根据查子元素的序号去定位元素。
示例:
app_window = app.window(class_name=‘Qt5QWindowIcon’) #定位登录窗口
app_window.children()[1].children()[0].children()[0] .children()[2] #定位用户名输入框控件(序号从0开始查)

五、常用方法

1**.调试定位控件**
a)print_control_identifiers(depth = None, filename = None)
以树形结构打印出所有控件可识别出的标识
depth:打印的深度,缺省时打印最大深度。
filename:将返回的标识存成文件(生成的文件与当前运行的脚本在同一个路径下)
eg:dlg. print_control_identifiers(filename =’a.txt’)

b)draw_outline(colour =’green’,thickness = 2,
fill = win32defines.BS_NULL, rect = None)
默认为在当前定位到的窗口或控件周围画出一条边界线,方便我们看出定位到了哪个控件
colour:边界线的颜色,默认为绿
thickness:线的粗细,默认为2
fill:以何种方式填充矩形(没试过,详见源码base_wrapper.py)
rect:根据坐标画出矩形(默认是在当前定位到的元素上画出一个矩形)
c) is_dialog 判断是否为dialog

  1. 隐式等待
    a) wait(wait_for, timeout = None, retry_interval = None)
    wait_for可传入五种参数, 可以组合传参,但要以空格隔开:
    exists: 窗口变成有效的句柄
    visible: 窗口可见,没有隐藏
    enabled: 窗口没有disable
    ready: visible + enable
    active: active
    timeout:设置超时时间,若在n秒内没有等到窗口在wait_for中传入的几种状态,则会抛出TimeoutError。
    retry_interval:超时后,间隔n秒再次重试。
    Dlg.wait(“exists ready”, timeout = 5, retry_interval = 3)

b) wait_not(wait_for_not,timeout = None,retry_interval = None)
等待窗口不处于某种状态时。参数与wait传参一致。

  1. 输入框输入
    a)type_keys()
    Dlg.control.type_keys(“xxxxx”)
  2. 菜单栏
    menu_select()
    eg:app.window.menu_select(Edit -> Replace)
  3. 鼠标点击
    a)click() 点击Button控件
    b)check_by_click() 通过click()方法勾选checkbox
    c)uncheck_by_click() 通过click()方法取消勾选checkbox
    d)get_check_state() 返回checkbox的勾选状态(0没勾选,1勾选,2不定)
    e)is_checked(勾选返回true,为勾选返回false,不定返回None)
    f)check() 勾选checkbox
    g)uncheck() 不勾选checkbox
    h)invoke() 点击(uia mode)
    i)toggle () 勾选checkbox(uia mode)
  4. 键盘操作
    “+”:Shift
    “^”:Control
    “%”:Alt
Python页面自动化文件上传两种方式 Python页面自动化测试之文件上传的两种方式 ——广州_vivi 最近教学过程,学员项目出现测试上传文件无法执行的情况,分析发现学员项目的上传按钮并不是input按钮,导致无法使用直接定位元素方式进行文件的上传。 用百度首页-图片上传搜索进行举例,虽然该按钮也是input按钮,但是该文章也有一定的参考意义。 方法一:适用于input标签 使用selenium定位到元素后,直接sendkeys,输入要上传文件的绝对地址 fromseleniumimportwebdriver... 阅读详情

相关推荐

python自动控制电脑_PythonPC客户端自动化实现原理(pywinauto)

一、前言今天在这边专门整理了一遍文章,和大家一起聊聊如何使用python做PC端自动化!二、环境安装使用python实现来做PC端自动化,前提是先安装好python,那么还需要用到一个第三方库:pywinauto,在这边我们首先需要安装好这个库,安装命令如下:pip install pywinauto三、使用说明安装好了之后,关于使用说明大家可以参照官方文档上的说明内容翻译如下:就是说在我们安装好...

weixin_39543655的博客 4615

pywinauto

pywinauto (仅作为个人笔记,如有雷同,请联系删除。。) ==Pywinauto==是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面。它可以允许你很容易的发送鼠标、键盘动作给Windows的对话框和控件。 参考:https://www.cnblogs.com/xp1315458571/p/13892205.html 1、安装方式: 命令行安装:pip install pywinauto,简单,方便,直接。 手动安装:【解压缩后执行 python set

weixin_42753043的博客 4万+

PC端自动化pywinauto 、uiautomation+pyautogui+opencv

适用于PC端桌面应用

weixin_46903933的博客 2280

pywinauto的初级入门

pywinauto的学习记录安装使用须知确定app的可访问技术启动应用程序辅助工具详细使用开启app功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 第一次尝试这种方法记录自己学过的一些东西,后续会将一些重要的知识点慢慢记录进来,h

Iv_zzy的博客 2万+

软件测试|PC端应用自动化最佳解决方案——Pywinauto

Pywinauto,完全由 Python 构建的一个模块,可以用于自动化 Windows 上的 GUI 应用程序。同时,它支持鼠标、键盘操作,在元素控件树较复杂的界面,可以辅助我们完成自动化操作。Github地址Win32 API 包含 MFC、VB6、VCL、simple WinForms controls and most of the old legacy appsMS UI Automation包含 WinForms、WPF、Store apps、Qt5, browsers其中。

Tester_muller的博客 943

CTF-Web习题:2019强网杯 UPLOAD

本题涉及知识点:代码审计、文件上传漏洞、反序列化漏洞

LJW123487的博客 1902

【pywinauto篇】使用中的问题-持续更新

UI Automation是微软从Windows Vista开始引入的核心技术,旨在为所有UI元素提供一致的编程接口,无论这些元素是由何种技术(如Win32、WPF、UWP等)实现的。这为自动化测试提供了更广泛的支持,尤其是在处理现代Windows应用(尤其是使用WPF和UWP技术构建的应用)时更为有效。使用UI Automation后端,开发者可以更容易地定位和操作UI元素,如获取元素的属性、模拟鼠标和键盘操作、监听UI事件等,这对于创建复杂的自动化测试场景尤其有用。

qadnkz的专栏 1万+

从UC3842的FB脚到COMP脚:一次讲透反激电源两种光耦反馈接法的选择与实战

本文深入探讨了UC3842 PWM控制器在反激式开关电源设计中的两种光耦反馈接法:FB脚与COMP脚方案。通过分析信号极性差异、稳定性特点及动态响应性能,提供场景化选型指南和可靠性设计要点,帮助工程师优化反馈环路设计,提升系统稳定性与效率。特别针对TL431和PC817等关键元件在温度漂移、老化衰减等实际问题给出解决方案。

weixin_28717683的博客 704

聊聊 PC 端自动化最佳方案 - Pywinauto

点击上方 “AirPython”,选择 “加为星标”第一时间关注 Python 原创干货!1. 前言大家好,我是安果!上一篇文章,聊到 PC 端的一种自动化方案:WinAppDriver聊...

AirPython的博客 3218

国产机载操作系统天脉ACoreOS实战:从零搭建开发环境到应用移植

本文详细介绍了国产机载操作系统天脉ACoreOS的实战开发流程,从核心特性解析到开发环境搭建,再到VxWorks应用移植策略。重点阐述了其符合ARINC 653标准的时空分区架构如何保障高可靠性,并提供了从零创建分区工程、重构通信与任务代码的具体步骤,为开发者向这一国产化平台迁移提供了实用指南。

flower的专栏 633

星网锐捷语音网关密码重置恢复出厂设置

星网锐捷语音网关---密码重置 第一种星网锐捷SVX网关恢复出厂设置的方法 eth1口 任意口插网线,连接电脑并设置电脑固定ip为: 一, 二 网页输入: 192.168.88.86 admin 默认密码 admin 登陆。 忘记密码 可通过以下方法重置: 三: 通过crt或者 shell工具 ,连接 root@192.168.88.86 连续输入两次 passwd a12345678 reboot重启后。通过账号 密码 a12345678 即可登陆系...

cibazhanji2176的博客 1万+

【pywinauto】PC端应用自动化测试(一)准备

pywinauto PC端应用自动化测试准备

qq_42325944的博客 1808

《通信工程施工与管理》

制作馈线接头必须使用专用的工具,专用工具包括:馈线切割刀、馈线安全刀、小金属丝毛刷、固定尺寸或大号活动扳手、小号扁锉刀、细齿小手锯、接头扩孔器、3M防水胶或防水接头盒;如图所示,详情如表所示。

2302_78710464的博客 1653

python实现电脑程序自动化_python基于pywinauto实现PC客户端自动化

一、前言我们柠檬班的小可爱,在学完我们柠檬班自动化的课程之后,就掌握了接口自动化,web自动化,app自动化,这些工作中常用的自动化技能,在工作足以够应对90%以上的自动化需求了。不过近期也有部分小可爱在问PC端自动化怎么去做?对这个技术比较好奇,使用python可以不可以实现PC客户端自动化测试?答案当然是可以的,所以今天在这边专门整理了一遍文章,和大家一起聊聊如何使用python做PC端自动化...

weixin_39980298的博客 770

PX4/ArduPilot源码克隆提速秘籍:国内镜像与子模块优化全攻略

本文详细介绍了PX4/ArduPilot源码克隆的提速秘籍,包括使用国内镜像源和子模块优化技巧。通过阿木实验室、华为云等国内镜像,克隆速度可提升20倍,同时提供子模块替换和并行编译等实用方法,大幅提升开发效率。

weixin_29251567的博客 523

巨量千川M-API实战:异步报表与批量操作自动化指南

API(应用程序编程接口)是现代软件系统间通信和数据交换的核心技术,它定义了服务间交互的协议和规范。在数字营销领域,营销API(Marketing API)通过程序化接口实现了广告账户管理、数据获取和操作自动化的能力,其技术价值在于将重复性人工操作转化为高效、准确的自动化流程,显著提升运营效率并降低人为错误。在广告投放精细化运营场景中,面对海量数据报表的获取与批量广告状态管理的需求,异步任务处理和批量操作接口成为关键技术解决方案。本文聚焦巨量千川M-API,深入解析其异步报表获取机制与批量操作实现,涵盖从任

weixin_32932149的博客 429

pywinauto之PC端windows自动化测试

https://www.likecs.com/default/index/show?id=99439 pywinauto是一个用纯Python编写的GUI自动化库,并为Windows GUI精心开发。最简单的是,它允许您将鼠标和键盘操作发送到Windows和Linux上的对话框和控件,而到目前为止,仅Windows才支持更复杂的基于文本的操作(正在开发Linux AT-SPI支持)。 pywinauto是一组用于自动化Microsoft Windows GUI的python模块。 最简单的是,它允许您将

HRD的博客 6813

使用 ABAP 代码动态创建新的 Function Module

通过内表。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6906

PC端自动化测试实战教程-5-pywinauto 操作PC端应用程序窗口 - 下篇(详细教程)

上一篇宏哥主要讲解和介绍了如何获取PC端应用程序窗口信息和如何连接窗口对其进行操作的常用的几种方法。今天宏哥接着讲解和分享一下窗口的基本操作:最大化、最小化、恢复正常、关闭窗口、获取窗口状态和获取窗口坐标。以及窗口的其他打开方法和选择方法。

北京-宏哥的博客 1542

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

pywinauto+lackey+selenium自动化操作综合案例(PC+浏览器)

自动化可以省去大量重复的操作,提升工作效率,很有价值

qq_53521409的博客 2872

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python实现电脑程序自动化_python 实现 PC 客户端自动化快速入门:pywinauto !

python 实现 PC 客户端自动化:pywinauto 快速上手!一、前言我们柠檬班的小可爱,在学完我们柠檬班自动化的课程之后,就掌握了接口自动化,web自动化,app自动化,这些工作中常用的自动化技能,在工作足以够应对90%以上的自动化需求了。不过近期也有部分小可爱在问PC端自动化怎么去做?对这个技术比较好奇,使用python可以不可以实现PC客户端自动化测试?答案当然是可以的,所以今天在这...

weixin_39601194的博客 1148

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PC端自动化测试实战教程-2-pywinauto 启动PC端应用程序 - 上篇(详细教程)

经过上一篇的学习、介绍和了解,想必小伙伴或者童鞋们,已经见识到pywinauto的强大了,今天继续介绍pywinauto,上一篇已经可以打开计算器了,这里宏哥在提供其他方法进行打开计算器和非电脑自带程序。pywinauto 可以启动电脑自带的应用程序,也可以启动电脑安装的应用程序。

北京-宏哥的博客 1472

PC端自动化测试实战教程-4-pywinauto 操作PC端应用程序窗口 - 上篇(详细教程)

前几篇通过宏哥的讲解和分享,已经知道如何将PC端的应用程序启动,以及如何连接已启动的应用程序,那么启动和连接上之后呢?不用说当然是操作应用程序了,怎么操作呢?请听宏哥给你娓娓道来,所以今天主要是讲解和分享一下如何操作PC端应用程序的窗口。窗口就是应用软件上面的工具栏,操作栏,弹出菜单,对话框等,这些基本上为windows软件应用比较多的地方。它通常具有带有标题栏、 最小化和最大化按钮以及其他标准 UI 元素的框架。什么是窗口 - Win32 apps | Microsoft Learn。

北京-宏哥的博客 1525
上一篇: 查看端口号的命令,android SDK启动模拟器的方法
下一篇: 【计算apk的checksum】
gaogsf
博客等级 码龄11年 88粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值