Skip to main content

Python wrapper for the Windows Java Access Bridge

Project description

Version License

Introduction

Python wrapper around the Java Access Bridge / Windows Access Bridge.

Requirements

Enable the Java Access Bridge in windows

C:\path\to\java\bin\jabswitch -enable

Install

pip install java-access-bridge-wrapper

How to use

Import the Java Access Bridge (JAB) wrapper and optionally the context tree

from JABWrapper.jab_wrapper import JavaAccessBridgeWrapper
from JABWrapper.context_tree import ContextNode, ContextTree, SearchElement

The JAB creates an virtual GUI window when it is opened. For the JAB to operate and receive events from the GUI, the calling code needs to implement the windows message pump and call it in a loop. The JABWrapper object needs to be in the same thread.

This can be achieved for example by starting the message pump in a separate thread, where the JAB object is also initialized.

GetMessage = ctypes.windll.user32.GetMessageW
TranslateMessage = ctypes.windll.user32.TranslateMessage
DispatchMessage = ctypes.windll.user32.DispatchMessageW

def pump_background(pipe: queue.Queue):
    try:
        jab_wrapper = JavaAccessBridgeWrapper()
        pipe.put(jab_wrapper)
        message = byref(wintypes.MSG())
        while GetMessage(message, 0, 0, 0) > 0:
            TranslateMessage(message)
            logging.debug("Dispatching msg={}".format(repr(message)))
            DispatchMessage(message)
    except Exception as err:
        pipe.put(None)

def main():
    pipe = queue.Queue()
        thread = threading.Thread(target=pump_background, daemon=True, args=[pipe])
        thread.start()
        jab_wrapper = pipe.get()
        if not jab_wrapper:
            raise Exception("Failed to initialize Java Access Bridge Wrapper")
        time.sleep(0.1) # Wait until the initial messages are parsed, before accessing frames

if __name__ == "__main__":
    main()

Once the JABWrapper object is initialized, attach to some frame and optionally create the context tree to get the element tree of the application.

jab_wrapper.switch_window_by_title("Frame title")
context_tree = ContextTree(jab_wrapper)

Development

Prerequisites

  1. Install Invoke, Poetry and the other required dependencies in order to be able to develop and package the library: pip install -Ur requirements.txt.
    • If you want to isolate these from the other projects and not rely on the OS Python, enable a (pyenv) virtual environment first by following these instructions.
  2. Now you're ready to set-up Poetry for the first time with inv setup.
    • Check with -h on how to pass credentials for ensuring that both your production PyPI and CI DevPI are configured. You'll find these in our Robocorp > Shared 1Password by searching for keywords like "pypi" (where we recommend a personal token instead) and "devpi".
  3. Run inv update so the library gets ready for development.

Testing

Run test script against a simple Swing application.

Set environment variable

set RC_JAVA_ACCESS_BRIDGE_DLL="C:\path\to\Java\bin\WindowsAccessBridge-64.dll"

Update requirements and install the library in development mode

inv update

Run tests

inv test  # runs all the tests in all scenarios
inv test -s -t test_jab_wrapper.py  # runs all the tests from a file in one simple common scenario
inv test -s -c -t test_jab_wrapper.py::test_depth  # as above, but specific test and captures output

Packaging

Check linting

inv lint  # apply with '-a'

Building and publishing

inv publish  # '-c' for DevPI

TODO:

  • Support for 32-bit Java Access Bridge version
  • Implement rest of the utility functions to the JABWrapper

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

java_access_bridge_wrapper-1.2.0.tar.gz (29.4 kB view details)

Uploaded Source

Built Distribution

java_access_bridge_wrapper-1.2.0-py3-none-any.whl (32.9 kB view details)

Uploaded Python 3

File details

Details for the file java_access_bridge_wrapper-1.2.0.tar.gz.

File metadata

File hashes

Hashes for java_access_bridge_wrapper-1.2.0.tar.gz
Algorithm Hash digest
SHA256 77b9e88d84a74794fa69fda486dc756a8b4f69442d3f51551eb51935d8be70ed
MD5 10290394e8ff115d781dc1956af7895c
BLAKE2b-256 ff0ee4542f601a1e15c72c4e813a6f3e6d825a1297be3ee5e58d73be0919532e

See more details on using hashes here.

File details

Details for the file java_access_bridge_wrapper-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for java_access_bridge_wrapper-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0875687a70e5dea48806db387de440ebacd02c9a84447a592aa42a0281bcfc1
MD5 c8493a8042441ce00f401347e9346a06
BLAKE2b-256 8685ffd3f9e255f34d4b717d60c755b2934bbd8d8287483c4bedf9743b12c70e

See more details on using hashes here.

Supported by

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