Skip to main content

GUI discovery

Project description

discogui discovers GUI elements

Links:

Travis Coveralls Latest Version Supported Python versions License Code Health Documentation

Features:
  • python module

  • works on Linux

  • does not depend on Accessibility technologies

  • toolkit independent

  • only basic tests on very simple GUI

  • GUI should be displayed on Xvfb or Xephyr

Known problems:
  • Python 3 is not supported

  • slow

Possible applications:
  • automatic GUI testing

  • automatic GUI control

Basic usage

from discogui.buttons import discover_buttons
from easyprocess import EasyProcess
from pyvirtualdisplay import Display
with Display():
    with EasyProcess('zenity --question') as p:
        p.sleep(1)
        buttons = discover_buttons()
print buttons

Installation

General

  • install Xvfb and Xephyr

  • install Xlib

  • install scrot

  • install PIL

  • install xdotool

  • install pip

  • install latest PyMouse and the program:

    # as root
    pip install https://github.com/pepijndevos/PyMouse/zipball/master
    pip install discogui

Ubuntu 14.04

sudo apt-get install python-pip xvfb python-xlib scrot python-pil xdotool
sudo pip install https://github.com/pepijndevos/PyMouse/zipball/master
sudo pip install discogui

Uninstall

# as root
pip uninstall discogui

Usage

basic

Code:

#-- include('examples/basic.py')--#
'''
1. start zenity Yes/No dialog on Xvfb
2. discover buttons using :mod:`discogui.buttons` module
3. print rectangles
'''
from discogui.buttons import discover_buttons
from easyprocess import EasyProcess
from pyvirtualdisplay import Display


def main():
    with Display(visible=0):
        with EasyProcess('zenity --question') as p:
            p.sleep(5)
            buttons = discover_buttons()
    print( buttons )


if __name__ == '__main__':
    main()
#-#

Output:

#-- sh('python -m discogui.examples.basic 2>/dev/null')--#
[ScreenRect((582,407,667,442)), ScreenRect((491,407,576,442))]
#-#

button discovery on zenity

Code:

#-- include('examples/buttondiscovery.py')--#
'''
1. start zenity Yes/No dialog on Xvfb
2. discover buttons using :mod:`discogui.buttons` module
3. print rectangles
4. draw red rectangles on screenshot
'''
from easyprocess import EasyProcess
from pyscreenshot import grab
from discogui.buttons import discover_buttons
from discogui.draw import draw_indexed_rect_list
from discogui.imgutil import autocrop
from pyvirtualdisplay import Display


def main():
    with Display(visible=0):
        with EasyProcess('zenity --question') as p:
            p.sleep(1)

            img = grab()
            rectangles = discover_buttons()
            print( rectangles )

    img = draw_indexed_rect_list(img, rectangles)
    img = autocrop(img)

    # display results
    img.show()

if __name__ == '__main__':
    main()
#-#

Image:

_img/screenshot_buttondiscovery.png

button discovery on gnumeric

Code:

#-- include('examples/hovergnumeric.py')--#
'''
1. start gnumeric on Xvfb with low ersolution
2. discover buttons using :mod:`discogui.hover` module
3. print rectangles
4. draw red rectangles on screenshot
'''
from discogui.draw import draw_indexed_rect_list
from discogui.hover import active_rectangles
from discogui.imgutil import autocrop
from easyprocess import EasyProcess
# from pyscreenshot import grab
# from pyvirtualdisplay import Display
from pyvirtualdisplay.smartdisplay import SmartDisplay
# import time


def main():
    with SmartDisplay(size=(640, 480), visible=0) as disp:
        with EasyProcess('gnumeric'):
#            time.sleep(2)
            img = disp.waitgrab(timeout=60)
            rectangles = active_rectangles()
            print( rectangles )

    img = draw_indexed_rect_list(img, rectangles)
    img = autocrop(img)

    # display results
    img.show()

if __name__ == '__main__':
    main()
#-#

Image:

_img/screenshot_hovergnumeric.png

button test

Code:

#-- include('examples/clickbutton.py')--#
'''
1. start zenity Yes/No dialog on Xvfb
2. discover buttons using :mod:`discogui.buttons` module
3. click first button, print return code
4. click second button, print return code
'''
from discogui.buttons import discover_buttons
from discogui.mouse import PyMouse
from easyprocess import EasyProcess
from pyvirtualdisplay import Display
import time


def click_button_get_return_code(which_button):
    with EasyProcess('zenity --question') as p:
        time.sleep(1)
        rectangles = discover_buttons()
        PyMouse().click(*rectangles[which_button].center)
        return p.wait().return_code


def main():
    with Display():
        print( click_button_get_return_code(0) )
        print( click_button_get_return_code(1) )

if __name__ == '__main__':
    main()
#-#

Output:

#-- sh('python -m discogui.examples.clickbutton 2>/dev/null')--#
0
1
#-#

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

discogui-0.1.tar.gz (47.6 kB view details)

Uploaded Source

File details

Details for the file discogui-0.1.tar.gz.

File metadata

  • Download URL: discogui-0.1.tar.gz
  • Upload date:
  • Size: 47.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/2.7

File hashes

Hashes for discogui-0.1.tar.gz
Algorithm Hash digest
SHA256 0831a624ccd276e83b21fd5af076026b37edc3c739bdecb04d8252f81d3f3463
MD5 a9bc6c9f7ff85b242b16a752e25de8f1
BLAKE2b-256 53c74c74232f34c900c658a6e487f5210124001009790925584f33ad49f6e865

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page