关于自动化测试:基于Python+UIautomation的WindowsGUI自动化测试实战一记事本

31次阅读

共计 2015 个字符,预计需要花费 6 分钟才能阅读完成。

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 实现成果

正文完
 0