pywinauto is a set of python modules to automate the Microsoft Windows GUI

Overview

Donate Join the chat at https://gitter.im/pywinauto/pywinauto Documentation Status Windows Tests Linux Tests codecov.io Code Health Codacy Badge Code Quality: Python Total Alerts

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 support for more complex actions like getting text data.

Supported technologies under the hood: Win32 API (backend="win32"; used by default), MS UI Automation (backend="uia"). User input emulation modules mouse and keyboard work on both Windows and Linux.

Enjoying this?

Just star the repo or make a donation.

paypal

Your help is valuable since this is a hobby project for all of us: we do new features development during out-of-office hours.

  • In general the library tends to be cross-platform in the near future (Linux in 2018, macOS in 2019).
  • Reliable text based "record-replay" generator is also a high priority feature under development.
  • More feature requests and discusions are welcome in the issues.

Setup

  • run pip install -U pywinauto (dependencies will be installed automatically)

Documentation / Help

Simple Example

It is simple and the resulting scripts are very readable. How simple?

About Notepad") app.AboutNotepad.OK.click() app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True) ">
from pywinauto.application import Application
app = Application().start("notepad.exe")

app.UntitledNotepad.menu_select("Help->About Notepad")
app.AboutNotepad.OK.click()
app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)

MS UI Automation Example

More detailed example for explorer.exe:

from pywinauto import Desktop, Application

Application().start('explorer.exe "C:\\Program Files"')

# connect to another process spawned by explorer.exe
# Note: make sure the script is running as Administrator!
app = Application(backend="uia").connect(path="explorer.exe", title="Program Files")

app.ProgramFiles.set_focus()
common_files = app.ProgramFiles.ItemsView.get_item('Common Files')
common_files.right_click_input()
app.ContextMenu.Properties.invoke()

# this dialog is open in another process (Desktop object doesn't rely on any process id)
Properties = Desktop(backend='uia').Common_Files_Properties
Properties.print_control_identifiers()
Properties.Cancel.click()
Properties.wait_not('visible') # make sure the dialog is closed

Dependencies (if install manually)

  • Windows:
  • Linux:
  • Optional packages:
    • Install Pillow (by pip install -U Pillow) to be able to call capture_as_image() method for making a control's snapshot.

Packages required for running unit tests

Run all the tests: python ./pywinauto/unittests/testall.py

Contribution

Pull requests are very welcome. Read Contribution Guide for more details about unit tests, coding conventions, etc.

Copyrights

Pywinauto for native Windows GUI was initially written by Mark Mc Mahon. Mark brought many great ideas into the life using power of Python. Further contributors are inspired of the nice API so that the development continues.

Starting from 0.6.0 pywinauto is distributed under the BSD 3-clause license. Pywinauto 0.5.4 and before was distributed under the LGPL v2.1 or later.

  • (c) The Open Source Community, 2015-2018 (0.6.0+ development)
  • (c) Intel Corporation, 2015 (0.5.x maintenance)
  • (c) Michael Herrmann, 2012-2013 (0.4.2)
  • (c) Mark Mc Mahon, 2006-2010 (0.4.0 and before)
Comments
  • WPF Support

    WPF Support

    I'm having trouble working with a wpf-application. I manage to connect to the 
    program and draw an outline. But I don't manage to find any ControlIdentifiers. 
    All I get is the heading "Control Identifires:" and then nothing mote.
    
    Do pywinauto support wpf, or just winforms? And if it only supports winforms, 
    are there any plans to support wpf?
    
    What version of the product are you using? On what operating system?
    pywinauto 0.4.0.0, Windows 7 x64, .Net 4.0, 
    
    
    

    Original issue reported on code.google.com by [email protected] on 10 Jan 2011 at 12:40

    enhancement auto-migrated New Feature UIA-related 
    opened by GoogleCodeExporter 59
  • Any possibility to make backend uia faster

    Any possibility to make backend uia faster

    i have a very simple script that click few buttons in calculator app. If I use backend win32 executing script takes about 16 sec, but if I use backend uia same script takes 1 min 35 sec. Below examples scripts. Each script is executed 4 times.

    script below uses buttons text to find it

    app = Application()
    appconnect = app.connect(title='Calculator')
    app_dlg = appconnect.top_window_()
    app_dlg.window_(best_match='3').Click()
    

    script below uses buttons automatinID

    app = Application(backend='uia')
    appconnect = app.connect(title='Calculator')
    app_dlg = appconnect.top_window_()
    app_dlg.child_window(auto_id='button5').click_input()
    
    bug UIA-related 
    opened by nimuston 58
  • How to click submenu in iTunes?

    How to click submenu in iTunes?

    I want to click a submenu in iTunes client, here is code

    from pywinauto.application import Application
    app = Application.Start(cmd_line=u"C:\\Program Files\\iTunes\\iTunes.exe")
    itunescustommodaldialog = app.iTunes
    itunescustommodaldialog.wait('ready')
    button = itunescustommodaldialog.OK
    button.Click()
    itunes = = app.iTunes
    itunes.Wait('ready')
    static = itunes.Account
    static.Click()
    

    I don't know how to choose a submenu 'Sign In...' from Account. I tried to use itunes.MenuItem(u'Account->Sign In'), it shows error can't get 'Account' from []

    I think another way to get 'Sign In...' is to use hot keys. First hold the key ALT, then press the key 'A', release, then press 'S'. it shows the sign in dialog. For both ways, please help me in either way.

    Thanks

    question 
    opened by wangtubs 42
  • Cannot Import pywinauto (comtypes passes a union by value)

    Cannot Import pywinauto (comtypes passes a union by value)

    Expected Behavior

    When running from pywinauto import Application, the Python terminal should just reset to >>>.

    Actual Behavior

    When running from pywinauto import Application, Python throws an error.

    Steps to Reproduce the Problem

    1. Open Python terminal.
    2. Run from pywinauto import Application

    image

    Specifications

    • Pywinauto version: 0.6.1
    • Python version and bitness: Python 3.8.1 64 bit
    • Platform and OS: Windows 10 64 bit
    bug Priority-Critical 3rd-party issue 
    opened by xiaomyer 39
  • not able to click a button

    not able to click a button

    Hi All,

    I am trying to automate windows based application which contains spaces in the application name. I am able to open app with the help of below code:

    from pywinauto.application import Application
    app=Application().start('c:\\program files\\ESPWorkstation.exe')
    

    we will receive a popup window (below) which allows us to proceed further popup

    now i need to click on load button to proceed further.

    Can some one help me on this issue?

    Also, I need to navigate to a window which contains spaces after clicking load button to proceed with.

    Thanks, rajarameshmamidi

    question 
    opened by rajarameshmamidi 38
  • Announcement: I'm making a PyWinAutoUI (graphical) GUI with advanced features

    Announcement: I'm making a PyWinAutoUI (graphical) GUI with advanced features

    My end goal is to do on-screen lessons with overlayed arrows as done on bubble.is (and their set of lessons), but since I don't want to always be coding to create a simple enough lesson, I thought I should give PyWinAuto a GUI frontend that detects / records clicks in .py script format.

    Here's a screenshot: image

    I'm assuming I should post back here when it's ready.

    enhancement New Feature success_stories 
    opened by enjoysmath 30
  • error: (193, 'GetBinaryType', '%1 is not a valid Win32 application.')

    error: (193, 'GetBinaryType', '%1 is not a valid Win32 application.')

    Hi,

    I am using Python 2.7 (64 bit) with latest pyWinAuto version 0.6.3 (64 bit) on Windows 2012 R2 (64 bit) to automate 64-bit application.

    I am getting following error when I try to launch 64-bit application ie pside.exe from mapped I drive through python code. error: (193, 'GetBinaryType', '%1 is not a valid Win32 application.')

    Note: I have mapped I drive as \\SLCNAS562\ptqaquality in this case.

    Here is my Code sample:

    from pywinauto import application
    import time
    from pywinauto import tests
    from pywinauto.findbestmatch import MatchError
    from pywinauto import findwindows
    from pywinauto.timings import Timings
    
    app = application.Application().start('I:\\PT857\\ORACLE\\pt857-102-R2-retail\\bin\\client\\pside.exe -CT ORACLE -CS T57467N5  -CD T57467N5 -CO QEDMO -CP QEDMO')
    

    Output:

    Traceback (most recent call last):
      File "C:\Python27\Lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 323, in RunScript
        debugger.run(codeObject, __main__.__dict__, start_stepping=0)
      File "C:\Python27\Lib\site-packages\Pythonwin\pywin\debugger\__init__.py", line 60, in run
        _GetCurrentDebugger().run(cmd, globals,locals, start_stepping)
      File "C:\Python27\Lib\site-packages\Pythonwin\pywin\debugger\debugger.py", line 655, in run
        exec cmd in globals, locals
      File "C:\Work\pywinauto\testjk.py", line 1, in <module>
        from pywinauto import application
      File "C:\Python27\lib\site-packages\pywinauto-0.6.3-py2.7.egg\pywinauto\application.py", line 965, in start
        _warn_incorrect_binary_bitness(exe_name)
      File "C:\Python27\lib\site-packages\pywinauto-0.6.3-py2.7.egg\pywinauto\application.py", line 1350, in _warn_incorrect_binary_bitness
        handleprops.is64bitbinary(exe_name) and not is_x64_Python():
      File "C:\Python27\lib\site-packages\pywinauto-0.6.3-py2.7.egg\pywinauto\handleprops.py", line 184, in is64bitbinary
        binary_type = win32file.GetBinaryType(filename)
    error: (193, 'GetBinaryType', '%1 is not a valid Win32 application.')
    

    I have observed that the same error even if I use UNC path ie \\SLCNAS562\ptqaquality instead of I drive in above mentioned code. However, If installed that 64-bit application in local machine then launch it then it works fine. ie app = application.Application().start('C:\\PT857\\ORACLE\\pt857-102-R2-retail\\bin\\client\\pside.exe -CT ORACLE -CS T57467N5 -CD T57467N5 -CO QEDMO -CP QEDMO').

    Also observed that if one of the instance of that 64-bit application ie pside.exe is already launched before running the above code ie app = application.Application().start('I:\\PT857\\ORACLE\\pt857-102-R2-retail\\bin\\client\\pside.exe -CT ORACLE -CS T57467N5 -CD T57467N5 -CO QEDMO -CP QEDMO') then code works fine. It will launch pside.exe from I drive path on running python code.

    The issue "error: (193, 'GetBinaryType', '%1 is not a valid Win32 application.')" is observed when there is no instance of pside.exe is running in the box and when we try to launch it from I drive through python code.

    Please help me how to fix this issue as our requirement is to launch this application from mapped I drive.

    Thanks, Jagadeesh

    bug 
    opened by jagadeesh1983 22
  • _ctypes.COMError: (-2147467259, 'Unspecified error', (None, None, None, 0, None) )

    _ctypes.COMError: (-2147467259, 'Unspecified error', (None, None, None, 0, None) )

    Hi,

    Is some situations i get this COMError. Any ideas?

    Code i'm running

    import pywinauto
    
    def click_button(button):
        app = pywinauto.Application(backend='uia')
        appconnect = app.connect(path='software.exe')
        window = appconnect.window()
        window.set_focus()
        button = window.child_window(auto_id=button)
        wrapper = button.wrapper_object()
        wrapper.click_input()
    
    click_button('ButtonName')
    

    Error message:

    Traceback (most recent call last):
      File "click_button.py", line 14, in <module>
        click_button('ButtonName')
      File "click_button.py", line 10, in click_button
        wrapper = button.wrapper_object()
      File "build\bdist.win-amd64\egg\pywinauto\application.py", line 249, in wrappe
    r_object
      File "build\bdist.win-amd64\egg\pywinauto\application.py", line 239, in __reso
    lve_control
      File "build\bdist.win-amd64\egg\pywinauto\timings.py", line 402, in wait_until
    _passes
      File "build\bdist.win-amd64\egg\pywinauto\application.py", line 202, in __get_
    ctrl
      File "build\bdist.win-amd64\egg\pywinauto\findwindows.py", line 84, in find_el
    ement
      File "build\bdist.win-amd64\egg\pywinauto\findwindows.py", line 208, in find_e
    lements
      File "build\bdist.win-amd64\egg\pywinauto\uia_element_info.py", line 270, in d
    escendants
      File "build\bdist.win-amd64\egg\pywinauto\uia_element_info.py", line 249, in _
    get_elements
    _ctypes.COMError: (-2147467259, 'Unspecified error', (None, None, None, 0, None)
    )
    
    
    bug Priority-Critical 
    opened by nimuston 22
  • Does not work with Win10 Calculator

    Does not work with Win10 Calculator

    Under Windows 10, sending keys to the calculator does not work:

    >>> import pywinauto
    >>> app = pywinauto.Application().start("calc.exe")
    >>> app.Window
    <pywinauto.application.WindowSpecification object at 0x00000000024B2860>
    >>> app.process
    5900
    >>> app.Window.TypeKeys("2*3=")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Users\marcio\git\webdriver-python\env\lib\site-packages\pywinauto\application.py", line 252, in __getattr__
        ctrls = _resolve_control(self.criteria)
      File "C:\Users\marcio\git\webdriver-python\env\lib\site-packages\pywinauto\application.py", line 758, in _resolve_control
        raise e.original_exception
    pywinauto.findbestmatch.MatchError: Could not find 'Window' in '[]'
    >>> app.Calculator.TypeKeys("2*3=")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Users\marcio\git\webdriver-python\env\lib\site-packages\pywinauto\application.py", line 252, in __getattr__
        ctrls = _resolve_control(self.criteria)
      File "C:\Users\marcio\git\webdriver-python\env\lib\site-packages\pywinauto\application.py", line 758, in _resolve_control
        raise e.original_exception
    pywinauto.findbestmatch.MatchError: Could not find 'Calculator' in '[]'
    

    If I use Task Manager, the Calculator pid is 1940 and not 5900.There is not process with pid 5900.

    I think this is causing it to find no windows that belong to this app (it filters by process id first).

    On the other hand, Notepad works:

    >>> app = pywinauto.Application().start("notepad.exe")
    >>> app.process
    6600
    >>> app.Notepad.TypeKeys("2*3=")
    <pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000002B22668>
    

    It does type into notepad.

    bug Priority-Critical 
    opened by sglebs 22
  • Implement keyboard and mouse hooks module (say hooks.py)

    Implement keyboard and mouse hooks module (say hooks.py)

    pyHook contains C module. But hooks can be implemented with Python only (using ctypes).

    See pyHook example for reference: http://stackoverflow.com/questions/4581772/using-pyhook-to-respond-to-key-combination-not-just-single-keystrokes

    One more example of keyboard hook without pyHook: http://stackoverflow.com/questions/9817531/applying-low-level-keyboard-hooks-with-python-and-setwindowshookexa

    Analogue in AutoIt:

    HotKeySet('{F2}', '_hk1')
    
    While 1
    Sleep(100)
    WEnd
    
    Func _hk1()
    Send("{CTRLDOWN}{SHIFTDOWN}t{SHIFTUP}{CTRLUP}")
    EndFunc
    

    Thanks TomashUA for the use case.

    enhancement New Feature 
    opened by vasily-v-ryabov 22
  • AttributeError: 'NoneType' object has no attribute 'right_click_input'

    AttributeError: 'NoneType' object has no attribute 'right_click_input'

    I fail on running example from README.md Windows 7 64bit, Python 3.5.2 32bit (and Python 3.5.2 64bit)

    [PYWINAUTO] λ python explore.py
    2017-01-17 09:25:13,233 INFO: Imported existing <module 'comtypes.gen' from 'C:\\Users\\ME\\Envs\\PYWINAUTO\\lib\\site-packages\\comtypes\\gen\\__init__.py'>
    2017-01-17 09:25:13,237 INFO: Using writeable comtypes cache directory: 'C:\Users\ME\Envs\PYWINAUTO\lib\site-packages\comtypes\gen'
    Traceback (most recent call last):
      File "explore.py", line 10, in <module>
        common_files.right_click_input()
    AttributeError: 'NoneType' object has no attribute 'right_click_input'
    

    explore.py

    from pywinauto import Desktop, Application
    
    Application().start('explorer.exe "C:\\Program Files"')
    
    # connect to another process spawned by explorer.exe
    app = Application(backend="uia").connect(path="explorer.exe", title="Program Files")
    
    app.ProgramFiles.set_focus()
    common_files = app.ProgramFiles.ItemsView.get_item('Common Files')
    common_files.right_click_input()
    app.ContextMenu.Properties.invoke()
    
    # this dialog is open in another process (Desktop object doesn't rely on any process id)
    Properties = Desktop(backend='uia').Common_Files_Properties
    Properties.print_control_identifiers()
    Properties.Cancel.click()
    Properties.wait_not('visible') # make sure the dialog is closed
    
    question 
    opened by Tset-Noitamotua 21
  • onHover event in ComboBox changes selected_item

    onHover event in ComboBox changes selected_item

    I am trying to extract the selected value from a ComboBox with combo_box.selected_text() through the win32 backend, with no success as each time my mouse is hovering on another not selected item, this function returns the hovered item's text and not my selected item's text.

    Am I missing something or is this intentional behavior on onHover event?

    I've tried numerous ways to extract the selected value + tried to understand if the combo box list is visible (which means the user might hover over some items) but with no success at all.

    I noticed (through Accessibility Insights) that there is a certain property in ComboBox item indicating the selectedValue, how do I extract it?

    Screen Shot 2022-12-18 at 10 19 54 question 
    opened by ErezCsillag 2
  • Different version of Qt

    Different version of Qt

    I'm trying to test Gui of Qt application, written on Qt 5.15.2 on Ubuntu 20.04, but pywinauto doesn't see any windows of this application. But it works, when I'm using native Qt version (Qt 5.12.7) to build the app. Is this normal program behavior or am I doing something wrong?

    • Pywinauto version: 0.6.8
    • Python version and bitness: 3.7, 64 bit
    • Platform and OS: Ubuntu 20.04
    question atspi 
    opened by likona1993 2
  • how to fix when error is Xlib.error.DisplayNameError: Bad display name

    how to fix when error is Xlib.error.DisplayNameError: Bad display name ""

    Actual Behavior

    from pywinauto.keyboard import SendKeys /usr/local/python39/lib/python3.9/site-packages/pywinauto/keyboard.py:107: in from .linux.keyboard import KeySequenceError, KeyAction, PauseAction /usr/local/python39/lib/python3.9/site-packages/pywinauto/linux/keyboard.py:46: in _display = Display() /usr/local/python39/lib/python3.9/site-packages/Xlib/display.py:89: in init self.display = _BaseDisplay(display) /usr/local/python39/lib/python3.9/site-packages/Xlib/display.py:71: in init protocol_display.Display.init(self, *args, **keys) /usr/local/python39/lib/python3.9/site-packages/Xlib/protocol/display.py:84: in init name, protocol, host, displayno, screenno = connect.get_display(display) /usr/local/python39/lib/python3.9/site-packages/Xlib/support/connect.py:73: in get_display return mod.get_display(display) /usr/local/python39/lib/python3.9/site-packages/Xlib/support/unix_connect.py:76: in get_display raise error.DisplayNameError(display) E Xlib.error.DisplayNameError: Bad display name ""

    Specifications

    • Pywinauto version: 0.6.6
    • Python version and bitness: python 3.9
    • Platform and OS: linux
    question 
    opened by garyzhang21 3
  • has_focus returning False on a focused element

    has_focus returning False on a focused element

    Expected Behavior

    With win32 background: After a set_focus on a non focused element has_focus should have to return True.

    Actual Behavior

    To get a has_focus to return True we need to do two set_focus in an non focused element and one in a focused element.

    Is set_focus meant to be used to focus the window or the component?

    Steps to Reproduce the Problem

    1.Get an non focused element like a button. 2.Invoke set_focus on then. 3.Verify the result of has_focus

    Short Example of Code to Demonstrate the Problem

    The program starts with focus on another button.

    app = Application().start('./NewControls.exe')
    window = app.window(title='NewControls')
    radio1 = window.child_window(title='Option 1')
    
    print(f'window has_focus:{window.has_focus()} has_keyboard_focus:{window.has_keyboard_focus()}')
    print(f'radio1 has_focus:{radio1.has_focus()} has_keyboard_focus:{radio1.has_keyboard_focus()}')
    
    radio1.set_focus()
    
    print(f'window has_focus:{window.has_focus()} has_keyboard_focus:{window.has_keyboard_focus()}')
    print(f'radio1 has_focus:{radio1.has_focus()} has_keyboard_focus:{radio1.has_keyboard_focus()}')
    
    radio1.set_focus()
    
    print(f'window has_focus:{window.has_focus()} has_keyboard_focus:{window.has_keyboard_focus()}')
    print(f'radio1 has_focus:{radio1.has_focus()} has_keyboard_focus:{radio1.has_keyboard_focus()}')
    
    app.kill()
    

    Output: window has_focus:True has_keyboard_focus:False radio1 has_focus:False has_keyboard_focus:False window has_focus:True has_keyboard_focus:False radio1 has_focus:False has_keyboard_focus:True window has_focus:False has_keyboard_focus:False radio1 has_focus:True has_keyboard_focus:True

    Specifications

    • Pywinauto version: 0.6.8
    • Python version and bitness: 3.8.10, 32bits
    • Platform and OS: 64bits, Windows 11
    bug 
    opened by augusto-fkn 0
  • Can't  NextButton.click() in first dialog in Git installation

    Can't NextButton.click() in first dialog in Git installation

    Expected Behavior

    Hello guys,

    I would like to help me if you can. I have an issue while I'm trying to install Git-2.27.0-32-bit.exe. I manage to open the installation dialog, but it doesn't go to the next page. I insert the window's title, but it doesn't move. I have already installed putty. So I don't know what I'm doing wrong.

    Actual Behavior

    Stays in the first dialog.

    Short Example of Code to Demonstrate the Problem

     app = pywinauto.Application(backend="uia").start(path)
    Wizard =  app['Git 2.27.0 Setup']
    Wizard.NextButton.click()
    
    

    Specifications

    • Pywinauto version: 0.6.8
    • Python version and bitness: 3.10.8
    • Platform and OS: Windows 10 64 Bit
    question 
    opened by alexspirou 3
Releases(0.6.8)
  • 0.6.8(Oct 27, 2019)

    Enhancements

    • Add allow_magic_lookup flag for Application and Desktop object. Thanks @pakal!
    • Don't duplicate already pressed key in internal list in win32_hooks.py. Thanks @TomRobo237!
    • Allow finding an edit box by title (its editable text).
    • Add option to send keyboard input for an application which doesn't handle VK_PACKET properly. Use vk_packet=False in method type_keys, default value is vk_packet=True. Thanks @philmbailey!

    Bug Fixes

    • Fix ctypes.windll usage conflicts with other libraries.
    • Minor fixes in top-level __init__.py. Thanks @pakal!
    • Fix logging issues in remote_memory_block.py. Thanks @TomRobo237!
    • Minor docs improvements. Thanks @olesteban, @caoyaxing221 and @nuno-andre!
    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.8-py2.py3-none-any.whl(354.39 KB)
    pywinauto-0.6.8.tar.gz(421.85 KB)
  • 0.6.7(Jul 6, 2019)

    Enhancements

    • Reuse ctypes.wintypes more to avoid redundant definitions for Win32 API.
    • Add method EditWrapper.is_editable() for "uia" backend.

    Bug Fixes

    • Fix corner case with int/long conversion crash while getting text.
    • Fix UIA crash: handle InvalidControlType properly.
    • Fix menu_select() for one level main menu in WinForms apps.
    • Make Application object non-iterable (iterating was hang).
    • Fix type conversion crash in GetWindowRect (method .rectangle()).
    • Fix combo box fluttering/blinking in dump_tree() / print_control_identifiers().
    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.7-py2.py3-none-any.whl(353.02 KB)
    pywinauto-0.6.7.tar.gz(419.15 KB)
    pywinauto-0.6.7.zip(524.27 KB)
  • 0.6.6(Mar 3, 2019)

    Enhancements

    • Improve support for WinForms and Qt5: ComboBox, ListBox, DataGrid/Table.
    • Add an ability to use MFC toolbar buttons by text. Thanks @Nebyt !
    • Make method kill() hard (and fast) by default (can be used with param soft=True optionally).
    • Make visible_only=False a default option for method connect() (useful for minimized apps).
    • Add an ability to hold or release a key with params down and up for .type_keys() method. See the improved docs for keyboard module for more details. Thanks @badari412 !
    • Add method windows() to class Desktop.
    • Add Remote Execution Guide with all known RDP/VNC/psexec/etc tricks.

    Bug Fixes

    • Fix UnicodeDecodeError/UnicodeEncodeError in several cases while printing wrapper object representation.
    • Add static text to a list of best match names for backend="uia".
    • Fix COMError for runtime_id property.
    • Fix method click() for some radio buttons.
    • Improve error message when screen is locked.
    • Use utf-8 encoding while writing dump_tree() output to file.
    • Remove few incorrect warnings for backend="win32".
    • Fix crash in GetWindowRect call.
    • Fix black screenshot issue with second monitor. Thanks @Nebyt !
    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.6-py3-none-any.whl(356.52 KB)
    pywinauto-0.6.6.tar.gz(423.11 KB)
    pywinauto-0.6.6.zip(528.94 KB)
  • 0.6.5(Jul 30, 2018)

    Enhancements:

    • Check admin privileges for both target app and Python process. This allows detecting cases when window messages won't work.
    • Add automation_id and control_type properties for "win32" backend (the most useful for WinForms). Correct child_window() keywords are auto_id and control_type.
    • Switch pypiwin32 dependency to pywin32 which became official again.
    • New generators iter_children() and iter_descendants().
    • Add method is_checked() to "win32" check box.

    Bug Fixes:

    • Method Application().connect(...) works better with timeout argument.
    • Fix .set_focus() for "uia" backend including minimized window case (issue #443).
    • maximize()/minimize() methods can be chained now.
    • Fix passing keyword arguments to a function for decorators @always_wait_until_passes and @always_wait_until.
    • Use correct types conversion for WaitGuiThreadIdle (issue #497).
    • Fix reporting code coverage on Linux.
    • Use .format() for logging BaseWrapper actions (issue #471).
    • Print warning in case binary type is not determined (issue #387).
    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.5.zip(514.10 KB)
  • 0.6.4(Jan 21, 2018)

    Bug Fixes

    • Final fix for ValueError: NULL COM pointer access (UIA backend).

    Enhancements

    • Multi-threading mode (MTA) for comtypes is enabled by default, if it's not initialized by another library before importing pywinauto.

    • Method get_value() has been added to EditWrapper in UIA backend.

    • Method scroll() has been added for all UIA controls which have ScrollPattern implemented.

    • Added methods is_minimized/is_maximized/is_normal/get_show_state for UIAWrapper.

    • Added handling in-place controls inside ListView control and (row, column) indexing in a grid-like table mode. Examples:

          auto_detected_ctrl = list_view.get_item(0).inplace_control()
      
          combo = list_view.get_item(1,1).inplace_control("ComboBox")
          combo.select("Item name")
      
          edit = list_view.get_item(3,4).inplace_control("Edit")
          edit.type_keys("some text{ENTER}", set_foreground=False)
      
          dt_picker = list_view.get_item(2,0).inplace_control("DateTimePicker")
      

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.4.zip(508.73 KB)
  • 0.6.3(Jul 3, 2017)

    • Improved string representation for all wrapper objects. Thanks @airelil!
    • Fixed several sporadic crashes for backend="uia".
    • Fixed several bugs in wait/wait_not methods:
      • Method wait('exists') doesn't work for backend="uia". Thanks @maollm!
      • Methods wait/wait_not take ~ default time (5 sec.) instead of customized timeout like 1 sec.
    • depth param can used in a WindowSpecification now. depth=1 means this control, depth=2 means immediate children only and so on (aligned with print_control_identifiers method). Thanks @dmitrykazanbaev!
    • Significantly improved sending keys to an inactive window silently. Special thanks for @antonlarin! Now 2 methods are available:
      • send_chars is supposed to send character input (this includes {Enter}, {Tab}, {Backspace}) without Alt/Shift/Ctrl modifiers.
      • send_keystrokes is for key input (including key combinations with Alt/Shift/Ctrl modifiers).
    • Method Application().connect(path='your.exe') uses default timeout Timings.app_connect_timeout. It can accept timeout and retry_interval keyword arguments. Thanks @daniil-kukushkin!
    • Method print_control_identifiers is more consistent and minimum 2x faster now! Thanks @cetygamer!
    • Fixed subclassing Application with your own methods. Thanks @efremovd!
    • Param work_dir can be used in Application().start(...). Thanks @efremovd!
    • Class Application has been enriched with methods is_process_running() and wait_for_process_exit(). Thanks @efremovd!
    • Module timings uses time.clock() for Python 2.x and time.perf_counter() for Python 3.x so that accident system time change can't affect on your script behavior. Thanks @airelil!
    • Added WireShark example. Thanks @ViktorRoy94!
    • Now print_control_identifiers() can dump UI elements tree to a file. Thanks @sovrasov!
    • Improved logging actions for backend="uia", extended example for MS Paint. Thanks @ArtemSkrebkov!
    • Extended CalendarWrapper for backend="win32" with these methods: get_month_delta, set_month_delta and get_month_range. Thanks @Nikita-K!
    • Added method legacy_properties() to UIAWrapper. Thanks @AsyaPronina!
    • Improved VB6 ListView detection for backend="win32". Thanks @KirillMoizik!
    • Fixed 64-bit specific bug in TreeViewWrapper for backend="win32" (argument 4: <type 'exceptions.OverflowError'>: long int too long to convert).

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.3.zip(503.44 KB)
  • 0.6.2(Feb 28, 2017)

    • Several bugs were fixed:
      • Maximized window is always resized (restored) when calling set_focus().
      • AttributeError: type object '_CustomLogger' has no attribute 'disable'.
      • print_control_identifiers() gets bytes string on Python 3.x.
      • Importing pywinauto causes debug messages to appear twice.
    • Improved click methods behaviour for Win32 ListView and TreeView: ensure_visible() is called inside before the click.
    • Made taskbar.SystemTrayIcons localization friendly.

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.2-1.zip(493.91 KB)
  • 0.6.1(Feb 8, 2017)

    • win32_hooks module is well tested and more reliable now. See detailed example.
    • Fixed several bugs and crashes here and there.
      • Crash when ctrl.window_text() becomes None at the right moment. Thanks @mborus!
      • HwndWrapper.set_focus() fails when used via interpreter. Thanks @mtkennerly!
      • Fix LoadLibrary call error on just released Python 2.7.13. Thanks @KirillMoizik!
      • AttributeError: WindowSpecification class has no 'CPUUsage' method.
      • comtypes prints a lot of warnings at import pywinauto.
      • Methods is_dialog() and restore() are missed for UIA backend.
      • Method print_control_identifiers() crashes on some applications with Unicode symbols.
      • Installation by python setup.py install may fail if pyWin32 dependency was installed manually.
      • Bug in resolving attributes: 'UIAWrapper' object has no attribute 'Menu' for dlg = app.Custom.Menu.
      • Method send_chars() can now send {ENTER} to some applications. Thanks @batterseapower!
    • Searching UI elements is faster now especially if you use control_type or auto_id in a WindowSpecification. Method Application.kill() is also optimized in many cases.
    • Added an example for Win10 Calculator.

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.1.zip(490.29 KB)
  • 0.6.0(Oct 31, 2016)

    • This big release introduces MS UI Automation (UIA) support (beta). Feedback is very welcome!
      • Just start from app = Application(backend='uia').start('your_app.exe').
      • Default backend is still 'win32' if nothing is specified.
      • Supported WPF controls: Menu, Button/CheckBox/RadioButton, ComboBox, Edit, Tab control, List (ListView), DataGrid, Tree, Toolbar, Tooltip, Slider.
      • It uses native UIAutomationCore.dll through comtypes (like UiaComWrapper for .NET but in CPython).
      • Despite code coverage is ~95% consider it as beta quality. Performance is slower than for "win32".
    • Documentation is built continuously now on ReadTheDocs. See also improved Getting Started Guide.
    • Modules keyboard and mouse can be used out of any window context now. And they work on Linux as well!
    • New multi-backend architecture makes implementation of new platforms support easier in the future. The minimal set for new backend includes its name and two classes inherited from ElementInfo and from BaseWrapper. New backend must be registered by function backend.register(). Linux AT SPI and Apple Accessibility API are in the long term plans.
    • Code style is much closer to PEP8: i.e. click_input should be used instead of ClickInput.
    • Initial implementation of the win32_hooks module. Keyboard and mouse event handlers can be registered in the system. It was inspired by pyHook, pyhk, pyhooked and similar modules, but re-written from scratch. Thanks for Max Samokhvalov! The fork (at some moment) of the win32_hooks module is used in pyhooked 0.8 by Ethan Smith.
    • A lot of small improvements are not counted here.

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.6.0.zip(483.86 KB)
  • 0.5.4(Oct 30, 2015)

    • Fix bugs and inconsistencies:
      • Add where="check" possible value to the ListViewWrapper.Click/ClickInput` methods.
      • Add CheckByClickInput and UncheckByClickInput methods for a plain check box.
      • Fix crash while waiting for the window start.
    • Add partial MFC Menu Bar support. The menu bar can be interpreted as a toolbar. Items are clickable by index through experimental MenuBarClickInput method of the ToolbarWrapper.
    • Python 3.5 is supported.

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.5.4.zip(390.11 KB)
  • 0.5.3(Sep 25, 2015)

    • Better backward compatibility with pywinauto 0.4.2:
      • support Unicode symbols in the TypeKeys method again;
      • allow SetEditText/TypeKeys methods to take non-string arguments;
      • fix taking Unicode parameters in SetEditText/TypeKeys.
    • Fix bug in Wait("active"), raise a SyntaxError when waiting for an incorrect state.
    • Re-consider some timings, update docs for the default values etc.
    • Fix several issues with an owner-drawn menu.
    • MenuItem method Click is renamed to ClickInput while Click = Select now.
    • New SetTransparency method can make a window transparent in a specified degree (from 0 to 255).
    • New window search criteria found_index is useful to choose the control in the list of similar ones with same texts.

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.5.3.zip(385.59 KB)
  • 0.5.2(Sep 8, 2015)

    • New Application methods: CPUUsage returns CPU usage as a percent (float number), WaitCPUUsageLower waits until the connected process' CPU usage is lower than specified value (2.5% by default).
    • ListViewWrapper interface is aligned with TreeViewWrapper. GetItem() returns a _listview_item object that looks like a _treeview_element now.
    • Add DPI awareness API support (Win8+). It allows correct work when all fonts are scaled at 125%, 150% etc (globally or per monitor).
    • "Waiting for Long Operations" section in docs.
    • Fix number of bugs:
      • TreeViewWrapper.Select doesn't work when the control is not in focus.
      • TabControlWrapper.Select doesn't work in case of TCS_BUTTONS style set.
      • ListViewWrapper methods Check/UnCheck are fixed.
      • Toolbar button: incorrect access by a tooltip text.
      • Warning "Cannot retrieve text length for handle" uses print() instead of actionlogger.
      • ClientToScreen method doesn't return a value (modifying mutable argument is not good practice).

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.5.2.zip(380.65 KB)
  • 0.5.1(Jul 13, 2015)

    • [x] Resolve pip issues
    • [x] Warnings about mismatched Python/application bitness
    • [x] Add "TCheckBox" class name to ButtonWrapper detection list
    • [x] Fix DebugMessage method
    • [x] Disable logging (actionlogger.py) by default, provide shortcuts: actionlogger.enable() and actionlogger.disable(). For those who are familiar with standard logging module there's method actionlogger.set_level(level).

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.5.1.zip(367.27 KB)
  • 0.5.0(Jun 30, 2015)

    • [x] 64-bit Python and 64-bit apps support (but 32-bit Python is recommended for 32-bit apps)
    • [x] Python 2.x/3.x compatibility
    • [!] Added pyWin32 dependency (silent install by pip for 2.7 and 3.1+)
    • [x] Improvements for Toolbar, TreeView, UpDown and DateTimePicker wrappers
    • [x] Improved best_match algorithm allows names like ToolbarFile
    • [x] Clicks can be performed with pressed Ctrl or Shift
    • [x] Drag-n-drop and scrolling methods (DragMouse, DragMouseInput, MouseWheelInput)
    • [x] Improved menu support: handling OWNERDRAW menu items; access by command_id (like $23453)
    • [x] Resolved issues with py2exe and cx_freeze
    • [x] RemoteMemoryBlock can now detect memory corruption by checking guard signature
    • [x] Upgraded taskbar module
    • [x] sysinfo module for checking 32-bit or 64-bit OS and Python
    • [x] set_foreground flag in TypeKeys method for typing into in-place controls
    • [x] flags create_new_console and wait_for_idle in Application.start method

    GitHub downloads

    Source code(tar.gz)
    Source code(zip)
    pywinauto-0.5.0.zip(860.06 KB)
  • 0.3.1(Jun 25, 2015)

    • Change calculation of distance in findbestmatch.GetNonTextControlName() so that it does not need to square or get the square root to find the real distance - as we only need to compare values - not have the actual distance. (Thanks to Stefaan Himpe)
    • Compiled regular expression patterns before doing the match to avoid compiling the regular expression for window that is being tested (Thanks to Stefaan Himpe)
    • Made it easier to add your own control tests by adding a file extra_tests.py which needs to export a ModifyRegisteredTests() method. Also cleaned up the code a little.
    • Updated notepad_fast.py to make it easier to profile (added a method)
    • Changed WrapHandle to use a cache for classes it has matched - this is to avoid having to match against all classes constantly.
    • Changed default timeout in SendMessageTimeout to .001 seconds from .4 seconds this results in a significant speedup. Will need to make this value modifiable via the timing module/routine.
    • WaitNot was raising an error if the control was not found - it should have returned (i.e. success - control is not in any particular state because it does not exist!).
    • Added ListViewWrapper.Deselect() per Chistophe Keller's suggestion. While I was at it I added a check on the item value passed in and added a call to WaitGuiIdle(self) so that the control has a chance to process the message.
    • Changed doc templates and moved dependencies into pywinauto subversion to ensure that all files were availabe at www.openqa.org and that they are not broken when viewed there.
    • Moved all timing information into the timings.Timings class. There are some simple methods for changing the timings.
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Jun 25, 2015)

    • Added automatic Application data collection which can be used when running the same test on a different spoken language version. Support is still preliminary and is expected to change. Please treat as early Alpha.

      If you have a different language version of Windows then you can try this out by running the notepad_fast.py example with the langauge argument e.g.

        examples\notepad_fast.py language
    

    This will load the application data from the supplied file notepad_fast.pkl and use it for finding the right menu items and controls to select.

    • Test implementation to make it easier to start using an application. Previously you needed to write code like
        app = Application().connect_(title = 'Find')
        app.Find.Close.Click()
        app.NotePad.MenuSelect("File->Exit")
    

    1st change was to implement static methods start() and connect(). These methods return a new Application instance so the above code becomes

        app = Application.connect(title = 'Find')
        app.Find.Close.Click()
        app.NotePad.MenuSelect("File->Exit")
    

    I also wanted to make it easier to start working with a simple application - that may or may not have only one dialog. To make this situation easier I made window_() not throw if the application has not been start()ed or connect()ed first. This leads to simpler code like

        app = Application()
        app.Find.Close.Click()
        app.NotePad.MenuSelect("File->Exit")
    

    What happens here is that when you execute any of Application.window_(), Application.__getattr__() or Application.__getitem__() when the application hasn't been connected or started. It looks for the window that best matches your specification and connects the application to that process.

    This is extra functionality - existing connect_() and start_() methods still exist

    • Fixed HwndWrapper.SetFocus() so that it would work even if the window was not in the foreground. (it now makes the window foreground as well as giving it focus). This overcomes a restriction in Windows where you can only change the foreground window if you own the foreground window.
    • Changed some 2.4'isms that an anonymous commenter left on my blog :-) with these changes pywinauto should run on Python 2.3 (though I haven't done extensive testing).
    • Commented out controls.common_controls.TabControlWrapper.GetTabState() and TabStates() as these did not seem to be returning valid values anyway.
    • Fixed documentation issues were parts of the documentation were not getting generated to the HTML files.
    • Fixed issue where MenuSelect would sometimes not work as expected. Some Menu actions require that the window that owns the menu be active. Added a call to SetFocus() before selecting a menu item to ensure that the window was active.
    • Fixed Bug 1452832 where clipboard was not closed in clipboard.GetData()
    • Added more unit tests now up to 248 from 207
    Source code(tar.gz)
    Source code(zip)
  • 0.2.5(Jun 25, 2015)

    • Added wrapper classes for Menus and MenuItems this enabled cleaner interaction with Menu's. It also gives more functionality - you can now programmatically Click() on menus, and query if a menu item is checked or not.
    • Added application.WindowSpecification.Wait() and WaitNot() methods. These methods allow you to wait for a control to exist, be visible, be enabled, be ready (both enabled and visible!) or to wait for the control to not be in any of these states. WaitReady(), WaitNotEnabled(), WaitNotVisible() now use these methods. I was able to also add the missing methods WaitNotReady(), WaitEnabled(), WaitVisible(), WaitExists(), WaitNotExists(). Please use Wait() and WaitNot() as I have Deprecated these Wait* methods.
    • Slightly modified timeout waits for control resolution so that a timed function more accurately follows the timeout value specified.
    • Added application.Application.start() and connect() static methods. These methods are factory methods in that they will return an initialized Application instance. They work exactly the same as start_() and connect_() as they are implemented in terms of those.
        from pywinauto.application import Application
        notepad = Application.start("notepad")
        same_notepad = Application.connect(path = "notepad")
    
    • Updated the examples to follow changes to the code - and to make them a little more robust.
    • Added a new Controls Overview document page which lists all the actions on all controls.
    • Added more unit tests now up to 207 from 134 (added 68 tests)
    Source code(tar.gz)
    Source code(zip)
  • 0.2.1(Jun 25, 2015)

    • Quick release to get many changes out there - but this release has been less tested then I would like for a .3 release.
    • Allow access to non text controls using the closest Text control. This closest text control will normally be the static/label associated with the control. For example in Notepad, Format->Font dialog, the 1st combobox can be refered to as "FontComboBox" rather than "ComboBox1"
    • Added a new control wrapper - PopupMenuWrapper for context menu's You can now work easily with context menu's e.g.
         app.Notepad.Edit.RightClick()
         # need to use MenuClick rather then MenuSelect
         app.PopupMenu.MenuClick("Select All")
         app.Notepad.Edit.RightClick()
         app.PopupMenu.MenuClick("Copy")
    

    I could think of merging the RightClick() and MenuSelect() into one method ContextMenuSelect() if that makes sense to most people.

    • Added Support for Up-Down controls

    • Not all top level windows now have a FriendlyClassName of "Dialog". I changed this because it made it hard to get windows of a particular class. For example the main Notepad window has a class name of "Notepad".

      This was primarily implemented due to work I did getting the System Tray.

    • Renamed StatusBarWrapper.PartWidths() to PartRightEdges() as this is more correct for what it returns.

    • Changed HwndWrapper.Text() and SetText() to WindowText() and SetWindowText() respectively to try and make it clearer that it is the text returned by GetWindowText and not the text that is visible on the control. This change also suggested that EditWrapper.SetText() be changed to SetEditText() (though this is not a hard requirement EditWrapper.SetText() still exists - but may be deprecated.

    • Added ClickInput, DoubleClickInput, RightClickInput, PressMouseInput ReleaseMouseInput to HwndWrapper - these use SendInput rather then WM_LBUTTONDOWN, WM_RBUTTONUP, etc used by Click, DoubleClick etc.

      I also added a MenuClick method that allows you to click on menu items. This means you can now 'physically' drop menus down.

    • Some further working with tooltips that need to be cleaned up.

    • Fixed a bug where coordinates passed to any of the Click operations had the X and Y coordinates swapped.

    • Added new MenuItem and Menu classes that are to the most part hidden but you can get a menu item by doing

        app.Notepad.MenuItem("View")
        app.Notepad.MenuItem("View->Status Bar")
    

    MenuItems have various actions so for example you can use MenuItem.IsChecked() to check if the menu item is checked. Among other methods there are Click() and Enabled().

    • Modified the 'best match' algorithm for finding controls. It now searches a couple of times, and tries to find the best fit for the text passed to it. The idea here is to make it more "Select what I want - not that other thing that looks a bit like what I want!". It is possible this change could mean you need to use new identifiers in scripts - but in general very little modification should be necessary.

      There was also a change to the algorithm that looked for the closest text control. It missed some obvious controls in the previous implementation. It also had a bug for controls above the control rather than to the left.

    • Added a new example scripts SaveFromInternetExplorer.py and SaveFromFirefox.py which show automating downloading of a page from either of these browsers.

    • Added yet more unit tests, there are now a total of 134 tests.

    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Jun 25, 2015)

    • Changed how windows are searched for (from application) This change should not be a significant change for users
    • Started adding unit tests (and the have already uncovered bugs that been fixed). They also point to areas of missing functionality that will be added with future updates
    • Changed from property access to Control attributes to function access If your code was accessing properties of controls then this might be a significant change! The main reasons for doing this were due to the inheritability of properties (or lack there-of!) and the additional scaffolding that was required to define them all.
    • Updated the DialogWrapper.MenuSelect() method to notify the parent that it needs to initialize the menu's before it retrieves the items
    • Added functionality to associate 'non-text' controls with the 'text' control closest to them. This allows controls to be referenced by
        app.dlg.<Nearby_text><Window_class>
    

    e.g. to reference the "Footer" edit control in the Page Setup dialog you could use

        app.PageSetup.FooterEdit
    
    • Added a MoveWindow method to HwndWrapper
    • Did some more cleanup (fixing pylint warnings) but still not finished
    • Added some better support for .NET controls (not to be considered final)
    Source code(tar.gz)
    Source code(zip)
  • 0.1.3(Jun 25, 2015)

    • Wrote doc strings for all modules, classes and functions
    • Ran pychecker and pylint and fixed some errors/warning
    • changed
        _connect, _start, _window, _control, _write
    

    respectively to

        connect_, start_, window_, connect_, write_
    

    If you forget to change _window, _connect and _start then you will probably get the following error:

        TypeError: '_DynamicAttributes' object is not callable
    
    • pywinauto is now a package name - you need to import it or its modules
    • Changes to the code to deal with pywinauto package name
    • Fixed searching for windows if a Parent is passed in
    • Added Index to retrieved MenuItem dictionary
    • Added a check to ensure that a windows Handle is a valid window
    • Refactored some of the methods in common_controls
    • Refactored how FriendlyClassName is discovered (and still not really happy!)
    Source code(tar.gz)
    Source code(zip)
  • 0.1.2(Jun 25, 2015)

    • Updated Readme (original readme was incorrect)
    • Added clipboard module
    • Fixed DrawOutline part of tests.__init__.print_bugs
    • Added a NotifyParent to HwndWrapper
    • Make sure that HwndWrapper.ref is initialized to None
    • Refactored some methods of ComboBox and ListBox
    • Updated Combo/ListBox selection methods
    • Removed hardcoded paths from test_application.py
    • Added section to save the document as UTF-8 in MinimalNotepadTest
    • Fixed EscapeSpecials and UnEscapeSpecials in XMLHelpers
    • Made sure that overly large bitmaps do not break XML writing
    Source code(tar.gz)
    Source code(zip)
  • 0.1.1(Jun 25, 2015)

Owner
Windows GUI Automation with Python
A configurable set of panels that display various debug information about the current request/response.

Django Debug Toolbar The Django Debug Toolbar is a configurable set of panels that display various debug information about the current request/respons

Jazzband 7.3k Jan 02, 2023
This project is used to send a screenshot by email of your MyUMons schedule using Selenium python lib (headless mode)

MyUMonsSchedule Use MyUMonsSchedule python script to send a screenshot by email (Gmail) of your MyUMons schedule. If you use it on Windows, take care

Pierre-Louis D'Agostino 6 May 12, 2022
🎓 Stepik Academy Автоматизация тестирования на Python

🎓 Stepik Academy Автоматизация тестирования на Python Запуск тестов выполняется в командной строке: pytest -v --tb=line --language=en --alluredir=all

Sergey 1 Dec 03, 2021
Python Testing Crawler 🐍 🩺 🕷️ A crawler for automated functional testing of a web application

Python Testing Crawler 🐍 🩺 🕷️ A crawler for automated functional testing of a web application Crawling a server-side-rendered web application is a

70 Aug 07, 2022
Language-agnostic HTTP API Testing Tool

Dredd — HTTP API Testing Framework Dredd is a language-agnostic command-line tool for validating API description document against backend implementati

Apiary 4k Jan 05, 2023
MongoDB panel for the Flask Debug Toolbar

Flask Debug Toolbar MongoDB Panel Info: An extension panel for Rob Hudson's Django Debug Toolbar that adds MongoDB debugging information Author: Harry

Cenk Altı 4 Dec 11, 2019
Integration layer between Requests and Selenium for automation of web actions.

Requestium is a Python library that merges the power of Requests, Selenium, and Parsel into a single integrated tool for automatizing web actions. The

Tryolabs 1.7k Dec 27, 2022
Set your Dynaconf environment to testing when running pytest

pytest-dynaconf Set your Dynaconf environment to testing when running pytest. Installation You can install "pytest-dynaconf" via pip from PyPI: $ pip

David Baumgold 3 Mar 11, 2022
Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away

Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away. Fast execution of profit-take/loss-cut orders is built-in. Seamless with Pandas.

Epymetheus 39 Jan 06, 2023
Pytest plugin for testing the idempotency of a function.

pytest-idempotent Pytest plugin for testing the idempotency of a function. Usage pip install pytest-idempotent Documentation Suppose we had the follo

Tyler Yep 3 Dec 14, 2022
This is a web test framework based on python+selenium

Basic thoughts for this framework There should have a BasePage.py to be the parent page and all the page object should inherit this class BasePage.py

Cactus 2 Mar 09, 2022
Airspeed Velocity: A simple Python benchmarking tool with web-based reporting

airspeed velocity airspeed velocity (asv) is a tool for benchmarking Python packages over their lifetime. It is primarily designed to benchmark a sing

745 Dec 28, 2022
Code coverage measurement for Python

Coverage.py Code coverage testing for Python. Coverage.py measures code coverage, typically during test execution. It uses the code analysis tools and

Ned Batchelder 2.3k Jan 04, 2023
Let your Python tests travel through time

FreezeGun: Let your Python tests travel through time FreezeGun is a library that allows your Python tests to travel through time by mocking the dateti

Steve Pulec 3.5k Dec 29, 2022
Python tools for penetration testing

pyTools_PT python tools for penetration testing Please don't use these tool for illegal purposes. These tools is meant for penetration testing for leg

Gourab 1 Dec 01, 2021
Python script to automatically download from Zippyshare

Zippyshare downloader and Links Extractor Python script to automatically download from Zippyshare using Selenium package and Internet Download Manager

Daksh Khurana 2 Oct 31, 2022
Based on the selenium automatic test framework of python, the program crawls the score information of the educational administration system of a unive

whpu_spider 该程序基于python的selenium自动化测试框架,对某高校的教务系统的成绩信息实时爬取,在检测到成绩更新之后,会通过电子邮件的方式,将更新的成绩以文本的方式发送给用户,可以使得用户在不必手动登录教务系统网站时,实时获取成绩更新的信息。 该程序仅供学习交流,不可用于恶意攻

1 Dec 30, 2021
Lightweight, scriptable browser as a service with an HTTP API

Splash - A javascript rendering service Splash is a javascript rendering service with an HTTP API. It's a lightweight browser with an HTTP API, implem

Scrapinghub 3.8k Jan 03, 2023
This is a bot that can type without any assistance and have incredible speed.

BulldozerType This is a bot that can type without any assistance and have incredible speed. This bot currently only works on the site https://onlinety

1 Jan 03, 2022
Turn any OpenAPI2/3 and Postman Collection file into an API server with mocking, transformations and validations.

Prism is a set of packages for API mocking and contract testing with OpenAPI v2 (formerly known as Swagger) and OpenAPI v3.x. Mock Servers: Life-like

Stoplight 3.3k Jan 05, 2023