1. python自动化工具:pywinauto
Pywinauto是完全由Python构建的一个模块,可以用于自动化 Windows 上的 GUI 应用程序。同时,它支持鼠标、键盘操作,在元素控件树较复杂的界面,可以辅助我们完成自动化操作。
我在工作中,主要是使用pywinauto来辅助做一些操作,来完成自动化测试。
先要确认本地有python环境,然后可以通过命令行安装pywinauto:
如果你是使用ide,可以通过ide安装,比如我习惯使用pycharm,就可以在Project Interpreter中添加pywinauto:
还有一些手动安装的方法,但是有点繁琐,不是很推荐,这里就不介绍了。
Pywinauto要操作应用,首先需要访问应用,主要有两种访问技术。WIN32访问技术支持MFC、VB6、VCL、简单WinForms控件开发的应用,MS UI Automation访问技术支持WinForms、WPS、QT5、WPF、Store apps、browsers等开发的应用。
win32 API的backend为“ win32 ”,MS UI Automation的backend为“ uia ”。
Pywinauto中使用的backend默认为win32。可使用spy++或者Inspect工具判断backend适合选哪种。例如:如果使用py_inspect的uia模式,可见的控件和属性更多的话,backend可选uia,反之,backend可选win32。
这里提一下常用的分析工具:
我个人常用的是py_inspect和spy++。
多数情况下都是需要打开应用的,实现方式也很简单:
backend参数根据实际情况选择传uia还是win32。
start方法其实可以传两个参数,除了目标应用的启动程序地址,还可以传一个timeout,如果不传,默认是5s。如果你的目标程序启动、运行都很慢,可以将timeout设置久一点。
如果要操控的应用已经处于启动状态,可以直接进行连接,而连接方式有多种可以选择:
其中Windows的pid可以通过任务管理器进行查看:
但是我在实际操作的时候使用窗口句柄没有成功过,可能是我使用姿势不对,不过还是不推荐使用窗口句柄。
title_re参数传递的是应用的部分名称,class_name可以通过py_inspect查询到。
前面获取的对象都是应用,但是我们实际操作的是应用窗口,这里就来介绍怎么获取窗口和对话框。
最常用的是通过 title定位:
如果不清楚定位工具中的title在哪个位置,显示的是什么,可以通过print_control_identifiers()方法将所有的title都打印出来:
通过title定位的时候需要注意一下中英文的影响,如果是中文,可能会有编码问题,需要转码。
title其实只是window()方法中的一种关键字参数,window()方法可以接收很多中的关键字参数,且这些参数可以组合使用,例如这样:
主要参数有这些:
通过top_window()也能比较容易地获取到窗口,但是这个方法获取的是 程序的顶级窗口,但可能不是Z-Order中的顶级窗口。所以这个方法使用的时候多调试几次。
窗口的操作主要有最小化、最大化、恢复、关闭窗口:
控件的定位其实和窗口的定位基本一致,不太清楚为什么pywinauto在设计的时候会将窗口和控件作为一类东西。
相对于前面定位窗口的window()方法,定位控件的时候推荐使用child_window(),因为直接使用windows()的话,如果控件不是在当前窗口的子控件,是子子控件,就会定位不到,而child_window()方法就不会有这个问题,当然相对的缺点就是当控件深度太深的时候,执行这个方法会比较耗时。
child_window()方法传递的参数和window()是一样的。
控件自带了一些操作方法:
当这些不好用的时候,比如你的控件不支持点击,但是你又想点击一下,可以使用鼠标操作的一些方法:
测试过程中可能会需要截图作为证据,截图的方法也比较简单:
pywinauto也提供了键盘操作的方法:
pywinauto有几个设置等待时间的方式,这里介绍一个:
这里简单的演示一下用Wireshark自动抓包并保存:
PC端自动化测试使用到的python模块主要有pywinauto、win32gui、pyautogui。这里介绍的p ywinauto主要使用到Application类,用于应用程序管理(打开与关闭应用等)、窗口管理(最小化、最大化、关闭窗口)、控件操作。
pywinauto的功能其实挺丰富的,但是真正用到的其实只是其中很小的一块,感兴趣的同学可以多去官网翻一翻。
2. Python怎么获取不到子窗口的句柄呢,如图,求指导,刚学习Python的小白吃,求指导
CSDN问答为您找到Python怎么获取不到子窗口的句柄呢,如图,求指导相关问题答案,如果想了解更多关于Python怎么获取不到子窗口的句柄呢,如图,求指导 python 技术问题等相关问答,请访问CSDN问答。
3. 怎么用Python获取Chrome的地址栏句柄
首先,假设通过Firefox()浏览器定向爬取CSDN首页导航栏信息,审查元素代码如下图所示,在div class="menu"路径的ul、li、a下,同时可以定位ul class="clearfix"。
代码如下所示:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# coding=utf-8
import os
from selenium import webdriver
#PhantomJS无界面浏览器
##driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
#打开火狐浏览器
driver = webdriver.Firefox()
url = "http://www.csdn.net/"
driver.get(url)
#xpath路径定位导航栏
elem_dh = driver.find_elements_by_xpath("//div[@class='menu']/ul/li/a")
for elem in elem_dh:
print elem.text #获取正文
print elem.get_attribute('href') #获取属性值
然后转换成chrome浏览器,只需要在"C:\Program Files (x86)\Google\Chrome\Application\"路径下放置个chromedriver.exe驱动,再进行调用即可,代码如下所示:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# coding=utf-8
import os
from selenium import webdriver
#PhantomJS无界面浏览器
##driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
#打开火狐浏览器
#driver = webdriver.Firefox()
#谷歌浏览器
chromedriver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
#WebDriverException: Message: unknown error: session deleted because of page crash
url = "http://www.csdn.net/"
driver.get(url)
4. python pywin32 里面操作窗体,获取窗体里面的数据,在函数GetDlgItem函数中,怎么获取第二个参数的值
不知道你解决了没,最近正好研究python。
hwnd=win32gui.FindWindow()这个获取窗体句柄,大概都会用;
ctrl=win32gui.FindWindowEx(hwnd,None,'窗口类名',‘标题文本’)已知控件类名或控件名时获取控件句柄,这个标题文本不一定存在,所以使用None默认值获取的是该窗口类名中第一个顺位的控件句柄。
你使用b=win32gui.GetDlgItem(edit,资源ID)最终结果是获取的是句柄,这里的资源ID其实是spy++中的窗口ID,句柄是可变的,窗口ID是不可变的。这里似乎错了,你这样子大概获取的是控件中的子项(控件有子项的话,比如Combox中的edit框),我猜的,没试过。b=win32gui.GetDlgItem(hwnd,窗口ID)是已知ID下获取某控件句柄
如果你想获取某个控件的ID则ctrlid=win32gui.GetDlgCtrlID(ctrl)这是一只某控件句柄的情况下获取该控件在应用程序中的窗口ID。
如果不知控件句柄的情况下大概可以试试spy++获取窗口ID,把窗口ID(这个是16进制的)转化成10进制带进b=win32gui.GetDlgItem(hwnd,窗口ID)大概也可以得到控件句柄。
其实就是三个函数之间的转化
ctrl=win32gui.FindWindowEx(hwnd,None,'edit',None)控件句柄
ctrlid=win32gui.GetDlgCtrlID(ctrl)控件的窗口id
ctrl2=win32gui.GetDlgItem(hwnd,ctrlid)控件句柄
print "%x" %ctrllist
print "%x" %ctrlid
print "%x" %ctrl
输出,看一下数据与spy++是否一致。然后ctrl=ctrl2
5. Python怎么控制窗口
控制窗口是一个很复杂的过程,必须要请专业的人员来帮助个人,没有办法解决
6. python中获取子窗口的句柄
可以使用win32gui 以及pyhook 库来实现你的需求
7. python怎么定位到windows窗口
前段时间使用了一下google的博客空间,感觉也很一般,所以现在把那里的几篇文章转过来。执行python脚本只需要对python文件做如下操作即可:在python文件里第一行加上#! /usr/bin/python,即你的python解释器所在的目录。另外还有一种写法是#! /
8. python 获得编辑区句柄
你拿到的是主窗口句柄,还需要搜索遍历,找到子窗口或控件。有些是自定义,只能通过位置定义。
9. python 用什么模块获取句柄
可以下载pywin32。
可用win32api,win32ui,win32gui等模块可获取窗口句柄。
10. python如何进行桌面开发有哪些资料可供参考
这里介绍3个python桌面开发的包,分别是tkinter,wxpython和pyqt,这3个包都可以快速的开发出桌面应用,下面我简单介绍一下这3个包的安装和使用,实验环境win10+python3.6+pycharm5.0,主要内容如下:
1.tkinter:这个是python自带的开发桌面GUI的标准库,不需要安装,跨平台、可移植性高,支持主流的操作系统,像Windows,Linux,Mac等,python自带的IDLE就是采用这个包开发,简单易学,容易上手,适合小型项目的开发,入门GUI开发的话,可以试一下这个包,官网资料https://docs.python.org/2/library/tkinter.html:
程序运行如下:
2.wxpython:这是python一个优秀、成熟的跨平台GUI包,但不是自带的标准库,需要单独安装,支持的组件众多,可以帮助程序员快速的创建功能齐全、界面友好的GUI界面,应用广泛,非常适合中小型项目的开发,官网资料https://docs.wxpython.org/,可以参考学习一下,下面我简单介绍一下安装和使用:
安装,这里直接在cmd窗口输入命令“pip install wxpython”就行,如下:
安装成功后,就可以进行简单的测试了,代码如下,一个简单编辑器:
程序运行截图如下:
3.pyqt:这个是Qt提供给python的一个接口包,Qt功能强大,组件众多,可以快速构建用户GUI界面,所以pyqt的功能也十分强大,借助于Qt,我们可以构建桌面应用,下面我简单介绍一下pyqt的安装和使用,官网资料http://pyqt.sourceforge.net/Docs/PyQt5/:
安装pyqt5,这个直接在cmd窗口输入“pip install pyqt5”就行,如下:
测试代码如下,一个简单的计算器:
程序运行截图如下:
当然,你也可以借助designer.exe直接拖拽控件,完成GUI界面开发,如下,最后打包成py文件就行:
目前,就介绍这3个包吧,网上也有许多这方面的教程,感兴趣的话,可以搜搜,希望以上分享的内容能对你有所帮助吧。