开发自动化测试程序的人是怎么用的?
发表时间:2023-09-05 18:00:54
文章来源:炫佑科技
浏览次数:202
菏泽炫佑科技
开发自动化测试程序的人是怎么用的?
模块学习笔记
前段时间,由于个人需要,在网上搜索了一些关于平台下自动化测试的资料,终于找到了一个相当不错的模块:这个模块可以通过直接pip轻松获取。 在学习这个模块的时候,做一些笔记,方便以后参考,也方便大家阅读。
0x00 概述
该库是开源的:
而且作者是中国人,是南京人,让我感觉很亲切。
这个库可以说非常实用。 在平台下,大部分软件都必须遵循规范,也就是说窗口、手柄、控件等都是通用的,并向外界提供这些接口。 先感谢您。 他的工作就是进一步整合这些接口开发自动化测试程序的人是怎么用的?,为开发者提供接口。 这极大的方便了那些想用它来开发自动化测试程序的人。
0x01 作者的文档
import subprocess
import uiautomation as automation
print(automation.GetRootControl())
subprocess.Popen('notepad.exe')
notepadWindow = automation.WindowControl(searchDepth = 1, ClassName = 'Notepad')
print(notepadWindow.Name)
notepadWindow.SetTopmost(True)
edit = notepadWindow.EditControl()
edit.SetValue('Hello')
edit.SendKeys('{Ctrl}{End}{Enter}World')
()方法会返回根控件,也就是整个可视桌面(这是正确的,对吧)
(=1,='') 方法将创建一个对象。 参数的作用就是细化如何找到我们想要的控件。 可用的参数有 =None、=、=、=1、Name、、Depth 等,你可以到源码下类的初始化方法 init 看看这些参数是如何使用的。
0x02 简单了解实现原理
作者链接了文档中的一篇博文,简单介绍了实现原理。 为了更好的掌握这个库的使用,我也简单学习一下这个原理。 (原文链接)
在*早的开发中,并没有自动化测试的概念。 1997年自动化软件开发,微软将MASS()组件集成到操作系统中。 不过,微软开发MASS组件的初衷并不是为了自动化测试,而是为了提供一套接口,让开发者可以轻松地为残疾人开发辅助软件,比如阅读等。 随着自动化测试的应用越来越广泛,微软也认真对待自动化测试的需求,并基于MASS重新封装了设计和实现的类库(.NET)。 从Win7系统开始的后续操作系统都集成了API的所有功能。 笔者在阅读了MSDN上的《UI's Guide》和网上的《UI》两篇文章后,用C++做了一个简单的封装,以方便在.Net平台上开发自动化测试应用。 我不太熟悉的人,比如我。
0x03 API学习总结
前面说过,这个模块是作者用C++对UIA的简单封装。 只要能理解面向对象编程,学起来并不是很难。 幸运的是,我在他的CSDN博客(原文链接)中找到了作者使用这个模块的例子,我以此作为学习的切入点。 代码如下:
#!python3
# -*- coding: utf-8 -*-
"""
本脚本可以获取QQ2017(v8.9.4)群所有成员详细资料,请根据提示做对应的操作
作者:yinkaisheng@foxmail.com
"""
import time
import uiautomation as automation
def GetPersonDetail():
detailWindow = automation.WindowControl(searchDepth= 1, ClassName = 'TXGuiFoundation', SubName = '的资料')
details = ''
for control, depth in automation.WalkControl(detailWindow):
if isinstance(control, automation.EditControl):
details += control.Name + control.CurrentValue() + '\n'
details += '\n' * 2
detailWindow.Click(-10, 10)
return details
def main():
automation.Logger.WriteLine('请把鼠标放在QQ群聊天窗口中的一个成员上面,3秒后获取\n')
time.sleep(3)
listItem = automation.ControlFromCursor()
if listItem.ControlType != automation.ControlType.ListItemControl:
automation.Logger.WriteLine('没有放在群成员上面,程序退出!')
return
consoleWindow = automation.GetConsoleWindow()
if consoleWindow:
consoleWindow.SetActive()
qqWindow = listItem.GetTopWindow()
list = listItem.GetParentControl()
allListItems = list.GetChildren()
for listItem in allListItems:
automation.Logger.WriteLine(listItem.Name)
answer = input('是否获取详细信息?按y和Enter继续\n')
if answer.lower() == 'y':
automation.Logger.WriteLine('\n3秒后开始获取QQ群成员详细资料,您可以一直按住F10键暂停脚本')
time.sleep(3)
qqWindow.SetActive()
#确保群里**个成员可见在*上面
left, top, right, bottom = list.BoundingRectangle
while allListItems[0].BoundingRectangle[1] < top:
automation.Win32API.MouseClick(right - 5, top + 20)
for listItem in allListItems:
if listItem.ControlType == automation.ControlType.ListItemControl:
if automation.Win32API.IsKeyPressed(automation.Keys.VK_F10):
if consoleWindow:
consoleWindow.SetActive()
input('\n您暂停了脚本,按Enter继续\n')
qqWindow.SetActive()
listItem.RightClick()
menu = automation.MenuControl(searchDepth= 1, ClassName = 'TXGuiFoundation')
menuItems = menu.GetChildren()
for menuItem in menuItems:
if menuItem.Name == '查看资料':
menuItem.Click()
break
automation.Logger.WriteLine(listItem.Name, automation.ConsoleColor.Green)
automation.Logger.WriteLine(GetPersonDetail())
listItem.Click()
automation.SendKeys('{Down}')
if __name__ == '__main__':
main()
input('press Enter to exit')
我使用的环境是.2社区版和.6。 该模块的内容主要集中在.py文件中。 学习的方法就是去这个文件里阅读相关代码。 我们先简单看一下这段代码,看看里面有没有什么不明白的地方。 我们不明白的地方正是我们需要学习的地方。
**个是.,它看起来是一个对象,但是我还不知道这个对象有什么方法和属性。 下面的 and 也应该是对象。 从命名上来看,它们可能直接代表表单中的不同控件。 。 应该是一个属性,下面的.Click()应该是一个模拟鼠标点击的方法。 再看main()函数,.()方法应该和日志有关,而()可能是获取鼠标控制权的方法...
读完本文后,您可能会知道应该在源代码中查找哪些定义。 我们使用跳转定义函数可以很容易找到定义这些类和方法的代码,这些代码都在.py文件中。 源码就不贴出来了。 通过跳转功能可以很容易地理解方法和类之间的逻辑关系。 这个文件主要定义了“控件”这个类,2000多行就是Class(........................):这一大段代码包含了控件的所有方法。 和基本属性。 方法包括获取控件名称、内容等,属性包括位置、是否等。然后从该类派生出各个子类,代表各种具体的控件,比如代表窗口的类、代表输入的类框、代表按钮的类等,几乎涵盖了所有Win Forms程序的所有控件。 而且作者在很多分类下都做了详细的评论,阅读起来应该没有困难。 理解的难点应该是开发方面的知识很多,需要一点基础。
那么当我们明确了这些方法和类的定义之后,我们就可以明白这个实例的作用了。 结合各个空间的属性和方法,可以从QQ群窗口获取QQ群信息。 包括群号、群成员信息、聊天记录等信息,并保存到文本文件中。
0x04 后记