pywinauto:Windows桌面应用自动化测试(七)

前言

上一篇文章地址:

pywinauto:Windows桌面应用自动化测试(六)-CSDN博客

下一篇文章地址:

暂无

一、实战常用方法

1、通过Desktop快速获取窗口

通过之前章节我们了解到控制应用的方法为Application,需要连接应用再获取窗口。

from pywinauto.application import Application

现在我们可以通过Desktop直接获取窗口。

from pywinauto import Desktop   
 
def is_logged_in():
    return Desktop(backend='uia').window(title='Main Page').exists()

两种方法对比如下:

特性 Desktop 方法 Application 方法
用途 查找和连接所有已打开的窗口 启动和控制特定的应用程序
适用场景 需要与系统中所有应用程序或窗口进行交互 需要启动和控制特定应用程序
性能 可能因为需要遍历所有窗口而较慢 对于特定应用程序的操作更加高效
灵活性 可以与任何已打开的窗口进行交互 只能控制当前脚本启动的应用程序
启动应用程序 不适用 可以启动新的应用程序
控制应用程序生命周期 不适用 可以启动、关闭和重新启动应用程序
示例代码 Desktop(backend='uia').window(title="...") Application(backend='uia').start('...').window(title="...")

2、获取嵌套窗口

假设窗口嵌套了很多层,那么我们该如何获取他呢?一层层获取,还是直接获取?其实,两种方式都可行,对于直接获取,可以采用Desktop方法,也可以获取到应用窗口后,采用children_window方法直接获取。

3、children_window与children的方法对比

(1)child_window方法

child_window方法用于精确查找单个子控件。它不会返回列表,而是返回第一个匹配的控件。如果没有找到匹配的控件,会引发异常。

(3)children方法

children方法用于获取一个窗口的所有直接子控件。这个方法会返回一个包含子控件的列表。它接受多个参数来筛选符合条件的控件。

特性 child_window 方法 children 方法
用途 根据特定属性查找单个子控件 获取所有子控件,或根据条件筛选子控件
返回值 单个控件对象 控件对象的列表
适用场景 查找特定的、已知属性的控件 需要遍历和操作多个控件
属性过滤 可以使用多个属性过滤 可以传递条件进行筛选
性能 查找单个控件,性能较高 获取所有子控件,如果控件较多,性能可能受影响
示例代码 main_window.child_window(title="...", control_type="...") main_window.children(control_type="...")

4、inspect使用小技巧

当我们想选中窗口时,可以点击它来显示定位元素看看有没有框,如下图,你觉得你选中了框,但实际上你可能选中了标题。

还有一点就是元素的点击区域,你以为点中了,实际上只是点钟了框的中心,而它的作用域是文字部分。

5、控制应用内嵌的系统文件窗口

假设应用调用了系统文件窗口,需要对两个输入框输入信息,如下展示:

其中1需要输入文件路径,2需要输入文件名。

这种情况就需要使用多种操作来实现该功能,以下是一个简单的代码:

    def get_upgrade_folder_win(self):
        '''获取升级选择文件的窗口'''
        # return self.dialog.child_window(auto_id="MainForm.widget_client.viScanner.qt_tabwidget_stackedwidget.FormEquipmentlist.FirmUpgrageBox.widget.widget_path.pushButton_browers")
        # return Desktop(backend="uia").window(title_re="请选择固件升级文件")
        return self.dialog.child_window(title="请选择固件升级文件")

    def choise_upgrade_file(self, file_path):
        '''选择升级文件,需要传输文件路径:
        # 定义文件路径
        file_path = r"C:\Users\Downloads\OTA.gta"
        '''
        upgrade_win = self.get_upgrade_folder_win()
        # 分割路径
        directory, filename = os.path.split(file_path)
        print("Directory:", directory)
        print("Filename:", filename)
        upgrade_win.print_control_identifiers()
        way_element = upgrade_win.child_window(title_re=".*地址.*", found_index=0)
        rectangle = self._element_num_of_copies(way_element, 5 / 6)
        click(coords=rectangle)
        upgrade_win.child_window(title_re=".*地址.*", class_name="Edit", found_index=0).type_keys("{BACKSPACE}")
        upgrade_win.child_window(title_re=".*地址.*", class_name="Edit", found_index=0).set_text(directory)
        from pywinauto.keyboard import send_keys
        send_keys("{ENTER}")
        upgrade_win.child_window(title="文件名(N):", class_name="Edit").set_text(filename)

这里涉及到一些输入文本的方法,汇总一下:

(1)set_text方法:

直接设置控件的文本内容。

app.window(title='YourWindowTitle').Edit.set_text('YourText')

(2)type_keys方法:

模拟按键输入,可以包括特殊键(如回车键、Tab键等)。

app.window(title='YourWindowTitle').Edit.type_keys('YourText{ENTER}')

(3)send_keys方法:

使用pywinauto.keyboard模块,可以模拟全局键盘输入。

from pywinauto.keyboard import send_keys

send_keys('YourText{ENTER}')

(4)WrapperObject.set_edit_text方法:

用于直接设置编辑控件的文本内容

edit = app.window(title='YourWindowTitle').Edit.wrapper_object()

edit.set_edit_text('YourText')

(5)WrapperObject.send_chars方法:

模拟逐字符输入

edit = app.window(title='YourWindowTitle').Edit.wrapper_object()

edit.send_chars('YourText')

一些特殊字符的输入方式总结如下:

特殊字符 描述 输入方式 (type_keys) 输入方式 (send_keys)
{SPACE} 空格键 {SPACE} {SPACE}
{BACKSPACE} 退格键 {BACKSPACE}, {BS}, {BKSP} {BACKSPACE}, {BS}, {BKSP}
{BREAK} Break 键 {BREAK} {BREAK}
{CAPSLOCK} 大写锁定键 {CAPSLOCK} {CAPSLOCK}
{DELETE} 删除键 {DELETE}, {DEL} {DELETE}, {DEL}
{DOWN} 向下箭头键 {DOWN} {DOWN}
{END} 结束键 {END} {END}
{ENTER} 回车键 {ENTER}, ~ {ENTER}, ~
{ESC} Escape 键 {ESC} {ESC}
{HELP} 帮助键 {HELP} {HELP}
{HOME} Home 键 {HOME} {HOME}
{INSERT} 插入键 {INSERT}, {INS} {INSERT}, {INS}
{LEFT} 向左箭头键 {LEFT} {LEFT}
{NUMLOCK} 数字锁定键 {NUMLOCK} {NUMLOCK}
{PGDN} 向下翻页键 {PGDN} {PGDN}
{PGUP} 向上翻页键 {PGUP} {PGUP}
{PRTSC} 打印屏幕键 {PRTSC} {PRTSC}
{RIGHT} 向右箭头键 {RIGHT} {RIGHT}
{SCROLLLOCK} 滚动锁定键 {SCROLLLOCK} {SCROLLLOCK}
{TAB} Tab 键 {TAB} {TAB}
{UP} 向上箭头键 {UP} {UP}
{ADD} 加号键 {ADD} {ADD}
相关推荐
Lion King5 个月前
pywinauto:Windows桌面应用自动化测试(六)
ui自动化
Codebill7 个月前
RunnerGo V4.6.0 新增功能介绍
自动化测试·测试工具·性能测试·ui自动化·loadrunner·runnergo
AE—Darren洋1 年前
全新ui自动化测试框架教学——Cypress
自动化测试·测试工具·ui自动化·cypress
京东云开发者1 年前
浅谈仓储UI自动化之路
测试·ui自动化·分层测试
Lion King1 年前
pywinauto:Windows桌面应用自动化测试(三)
ui自动化
我是冯朗1 年前
macos搭建appium-iOS自动化测试环境
macos·appium·mac·wda·ui自动化