首页 > 系统相关 >基于Python+UIautomation的WindowsGUI自动化测试实战(一)-记事本

基于Python+UIautomation的WindowsGUI自动化测试实战(一)-记事本

时间:2023-01-13 13:31:07浏览次数:41  
标签:WindowsGUI UIautomation 优美 Name Python 代码 notepad self

1 测试需求

模拟用户操作,打开记事本进行内容输入

2 测试步骤

2.1 用例1

  • 打开记事本;
  • 窗口最大化;
  • 输入"人生苦短,我用Python!";
  • 关闭窗口;
  • 不保存直接退出。

2.2 用例2

  • 打开记事本;
  • 窗口最大化
  • 输入:
 				     Python之禅!
优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
当存在多种可能,不要尝试去猜测
而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)"
  • 关闭窗口;
  • 不保存直接退出。

3 实现脚本

# -*- coding:utf-8 -*-

import unittest
import time
import uiautomation
import subprocess

class TestNotePad(unittest.TestCase):
    def setUp(self) -> None:
        # 初始化
        subprocess.Popen("notepad.exe")  # 打开记事本
        time.sleep(1)
        self.notepad = uiautomation.WindowControl(Name="无标题 - 记事本")
        time.sleep(1)
        print("===============", self.notepad)
        self.notepad.ButtonControl(Name="最大化").Click()

    def tearDown(self) -> None:
        time.sleep(1)
        self.notepad.ButtonControl(Name="关闭").Click()
        time.sleep(0.5)
        self.notepad_1 = uiautomation.WindowControl(Name = "记事本")
        self.notepad_1.SetTopmost()
        self.notepad_1.ButtonControl(Name="不保存(N)").Click()
    def test_notepad(self):
        self.notepad.SetTopmost()
        time.sleep(1)
        text_content = "人生苦短,我用Python!"
        self.notepad.EditControl(Name="文本编辑器").SendKeys(text_content)

    def test_notepad_text(self):
        self.notepad.SetTopmost()
        time.sleep(1)
        text_content_1 = ' '*47 + "Python之禅!\n\
                          优美胜于丑陋(Python 以编写优美的代码为目标)\n\
                          明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)\n\
                          简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)\n\
                          复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)\n\
                          扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)\n\
                          间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)\n\
                          可读性很重要(优美的代码是可读的)\n\
                          即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)\n\
                          不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)\n\
                          当存在多种可能,不要尝试去猜测\n\
                          而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)\n\
                          虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )\n\
                          做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)\n\
                          如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)\n\
                          命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)"
        self.notepad.EditControl(Name="文本编辑器").SendKeys(text_content_1)


if __name__ == "__main__":
    unittest.main()

4 实现效果

在这里插入图片描述

标签:WindowsGUI,UIautomation,优美,Name,Python,代码,notepad,self
From: https://blog.51cto.com/NoamaNelson/6005910

相关文章

  • 用Python执行程序的4种方式
    在编写代码中,经常会遇到在Python程序中打开外部程序的需求,那么在Python里如何打开外部程序呢?今天我们来介绍四种不同的方式,供大家参考收藏。使用os.system()os.system(......
  • Python字典和集合初窥
    (Python进阶10-字典与集合)1字典字典和列表类似,同样是可变序列,不过与列表不同,字典是无序的。字典的主要特征:1.1字典的创建和删除字典的每个元素都包含“键”和“......
  • Python函数的学习总结
    (Python进阶11-函数)1函数的创建和调用1.1函数创建创建函数即定义函数使用关键字def实现语法:deffname([pname]): ["comm"] [fuc]说明:def:定义函数的,固定......
  • python django 医院挂号系统
    pythondjango医院挂号系统pythondjango挂号管理系统pythondjango医院挂号管理系统后端:pythondjango数据库:MySQL5.7前端:html cssjs等涉及功能:登陆、退出......
  • python实战-解析swagger-api接口信息
    *coding:UTF-8*"""@project->file:city-test->swagger_api_parse_backup@Author:qinmin.vendor@Date:2023/1/1217:55@Desc......
  • python django个人云盘系统
    pythondjango云盘系统pythondjango个人云盘pythondjango本地云盘Pythondjango文件系统 后端:pythondjango数据库:MySQL5.7前端:html cssjs等涉及功能:登陆......
  • 详解Python列表和元组
    (详解Python的列表和元组)1序列序列是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。Python序列结构主要有列表、......
  • Python:Nunmpy中的meshgrid函数
    1numpy.meshgrid()官方文档中的作用是从坐标向量中返回坐标矩阵,也就是生成网格点坐标矩阵。Parameters:*xi:array_like数组x1,x2,...,xn,1-D维数组,表示网格的坐标。......
  • Python 如何使用 BeautifulSoup 实现解析二手房详情页信息并存储文件
    一、实战场景Python如何使用BeautifulSoup实现解析二手房详情页信息并存储文件二、知识点Python基础语法Python文件读写BeautifulSoup解析网页requests发送网络请求......
  • python虚拟环境迁移问题
    python虚拟环境迁移问题问题因目标机器网络限制,无法通过pip直接安装依赖包,但直接复制虚拟环境到另一台机器会,会导致无法执行python脚本文件本机python环境打包先......