python怎么做ui自动化-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

python怎么做ui自动化

云计算小粉 2018-05-10 20:11:03 1791

python怎么做ui自动化

Python
分享到
取消 提交回答
全部回答(2)
  • 游客aasf2nc2ujisi
    2019-11-06 10:50:08

    python做ui自动化,推荐你用selenium包

    demo:

    image.png

    要下载浏览器版本对应驱动放到,系统环境变量位置。

    0 0
  • xuning715
    2019-07-17 22:24:56

    说明:

    Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面。它可以允许你很容易的发送鼠标、键盘动作给Windows的对话框和控件。
    其中,最主要功能为对windows标准控件的一系列动作可编程处理。包括对窗口的指定、鼠标或键盘操作、获得控件属性等等。程序的开始为对所需应用的启 动或连接。获得程序连接后,pywinauto通过窗口的名称、类名、是否可见等属性寻找匹配的窗口,进而通过类似方法寻找用户所需的控件,并获得相应的 句柄。之后,用户可通过易理解的编程方式对指定控件进行相关操作的编程,包括鼠标点击、键盘输入、判断控件间关系、获取控件属性等。

    文档参考:

    pywinauto 0.5.4 documentation
    Windows GUI Automation with Python
    pywinauto官网,带Demo example
    在中文windows下使用pywinauto进行窗口操作
    用pywinauto进行win32应用程序的测试

    举个例子

    ! /usr/bin/env python

    coding=GB18030

    '''
    FuncName: johnny-pywinauto.py
    Desc: study pywinauto
    Date: 2016-10-10 14:30
    Author: johnny
    Home:http://blog.csdn.net/z_johnny
    '''

    from pywinauto import application
    import SendKeys
    import time

    class Pywin(object):

    """
    pywin framwork main class
    tool_name : 程序名称,支持带路径
    windows_name : 窗口名字
    """
    SLEEP_TIME = 1
    
    def __init__(self):
        """
        初始化方法,初始化一个app
        """
        self.app = application.Application()
    
    def run(self, tool_name):
        """
        启动应用程序
        """
        self.app.start_(tool_name)
        time.sleep(1)
    
    def connect(self, window_name):
        """
        连接应用程序
        app.connect_(path = r"c:\windows\system32\notepad.exe")
        app.connect_(process = 2341)
        app.connect_(handle = 0x010f0c)
        """
        self.app.connect_(title = window_name)
        time.sleep(1)
    
    def close(self, window_name):
        """
        关闭应用程序
        """
        self.app[window_name].Close()
        time.sleep(1)
    
    def max_window(self, window_name):
        """
        最大化窗口
        """
        self.app[window_name].Maximize()
        time.sleep(1)
    
    def menu_click(self, window_name, menulist):
        """
        菜单点击
        """
        self.app[window_name].MenuSelect(menulist)
        time.sleep(1)
    
    def input(self, window_name, controller, content):
        """
        输入内容
        """
        self.app[window_name][controller].TypeKeys(content)
        time.sleep(1)
    
    def click(self, window_name, controller):
        """
        鼠标左键点击
        example:
        下面两个功能相同,下面支持正则表达式
        app[u'关于“记事本”'][u'确定'].Click()
        app.window_(title_re = u'关于“记事本”').window_(title_re = u'确定').Click()
        """
        self.app[window_name][controller].Click()
        time.sleep(1)
    
    def double_click(self, window_name, controller, x = 0,y = 0):
        """
        鼠标左键点击(双击)
        """
        self.app[window_name][controller].DoubleClick(button = "left", pressed = "",  coords = (x, y))
        time.sleep(1)
    
    def right_click(self, window_name, controller, order):
        """
        鼠标右键点击,下移进行菜单选择
        window_name : 窗口名
        controller:区域名
        order : 数字,第几个命令
        """
        self.app[window_name][controller].RightClick()
        for down in range(order):
                SendKeys.SendKeys('{DOWN}')
                time.sleep(0.5)
        SendKeys.SendKeys('{ENTER}')
        time.sleep(1)
    

    if name == "__main__":

    app = Pywin()
    # 记事本例子
    tool_name = "notepad.exe"
    # 通过Spy++ 获取window_name,即标题文本
    window_name = u"无标题 - 记事本"
    menulist = u"帮助->关于记事本"
    # 通过Spy++ 获取controller,即窗口类名
    controller = "Edit"
    content = u"johnny"
    window_name_new = content + ".txt"
    # 启动程序,记事本只能开一个
    app.run(tool_name)
    app.connect(window_name)
    app.max_window(window_name)
    app.menu_click(window_name,menulist)
    app.click(u'关于记事本', u'确定')
    app.input(window_name,controller,content)
    # Ctrl + a 全选
    app.input(window_name,controller,"^a")
    # 选择复制
    app.right_click(window_name,controller,3)
    #选择粘贴
    app.right_click(window_name,controller,4)
    SendKeys.SendKeys('{ENTER}')
    # Ctrl + v 粘贴
    app.input(window_name,controller,"^v")
    # Ctrl + s 保存
    app.input(window_name,controller,"^s")
    # 输入文件名
    app.input(u"另存为",controller,content)
    # 保存
    app.click(u"另存为","Button")
    try:
        app.click(u"确认另存为","Button")
    except:
        pass
    finally:
        app.close(window_name_new)
    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    其他

    1.安装

    pip install pywinauto
    pip install SendKeys

    SendKeys 需要VCForPython27.msi环境支持

    1
    2
    3
    VCForPython27(SendKeys需要).msi 官方下载

    2.SendKeys中特殊字符的键代码

    BACKSPACE {BACKSPACE}、{BS} 或 {BKSP}
    BREAK {BREAK}
    CAPS LOCK {CAPSLOCK}
    DEL 或 DELETE {DELETE} 或 {DEL}
    DOWN ARROW(下箭头) {DOWN}
    END {END}
    ENTER {ENTER} 或 ~
    ESC {ESC}
    HELP {HELP}
    HOME {HOME}
    INS 或 INSERT {INSERT} 或 {INS}
    LEFT ARROW(左箭头) {LEFT}
    NUM LOCK {NUMLOCK}
    PAGE DOWN {PGDN}
    PAGE UP {PGUP}
    PRINT SCREEN {PRTSC}(保留,以备将来使用)
    RIGHT ARROW(右箭头) {RIGHT}
    SCROLL LOCK {SCROLLLOCK}
    TAB {TAB}
    UP ARROW(上箭头) {UP}
    F1 {F1}
    F2 {F2}
    F3 {F3}
    F4 {F4}
    F5 {F5}
    F6 {F6}
    F7 {F7}
    F8 {F8}
    F9 {F9}
    F10 {F10}
    F11 {F11}
    F12 {F12}
    F13 {F13}
    F14 {F14}
    F15 {F15}
    F16 {F16}
    数字盘加号 {ADD}
    数字盘减号 {SUBTRACT}
    数字盘乘号 {MULTIPLY}
    数字盘除号 {DIVIDE}

    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程