前言

在很多情况下,需要我们重复操作Windows上的程序。如果采用人工的方法确实可以达到这个目的,但是如果是需要昼夜长此以往的操作,显然人工的方式有点力不从心,毕竟人不是机器。我们可以借助python来实现这个功能,python提供了大量功能强大的库供我们使用。pywinauto可以帮我们实现windows自动化,当然也有很多模块可以辅助进行windows自动化测试,比如time、datetime、loggging、configparser、pyautogui等。
本文主要介绍使用pywinauto来实现windows自动化。使用pip install pywinauto命令进行下载,下载完成有“successfully installed”即可。


一、使用步骤

1.引入库

代码如下(示例):

from pywinauto.application import Application

2.打开指定程序

这里以打开xshell应用为例,实现简单的自动化操作。首先使用inspect这个小软件来确定软件的类型,而且还可以作元素定位,一般来说常用的类型都是’uia’格式。如果使用inspect不能获取窗口的结构,那么该软件很有可能时win32的,这时就需要修改为‘win32’,代码示例如下:

app = Application(backend='uia').start('exe的路径')

正常情况下,使用该代码就可以启动应用了。需要注意的是,自动化测试过程中需要保持电脑屏幕处于不锁屏状态,同时不要打断自动化操作流程。这里举个简单的例子,自动打开XMind应用。代码示例如下:

app = Application(backend='uia').start(r"C:\Program Files\XMind\XMind.exe")

此时可以看到已经成功打开Xmind应用,然后使用Inspect这个应用,可以查看到XMind的窗口标题为“XMinf”,我们可以用类名定位到该窗口。

3.控件元素定位、窗口操作、控件操作


定位到该窗口后可以使用print_control_identifiers()这个方法将窗口所有控件信息打印出来,方法里面可以添加参数depth为打印的深度,不添加则默认打印所有。方法里还可以添加filename参数指定文件名,这主要是将窗口控件信息输出到文本文件中,不添加该参数则默认打印到控制台。

dlg = app["XMind"]
dlg.print_control_identifiers()

执行该段代码之后,控制台输出所有控件信息,如下:

|    | Static - 'XMind'    (L508, T199, R553, B219)
   |    | ['XMindStatic', 'Static', 'XMind2', 'Static0', 'Static1']
   |    | child_window(title="XMind", control_type="Text")
   |    | 
   |    | ListBox - ''    (L497, T241, R684, B331)
   |    | ['XMindListBox', 'ListBox', 'XMindListBox0', 'XMindListBox1', 'ListBox0', 'ListBox1']
   |    |    | 
   |    |    | ListItem - ''    (L497, T241, R684, B271)
   |    |    | ['ListItem', 'XMindListItem', 'ListItem0', 'ListItem1', 'XMindListItem0', 'XMindListItem1']
   |    |    |    | 
   |    |    |    | Hyperlink - '最近'    (L497, T241, R684, B271)
   |    |    |    | ['Hyperlink', '最近Hyperlink', '最近', 'Hyperlink0', 'Hyperlink1']
   |    |    |    | child_window(title="最近", control_type="Hyperlink")
   |    |    |    |    | 
   |    |    |    |    | Image - ''    (L509, T246, R529, B266)
   |    |    |    |    | ['Image2', 'XMindImage', 'XMindImage0', 'XMindImage1']
   |    |    | 
   |    |    | ListItem - ''    (L497, T271, R684, B301)
   |    |    | ['ListItem2', 'XMindListItem2']
   |    |    |    | 
   |    |    |    | Hyperlink - '模版'    (L497, T271, R684, B301)
   |    |    |    | ['Hyperlink2', '模版Hyperlink', '模版']
   |    |    |    | child_window(title="模版", control_type="Hyperlink")
   |    |    |    |    | 
   |    |    |    |    | Image - ''    (L509, T276, R529, B296)
   |    |    |    |    | ['Image3', 'XMindImage2']
   |    |    | 
   |    |    | ListItem - ''    (L497, T301, R684, B331)
   |    |    | ['ListItem3', 'XMindListItem3']
   |    |    |    | 

此时,我们就可以定位元素了。以定位到“模板”这个按钮为例,可以使用类名进行定位,也可以使用child_window()进行定位。在刚才打印出来的元素信息中找到“模板”,这里使用child_window()来进行定位。定位到该元素之后,使用click_input()方法点击该按钮。代码示例如下:

modelbutton = dlg.child_window(title="模版", control_type="Hyperlink")
modelbutton.click_input()

此时重新运行脚本,可以看到自动打开XMind应用,并且自动点击了【模板】按钮。

完整代码如下:

from pywinauto.application import Application

app = Application(backend='uia').start(r"C:\Program Files\XMind\XMind.exe")
dlg = app["XMind"]
#dlg.print_control_identifiers()

modelbutton = dlg.child_window(title="模版", control_type="Hyperlink")
modelbutton.click_input()

总结

本文主要简单介绍一下使用pywinauto来做Windows自动化的方法,目前仅是打开Xmind应用,并做元素定位,然后进行点击等操作。

Logo

一站式 AI 云服务平台

更多推荐