精华内容
下载资源
问答
  • pywinauto

    千次阅读 2019-04-22 22:19:16
    pywinauto :自动化窗体程序 一、工具:Inspect.exe 获取窗体或者控件的属性 首先需要选择UI Automation,选中黄色的小框框把选中的需要定位的区域 Inspect 主要属性定位唯一的元素 ControlType 对应python中例如:...

    pywinauto :自动化窗体程序
    一、工具:Inspect.exe 获取窗体或者控件的属性
    首先需要选择UI Automation,选中黄色的小框框把选中的需要定位的区域
    在这里插入图片描述

    Inspect 主要属性定位唯一的元素
    ControlType 对应python中例如:control_type

    app.window(control_type='Menu',class_name='#32768')
    

    ClassName 对应python中的class_name
    Name 对应python 中的title 例如:

    password = loginform.child_window(title='用户密码:', class_name='Edit')
    

    Children 查看这个窗体下面还有哪些Childwindow

    Ancestors :查看父窗体的,这个父窗体是从上到下是一级一级递进的,例如这个窗体的上一级就是网易有道词典窗体,网易有道词典窗体的上一级就是桌面
    Ancestors 很有用,可以通过它找到父窗体,然后定位到自己比如:

    loginform=app.window(class_name='SWT_Window0') #定位父窗体
    #根据父窗体找到自己
    user=loginform.child_window(title='用户名称:', class_name='Edit') 
    

    二. 连接应用与登陆
    1) 第一次连接未打开的

    from pywinauto import application
    app = application.Application('uia').connect(path=MyProfile.app_path)
    

    2) 程序在进程中说明进程没有关闭的,但是没有登陆

    app = application.Application("uia").connect(title='有道词典"', timeout=10)
    

    3)输入用户名和密码,点击登陆
    文本框输入信息可以通过如下几种方法
    (1).定位到这个元素user.type_keys(‘231’)如下:
    (2).定位到这个元素user.set_text(‘231’)如下:
    (3).如果以上两种方法都不行的化,键盘强制输入
    pywinauto.keyboard.send_keys(‘231’) 这种情况不需要定位到具体的文本,
    光标落在哪个输入框就输入哪个文本框

      user=loginform.child_window(title='用户名称:', class_name='Edit')
      user.type_keys('231') # 在输入框中输入密码
      password = loginform.child_window(title='用户密码:', class_name='Edit')
      password.type_keys('122') #在输入框中输入密码
    
    展开全文
  • pywinauto下载

    2018-05-26 18:06:37
    pywinauto下载pywinauto下载pywinauto下载pywinauto下载pywinauto下载pywinauto下载
  • pywinauto使用

    2020-05-26 03:02:58
    pywinauto的使用介绍,可以用来自动化鼠标,键盘等事件的处理
  • pywinauto教程

    万次阅读 多人点赞 2018-10-22 12:53:06
    pip install pywinauto 2.手动安装方法 安装包下载链接: pyWin32: python调用windows api的库 https://sourceforge.net/projects/pywin32/files/pywin32/Build 220/ comtypes: COM接口的调度...

    **

    一、环境安装

    **
    1.命令行安装方法
    pip install pywinauto

    2.手动安装方法
    安装包下载链接:
    pyWin32: python调用windows api的库
    https://sourceforge.net/projects/pywin32/files/pywin32/Build 220/

    comtypes: COM接口的调度https://github.com/enthought/comtypes/releases

    six: 用来兼容Python2和Python3的库
    https://pypi.org/project/six/

    Pillow:可选,用来做屏幕截图的
    https://pypi.org/project/Pillow/2.7.0/

    Pywinauto:PC端自动化工具
    https://github.com/pywinauto/pywinauto/releases

    解压缩后执行 python setup.py install
    注:建议使用第一种命令行安装,方便。

    3.环境检查
    命令行中打开python解释器,运行以下代码,windows自带的记事本会被启动,若无报错,则证明pywinauto已安装成功。

      from pywinauto.application import Application
      app = Application(backend="uia").start("notepad.exe")
    

    在这里插入图片描述

    二、PC端元素定位工具介绍及判断backend
    1.Backend判断
    Pywinauto中backend有两种:win32和uia,默认为win32。可使用spy++和Inspect工具判断backend适合写哪种。例如:如果使用Inspect的UIA模式,可见的控件和属性更多的话,backend可选uia,反之,backend可选win32。
    在这里插入图片描述

    2.工具介绍

    1. Spy++ (定位元素工具(win32))
    2. Inspect(定位元素工具(uia))
    3. UI Spy (定位元素工具)
    4. Swapy(可简单生成pywinauto代码)

    三、启动并创建一个实例对象
    1.启动
    start()用于还没有启动软件的情况。timeout为超时参数(可选),若软件启动所需的时间较长可选timeout,默认超时时间为5s。
    start(self, cmd_line, timeout=app_start_timeout)
    示例:
    app = Application(backend = ‘uia’).start(r"E:\Office\Office14\EXCEL.exe)

    2.连接
    connect()用于连接已经启动的程序。连接一个已经运行的程序有以下几种方法:
    a)process:进程id
    app = Application().connect(process=2341)
    b)handle:应用程序的窗口句柄
    app = Application().connect(handle=0x010f0c)
    c)path:进程的执行路径(GetModuleFileNameEx 模块会查找进程的每一个路径并与我们传入的路径去做比较)
    app = Application().connect(path=“D:\Office14\EXCEL.exe”)

    d)参数组合(传递给pywinauto.findwindows.find_elements()这个函数)
    app = Application().connect(title_re=".*Notepad", class_name=“Notepad”)

    注:
    应用程序必须先准备就绪,才能使用connect(),当应用程序start()后没有超时和重连的机制。在pywinauto外再启动应用程序,需要sleep,等程序start

    四、 窗口、对话框及控件元素定位方式
    1.window,dialog定位方式
    1)基于title定位
    a)如何获取title?
    title为窗口的名称,可使用UISpy一类的定位元素工具去查找。
    如图所示,该对话框中的title为Name属性值:“替换”
    在这里插入图片描述

    b)若使用定位元素工具找不到title怎么办?
    使用print_control_identifiers()方法打印出当前窗口或对话框中的所有title
    格式:
    app.YourDialog. print_control_identifiers()

    示例如图,demo详见locate_by_title.py:
    在这里插入图片描述

    c)使用title定位方式的写法
    Untitled_notepad = u’无标题 – 记事本’
    app. Untitled_notepad.draw_outline(colour = ‘red’) #app.window(best_match=‘Untitled - Notepad’)
    注:这种写法适用于英文系统,英文软件,其他语言的系统会存在编码问题,需转码再使用。

    app[‘无标题 – 记事本’] .draw_outline(colour = ‘red’)
    注:适用于除英文外其他语言的系统,不用转码

    2)top_window()定位
    app.top_window() #此方法可返回应用软件的最顶层窗口(是窗口,不是窗口弹出的对话框)
    注:此方法目前没有经过测试,它会返回应用程序的顶级窗口,但可能不是Z-Order中的顶级窗口。

    3)关键字传参
    若以上方法不能满足定位元素的需求,可使用以下列表中的参数传参定位元素,参数可以组合使用。
    示例:
    app.window(class_name = ‘Notepad’).draw_outline(colour = ‘red’)

    常用参数表:

    可传参数 对应属性名称备注
    class_name ClassName
    class_name_re 正则匹配window Classname
    title Name Window窗口名
    title_re 正则匹配窗口名
    best_match 模糊匹配类似的title
    handle 句柄
    framework_id FrameworkId(一般情况下FrameworkId不是唯一的)
    process ProcessId,进程id(注意:每次启动后,进程id都会变)
    control_id control_id
    control_type ControlType()
    auto_id AutomationId

    2. control定位方式

    1. 基于title定位(同window,dialog中的title定位)
      app[‘your dialog title’][‘your control title’]

      app.dlg.control

    2. 层级定位
      app.window(class_name = ’Notepad’).window(class_name = ‘#32770’)
      app.window(class_name = ‘Notepad’).child_window(class_name = ‘#32770’)

    3. wpath定位
      若元素值为空,或不是唯一的情况下,可使用类似selenium中xpath的定位方式,根据查子元素的序号去定位元素。
      示例:
      app_window = app.window(class_name=‘Qt5QWindowIcon’) #定位登录窗口
      app_window.children()[1].children()[0].children()[0] .children()[2] #定位用户名输入框控件(序号从0开始查)

    五、常用方法

    1**.调试定位控件**
    a)print_control_identifiers(depth = None, filename = None)
    以树形结构打印出所有控件可识别出的标识
    depth:打印的深度,缺省时打印最大深度。
    filename:将返回的标识存成文件(生成的文件与当前运行的脚本在同一个路径下)
    eg:dlg. print_control_identifiers(filename =’a.txt’)

    b)draw_outline(colour =’green’,thickness = 2,
    fill = win32defines.BS_NULL, rect = None)
    默认为在当前定位到的窗口或控件周围画出一条边界线,方便我们看出定位到了哪个控件
    colour:边界线的颜色,默认为绿
    thickness:线的粗细,默认为2
    fill:以何种方式填充矩形(没试过,详见源码base_wrapper.py)
    rect:根据坐标画出矩形(默认是在当前定位到的元素上画出一个矩形)
    c) is_dialog 判断是否为dialog

    2. 隐式等待
    a) wait(wait_for, timeout = None, retry_interval = None)
    wait_for可传入五种参数, 可以组合传参,但要以空格隔开:
    exists: 窗口变成有效的句柄
    visible: 窗口可见,没有隐藏
    enabled: 窗口没有disable
    ready: visible + enable
    active: active
    timeout:设置超时时间,若在n秒内没有等到窗口在wait_for中传入的几种状态,则会抛出TimeoutError。
    retry_interval:超时后,间隔n秒再次重试。
    Dlg.wait(“exists ready”, timeout = 5, retry_interval = 3)

    b) wait_not(wait_for_not,timeout = None,retry_interval = None)
    等待窗口不处于某种状态时。参数与wait传参一致。

    3. 输入框输入
    a)type_keys()
    Dlg.control.type_keys(“xxxxx”)
    4. 菜单栏
    menu_select()
    eg:app.window.menu_select(Edit -> Replace)
    5. 鼠标点击
    a)click() 点击Button控件
    b)check_by_click() 通过click()方法勾选checkbox
    c)uncheck_by_click() 通过click()方法取消勾选checkbox
    d)get_check_state() 返回checkbox的勾选状态(0没勾选,1勾选,2不定)
    e)is_checked(勾选返回true,为勾选返回false,不定返回None)
    f)check() 勾选checkbox
    g)uncheck() 不勾选checkbox
    h)invoke() 点击(uia mode)
    i)toggle () 勾选checkbox(uia mode)
    6. 键盘操作
    “+”:Shift
    “^”:Control
    “%”:Alt
    在这里插入图片描述

    pwinauto中,win32与uia的调用方法不同,定位方式,常用方法有空会后续更新。。。。
    转载请注明出处

    展开全文
  • pywinauto

    2012-07-25 01:36:47
    pywinauto实例001
  • pywinauto pywinauto is a set of python modules to automate the Microsoft Windows GUI. At its simplest it allows you to send mouse and keyboard actions to windows dialogs and controls, but it has ...
  • Pywinauto Guideline

    2019-01-12 12:42:21
    Pywinauto Guideline
                   

    http://blog.csdn.net/horkychen/article/details/6324530

     

    有奖征集活动系列——【HTML5游戏编程之旅】          专访贺炘:软件测试应讲究策略和方法    低价抢购开源中国论坛门票     CSDN博客第一期云计算最佳博主评选     Intel Perceptual Camera体验之旅 

    分类:            Python/Perl2011-04-14 23:381760人阅读评论(2)收藏举报

    安装

    1.安装Python

    2.下载SendKeys并安装 (http://pypi.python.org/pypi/SendKeys )

    setup.py --install

    3.下载pywinauto并安装 (http://pypi.python.org/pypi/pywinauto/0.4.0 )

    setup.py --install

    4. 研究pywinauto包中的文档及例子

    启动应用程序

                gWORD2003 = ur"C://Program Files//Microsoft Office//OFFICE11//WINWORD.EXE"

    app = application.Application()

                app.start_(gWORD2003)

               

    连接到已运行的应用程序

                app = application.Application().connect_(title_re = AppName)

    如何标识一个窗口

    1.      使用窗口标题

    gWizardStr = “Wizard”

    MainDlg = app[gWizardStr]

    窗口标题也可以直接当成一个变量形式使用 (不建议):

    MainDlg = app.Wizard

    2.      使用正则表达式匹配

    dlg= app.window_(title_re=".*Page Setup", class_name="#32770")

    3.      直接取最上层窗口

    MainDlg=app.top_window_()

    如何标识一个控件

                匹配的顺序为:

    a.       Title

    b.      Friendly class

    c.       Title + Friendly class

    使用Title比较简单,如控制Next按钮,下面两种方式有相同的功能:

        Dialog.Next.Click()

        Dialog[“Next”].Click()

    Friendly class对于一般的控件比较简单,如:

      Dialog.Button1.Click()

      Dialog.ComboBox1.Select(1)

    注意Button,Button0及Button1都是代表第一个Button. 关于顺序,也要注意如果存在嵌入窗口,则其内部的子控件顺序是依据其在主窗口的顺序而定的。所以使用如下打印出所有控件的标识很有帮助:

        WindowSpecification.print_control_identifiers()

    对于自定义的控件,Friendly class 可以通过Visual Studio带的Spy++来查看:

    相应的代码为:

    canvas = pwin.Afx100000008

    如何操控Mouse

    示例:

    def AdjustSizeOnPreview(WizardDlg,ShiftX,ShiftY):

                Offset = 10

                OrgRect = WizardDlg.WiaPreviewControl1.Rectangle()

                WizardDlg.WiaPreviewControl1.PressMouse(coords = (Offset,Offset))

                WizardDlg.WiaPreviewControl1.MoveMouse(coords = (Offset+ShiftX,Offset+ShiftY))

                WizardDlg.WiaPreviewControl1.ReleaseMouse()

    如何发送按键信息

                Pywinauto使用SendKeys来进行按键处理,可以参考:

                http://www.rutherfurd.net/python/sendkeys/

    1.      发送快捷键

      MainWin.TypeKeys("%F") #按Alt+F

    Key

    Meaning

    +

    SHIFT

    ^

    CTRL

    %

    ALT

    多个按键时可以使用间隔时间:

    MainWin.TypeKeys("%IPS",pause=0.5) #在Word2003打开从扫描仪导入图片的窗口

    注意,TypeKeys并不是安全地将按键发送到目标窗口,所以尽量减少使用或者

    测试时减小其它操作干扰。

                2. 使用SendMessage实现

    如何操作菜单

    如果窗口有指定菜单项,则可以很容易地使用它:

    pwin.MenuSelect("File->Open")

    有时菜单项是用来勾选,并不能直接响应事件,则可以使用如下方式:

    sMenu=App[Title].MenuItem("File->Save")

    sMenu.Click()

    *上面的例子针对有些MenuItem并不会响应MenuSelect()方法。

    *有些Application并不会将菜单项指定给主UI,如Word,这样就不能直接使用菜单方法,而是使用快捷键的方式。下图是Word主UI的展开:

    1.PyWinAuto中的主要类之静态图

    2.枚举窗口所有控件及菜单项

    def ShowMenuItems(MenuItem,Tabs=""):

    if None==MenuItem:

        return

    Tabs = Tabs+"/t"

    for menu in MenuItem.Items():

        if(2048!=menu.Type()):

                    print Tabs,menu.Text()," [ID:",menu.ID(),"]"

        subMenu=menu.SubMenu()

        if None != subMenu:

                    ShowMenuItems(subMenu,Tabs)

    def ShowMenuAndControls(app):

    for win in app.Windows_():

                            print "Dialog:",win.WindowText()

                            print "Position:",win.Rectangle()

                           

                            ShowMenuItems(win.Menu());

                           

                            if 0<len(win.Children()):

                                        for control in win.Children():

                                                    print "Control ID:",control.ControlID()

                                                    print "/t Control Type:",control.FriendlyClassName()

                                                    print "/t TEXT:",control.WindowText()

                                                    print "/t RECT:",control.Rectangle()

                                                    if control.IsEnabled():

                                                                print "/t Status:Enabled"

                                                    else:

                                                                print "/t Status:Disabled"

                                                    if control.IsVisible():

                                                                print "/t Status:Visible"

                                                    else:

                                                                print "/t Status:Unvisible"                  

     

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • pywinauto简介

    2020-04-19 17:53:47
    一、pywinauto简介 pywinauto官方文档链接如下。 https://pywinauto.readthedocs.io/en/latest/ https://www.kancloud.cn/gnefnuy/pywinauto_doc https://github.com/pywinauto Dialog是一个窗口,包含其他几个...

     

    一、pywinauto简介

    pywinauto官方文档链接如下。

    https://pywinauto.readthedocs.io/en/latest/

    https://www.kancloud.cn/gnefnuy/pywinauto_doc

    https://github.com/pywinauto

    • Dialog 是一个窗口,包含其他几个GUI元素/控件,如按钮,编辑框等。对话框不一定是主窗口。 主窗体顶部的消息框也是一个对话框。 主窗口也被pywinauto视为对话框。
    • control 控件是层次结构的任何级别的GUI元素。 该定义包括窗口,按钮,编辑框,表格,表格单元格,工具栏等。
    • Win32 API技术(pywinauto中的“win32”后端)为每个控件提供标识符。 这是一个名为handle的唯一整数.
    • UI Automation API(pywinauto中的“uia”后端)可能不为每个GUI元素提供窗口handle。 “win32”后端看不到这样的元素。 但是Inspect.exe可以显示属性NativeWindowHandle,如果它可用的话。

     

    二、访问技术选择

    pywinauto要操作应用,首先需要访问应用,主要有两种访问技术。WIN32访问技术支持MFC、VB6、VCL、简单WinForms控件开发的应用,MS UI Automation访问技术支持WinForms、WPS、QT5、WPF、Store apps、browsers等开发的应用。

    分析一个应用软件可以用哪种访问技术,有如下常用工具:

    1、SPY++,用于WIN32 API。当SPY++可以显示所有的控件时,访问技术应该选择"win32"

    2、Inspect.exe:如果Inspect.exe的模式设置为UIA模式,可以比SPY++显示更多的控件,则访问技术应该选择"uia"

    3、py_inspect:支持win32和uia两种访问技术,是SWAPY的替代。

    https://github.com/pywinauto/py_inspect

    4、UISPY:支持uia访问技术

    5、SWAPY:只支持win32访问技术。https://github.com/pywinauto/SWAPY

    下图是用py_inspect查看的secureCRT控件,可以看到如果选择uia格式,可以看到更多的控件,所以访问技术应该选择‘uia’

    其它常用的

     

    三、访问应用方法

    你可以打开一个应用,或者连接一个已经存在的应用实例。都是通过Application对象完成的。它不是对subprocess.Popen的克隆,而是应用自动化的接入点。这里主要是限制自动化控制进程的范围。如一个程序有多个实例,自动化控制一个实例,而保证其他实例(进程)不受影响。主要有两种对象可以建立这种入口点Application() ,Desktop()。 Application的作用范围是一个进程,如一般的桌面应用程序都为此类。 Desktop的作用范围可以跨进程。主要用于像win10的计算器这样包含多个进程的程序。这种目前比较少见。

    1、Application对象

    1.1、打开一个应用

    connect(self, **kwargs)  # instance method: 

    timeout参数是可选的,只有在应用程序需要很长时间才能启动时才需要使用它。

    from pywinauto.application import Application
    app = Application(backend="uia").start('notepad.exe')
    # describe the window inside Notepad.exe process
    dlg_spec = app.UntitledNotepad
    # wait till the window is really open
    actionable_dlg = dlg_spec.wait('visible')

    1.2、连接一个应用

    connect(self, **kwargs)  # instance method: 

    connect() 在要启动自动化应用程序时使用。 要指定已在运行的应用程序,您需要指定以下之一:

    process:应用程序的进程ID,例如app = Application().connect(process=2341)
    handle:应用程序窗口的窗口句柄,例如,app = Application().connect(handle=0x010f0c)
    path:进程的可执行文件的路径(GetModuleFileNameEx用于查找每个进程的路径并与传入的值进行比较),例如:app = Application().connect(path=r"c:\windows\system32\notepad.exe")

    或者指定窗口的参数的任意组合,这些都被传递给pywinauto.findwindows.find_elements() 函数。 例如

    app = Application().connect(title_re=".*Notepad", class_name="Notepad")

     

    2、Desktop对象

    from subprocess import Popen
    from pywinauto import Desktop
    Popen('calc.exe', shell=True)
    dlg = Desktop(backend="uia").Calculator
    dlg.wait('visible')

     

    四、访问窗口方法

    这是高级pywinauto API的核心概念。 您可以近似或更详细地描述任何窗口或控件,即使它尚不存在或已经关闭。 窗口规范还保留有关将用于获得真实窗口或控件的匹配/搜索算法的信息。

    一个详细的窗口规范如下:

    >>> dlg_spec = app.window(title='Untitled - Notepad')
    >>> dlg_spec
    <pywinauto.application.WindowSpecification object at 0x0568B790>
    >>> dlg_spec.wrapper_object()
    <pywinauto.controls.win32_controls.DialogWrapper object at 0x05639B70>

    实际窗口查找由wrapper_object()方法执行。 它返回实际现有窗口/控件的一些包装器或引发ElementNotFoundError。 这个包装器可以通过发送动作或检索数据来处理窗口/控件。

    但是Python可以隐藏这个wrapper_object()调用,这样你就可以在程序中拥有更紧凑的代码。 以下描述完全相同:

    dlg_spec.wrapper_object().minimize() # while debugging
    dlg_spec.minimize() # in production

    创建窗口规范有许多可能的标准。 下面只是几个例子。可以在pywinauto.findwindows.find_elements()函数中找到可能的标准列表。

    # 可以是多层次的
    app.window(title_re='.* - Notepad$').window(class_name='Edit')
    
    # 可以结合标准
    dlg = Desktop(backend="uia").Calculator
    dlg.window(auto_id='num8Button', control_type='Button') 
    
    1.通过窗体名确定窗体
    

    dlg = app.Notepad 
    dlg = app['Notepad'] 

    2、top_window()

    这将返回具有应用程序顶级窗口的最高Z顺序的窗口。

    3、通过多层次的描述指定一个窗口,如(a),或使用组合参数指定一个窗体如(b),下面两条语句确定的是同一个窗体

    dlg = app.window(title_re="Page Setup").window(class_name="#32770")
    dlg = app.window(title_re="Page Setup", class_name="#32770")

    4、通过findwindows

    pywinauto.findwindows.find_windows()

    pywinauto.findwindows.find_elements()返回所有的已运行程序的win32_element_info.HwndElementInfo

    5、dialogs = app.windows() 

    这将返回应用程序的所有可见,启用的顶级窗口的列表。 然后,您可以使用handleprops模块中的一些方法选择所需的对话框。 一旦掌握了所需的句柄,就可以使用

    app.window(handle=win)

    注意: 如果对话框的标题很长 - 那么输入的属性访问可能会很长,在这种情况下通常更容易使用

    app.window(title_re=".*Part of Title.*")
    

    五、访问控件

     

    1、属性解析魔法

    Python通过动态解析对象属性简化了创建窗口规范。 但是一个属性名称与任何变量名称具有相同的限制:没有空格,逗号和其他特殊符号。 但幸运的是pywinauto使用“最佳匹配”算法来查找拼写错误和小变化。

    app.UntitledNotepad
    # 相当于
    app.window(best_match='UntitledNotepad') 
    

    通过类似字典的项目访问,可以使用Unicode字符和特殊符号。

    app['Untitled - Notepad']
    # 是相同的
    app.window(best_match='Untitled - Notepad') 
    

    2、如何知道魔法属性名称

    如何将“最佳匹配”附加到控件上有几个原则。 如果窗口规范接近其中一个名称,您将获得成功的名称匹配。

    1. 按标题(窗口文字,名称): app.Properties.OK.click()
    2. 按标题和控件类型: app.Properties.OKButton.click()
    3. 按控件类型和编号: app.Properties.Button3.click() (注意: Button0和Button1匹配相同的按钮,Button2是下一个,等等。)
    4. 按左上角标签和控件类型: app.OpenDialog.FileNameEdit.set_text("")
    5. 按控件类型和项目文本:app.Properties.TabControlSharing.select("General")

    通常并非所有这些匹配的名称都可以同时使用。 要检查指定对话框的这些名称,可以使用print_control_identifiers()方法。 可能的“best_match”名称显示为树中每个控件的Python列表。 也可以从方法输出中复制更详细的窗口规范。 比方说 app.Properties.child_window(title="Contains:", auto_id="13087", control_type="Edit")

    3、如何在对话框上指定控件

    有许多方法可以指定控件,最简单的方法是

    app.dlg.control
    app['dlg']['control'] 
    

    第二个更适合非英语操作系统,你需要传递unicode字符串,例如 app [u'对话框标题'] [u'控件标题']

    该代码根据以下内容为每个控件构建多个标识符:

    • title
    • friendly class
    • title + friendly class

    如果控件的标题文本为空(删除非char字符后),则不使用此文本。 相反,我们寻找控件上方和右侧最接近的标题文本。 并追加友好类。 所以列表变成了

    • friendly class
    • closest text + friendly class

    一旦为对话框中的所有控件创建了一组标识符,我们就消除它们的歧义。

    使用 WindowSpecification.print_control_identifiers() 方法

    注意 通过此方法打印的标识符已经过使标识符唯一的过程。 因此,如果您有两个编辑框,则它们的标识符中都会列出“Edit”。 实际上,虽然第一个可以被称为“Edit”, “Edit0”, “Edit1”和第二个应该被称为“Edit2”

     

    六、操作控件

    https://pywinauto.readthedocs.io/en/latest/code/code.html#controls-reference

    具体操作方法参考官方介绍,注意两点

    1、对于同一个控件,用win32查出来的访问路径和用uia查询出来的访问路径不同

    2、对于同一个控件,win32访问时可用的方法和用uia访问时可用的方法不同。

     

    七、其他

    1、如何将pywinauto与英语以外的应用程序语言一起使用

    由于Python不支持代码中的unicode标识符,因此您无法使用属性访问来引用控件,因此您必须使用项访问权或对window()进行显式调用。
    所以不要写作

    app.dialog_ident.control_ident.click() 

    你必须写

    app['dialog_ident']['control_ident'].click() 

    或者明确地使用window()

    app.window(title_re="非Ascii字符").window(title="非Ascii字符").click() 

     

    2、如何处理未按预期响应的控件(例如OwnerDraw控件)

    某些控件(尤其是Ownerdrawn控件)不会按预期响应事件。 例如,如果您查看任何HLP文件并转到“索引”选项卡(单击“搜索”按钮),您将看到一个列表框。 在此运行Spy或Winspector将向您显示它确实是一个列表框 - 但它是ownerdrawn。 这意味着开发人员告诉Windows他们将覆盖项目的显示方式并自行完成。 在这种情况下,他们已经使它无法检索字符串:-(。

    那导致什么问题呢?

    app.HelpTopics.ListBox.texts()                # 1
    app.HelpTopics.ListBox.select("ItemInList")   # 2 
    
    1. 将返回一个空字符串列表,这一切都意味着pywinauto无法获取列表框中的字符串
    2. 这将因IndexError而失败,因为ListBox的select(string)方法在文本中查找项目以了解它应该选择的项目的索引。

    以下解决方法将适用于此控件

    app.HelpTopics.ListBox.select(1) 
    

    这将选择列表框中的第二项,因为它不是字符串查找,它可以正常工作。

    不幸的是,即便这样也无济于事。 开发人员可以使控件不响应Select等标准事件。 在这种情况下,您可以在列表框中选择项目的唯一方法是使用TypeKeys()的键盘模拟。

    这允许您将任何击键发送到控件。 所以要选择你要使用的第3个项目

    app.Helptopics.ListBox1.type_keys("{HOME}{DOWN 2}{ENTER}") 
    
    • {HOME} 将确保突出显示第一个项目。
    • {DOWN 2} 然后将突出显示两个项目
    • {ENTER} 将选择突出显示的项目

    如果您的应用程序广泛使用类似的控件类型,那么您可以通过从ListBox派生新类来更轻松地使用它,这可以使用有关您的特定应用程序的额外知识。 例如,在WinHelp示例中,每次在列表视图中突出显示某个项目时,其文本都会插入到列表上方的Edit控件中,并且您可以从那里获取该项目的文本,例如:

    # 打印列表框中当前所选项目的文本
    # (只要你没有输入编辑控件!)
    print app.HelpTopics.Edit.texts()[1] 

     

     

    展开全文
  • pywinauto python2.7

    2018-05-06 11:23:12
    pywinauto用于开发自动化,适合python开发者,自动化开发者
  • pywinauto手册

    热门讨论 2011-01-05 17:58:48
    我自己根据pywinauto-0.4.0目录下docs目录中的网页制作的pywinauto手册,适用于初学者。。。
  • python pywinauto

    2019-09-01 22:24:00
    2、pycharm安装pywinauto 3、编写简单程序 #导入时间,以便延时 import time from pywinauto.application import Application #打开记事本 app=Application(backend="uia").start("notepad.exe") title_notepad=...
  • pywinauto说明文档

    2017-05-05 16:33:30
    pywinauto说明文档,国内没有啊~~~
  • pywinauto 使用

    万次阅读 2018-07-25 18:23:39
    Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面。它可以允许你很容易的发送鼠标、键盘动作给Windows的对话框和控件。  其中,最主要功能为对windows标准控件的一系列动作可...
  • 一、什么是pywinauto Pywinauto是基于Python开发的,用于操作Windows标准图形界面的自动化测试的脚本模块。 二、pywinauto可以用来做什么 1.可以应用在程序中,来解决工作中的重复性,手动操作图形界面程序的问题。 ...
  • pywinauto安装

    2019-10-04 23:24:42
    下载版本pywinauto:https://sourceforge.net/projects/pywinauto/files/latest/download?source=files #coding=gb2312 from pywinauto import application app = application.Application() app.start_('notepa...
  • 下载pywinauto

    2018-06-16 11:03:00
    2.将安装包放到D:python36\script,进入pywinauto目录,按shift+右键,进入命令窗口,执行pip install pywinauto,然后等待安装结束。 转载于:https://www.cnblogs.com/yfacesclub/p/9190109....
  • pywinauto Tips

    2018-04-14 09:47:01
    【提要】github地址:https://github.com/pywinauto/pywinauto文档:http://pywinauto.readthedocs.io【辅助工具】Inspect,判断后端使用 uia 还是 win32:...
  • pywinauto-0.5.1

    2015-08-30 10:30:02
    pywinauto-0.5.1,可以用于selenium+python自动化测试。
  • pywinauto是一组用于自动化Microsoft Windows GUI的python模块。最简单的是,它允许您将鼠标和键盘操作发送到窗口对话框和控件安装:pip install pywinauto官网地址:...
  • pywinauto及相关组件

    2019-02-27 15:12:52
    内含:ctypes-1.0.2.win32-py2.5-AMD64.msi ; elementtree-1.2.7-20070827-preview.win32.exe ; pywin32-224.win-amd64-py2.7.exe ; pywinauto-master

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,549
精华内容 619
关键字:

pywinauto