{"id":22358891,"url":"https://github.com/imbus/robotframework-platynui","last_synced_at":"2025-10-10T14:03:09.816Z","repository":{"id":259095374,"uuid":"807563026","full_name":"imbus/robotframework-PlatynUI","owner":"imbus","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-19T09:02:02.000Z","size":1716,"stargazers_count":2,"open_issues_count":16,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-11-26T20:06:07.248Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imbus.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-29T10:43:32.000Z","updated_at":"2024-11-19T09:02:06.000Z","dependencies_parsed_at":"2024-11-12T14:02:01.993Z","dependency_job_id":null,"html_url":"https://github.com/imbus/robotframework-PlatynUI","commit_stats":null,"previous_names":["imbus/robotframework-platynui"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbus%2Frobotframework-PlatynUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbus%2Frobotframework-PlatynUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbus%2Frobotframework-PlatynUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbus%2Frobotframework-PlatynUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imbus","download_url":"https://codeload.github.com/imbus/robotframework-PlatynUI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228133609,"owners_count":17874511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-04T15:18:14.123Z","updated_at":"2025-10-10T14:03:04.785Z","avatar_url":"https://github.com/imbus.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: 2024 Daniel Biehl \u003cdaniel.biehl@imbus.de\u003e\n\nSPDX-License-Identifier: Apache-2.0\n--\u003e\n\n# robotframework-PlatynUI\n\n[![PyPI - Version](https://img.shields.io/pypi/v/robotframework-platynui.svg)](https://pypi.org/project/robotframework-platynui)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/robotframework-platynui.svg)](https://pypi.org/project/robotframework-platynui)\n\n-----\n\n## Table of Contents\n\n- [robotframework-PlatynUI](#robotframework-platynui)\n  - [Table of Contents](#table-of-contents)\n  - [Disclaimer](#disclaimer)\n  - [Project Description](#project-description)\n    - [Why PlatynUI?](#why-platynui)\n  - [Testable Frameworks](#testable-frameworks)\n  - [Installation](#installation)\n  - [Spy Tool](#spy-tool)\n  - [Demo](#demo)\n  - [Application Example](#application-example)\n  - [Roadmap](#roadmap)\n  - [Contributing](#contributing)\n    - [Setup Dev Environment](#setup-dev-environment)\n  - [Versioning](#versioning)\n  - [License](#license)\n\n## Disclaimer\n\nThis project is still under development and should not be used productively **yet**.\n\nAt the current state expect:\n\n- bugs\n- missing features\n- missing documentation\n\nFeel free to contribute, create issues, provide documentation or test the implementation.\n\n## Project Description\n\nPlatynUI is a library for Robot Framework, providing a cross-platform solution for UI test automation. Its main goal is to make it easier for testers and developers to identify, interact with, and verify various UI elements.\n\nWe aim to provide a Robot Framework-first library.\n\n### Why PlatynUI?\n\n- Cross-platform capability with consistent API across Windows, Linux, and MacOS\n- Direct access to native UI elements\n- Simplified element identification\n- Builtin ui spy tool\n\n## Testable Frameworks\n\n- **Linux**\n  - X11\n  - AT-SPI2\n- **Windows**\n  - Microsoft UI Automation (UIA)\n- **MacOS**\n  - Accessibility API\n\nExtendable for any other ui technologies.\n\n## Installation\n\n```console\npip install robotframework-platynui\n```\n\n## Spy Tool\n\nAfter installation, start the spy tool on the command line with this command:\n\n```console\nPlatynUI.Spy\n```\n\n- Start any application\n- Identify elements and properties in your application\n- Access elements with it's properties and build locators to access and simulate ui applications\n\n## Demo\n\n- [Robocon 2025](https://www.youtube.com/watch?v=H3gOjp1VZWQ)\n\n## Application Example\n\n```python\n@locator(name=\"Rechner\")\nclass CalculatorWindow(Window):\n    @property\n    @locator(AutomationId=\"num5Button\")\n    def n5(self) -\u003e Button: ...\n    @property\n    @locator(AutomationId=\"num6Button\")\n    def n6(self) -\u003e Button: ...\n    @property\n    @locator(AutomationId=\"plusButton\")\n    def plus(self) -\u003e Button: ...\n    @property\n    @locator(AutomationId=\"equalButton\")\n    def equal(self) -\u003e Button: ...\n```\n\n```robot\n*** Settings ***\nLibrary     PlatynUI\nVariables   apps.calculator\n\n*** Test Cases ***\nTest Addition Of Two Numbers\n    Activate    ${calculator.n5}\n    Activate    ${calculator.plus}\n    Activate    ${calculator.n6}\n    Activate    ${calculator.equal}\n    Get Text    ${calculator.result}    should be    11\n```\n\n## Roadmap\n\nRoadmap will soon be displayed [here](https://github.com/imbus/robotframework-PlatynUI/projects)\n\n## Contributing\n\nWe welcome contributions to the project! Here are some ways you can contribute:\n\n- **Report Bugs**: Use [GitHub Issues](https://github.com/imbus/robotframework-PlatynUI/issues) to report bugs.\n- **Suggest Features**: Use [GitHub Issues](https://github.com/imbus/robotframework-PlatynUI/issues) to suggest new features.\n- **Submit Pull Requests**: Fork the repository, make your changes, and submit a pull request. Please ensure your code follows our coding standards and includes tests.\n\nContribution guidelines are currently in creation and will be available soon.\n\n### Setup Dev Environment\n\nIf you want to start now, you can setup a dev environment with following steps:\n\n- **Prerequisites**:\n  - .NET 8.0\n  - Python 3.10 or higher\n  - Hatch\n\n- Clone the repository from [Github](https://github.com/imbus/robotframework-PlatynUI)\n\n- Create Hatch environment (also creates the .NET environment)\n\n  ```console\n  cd robotframework-PlatynUI\n  hatch env create\n  ```\n\n## Versioning\n\nWe use [Semantic Versioning](https://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/imbus/robotframework-PlatynUI/tags).\n\n[Changelog](https://github.com/imbus/robotframework-PlatynUI/blob/main/CHANGELOG.md) is maintained using conventional commits.\n\n## License\n\n`robotframework-PlatynUI` is distributed under the terms of the [Apache 2.0](https://spdx.org/licenses/Apache-2.0.html) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimbus%2Frobotframework-platynui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimbus%2Frobotframework-platynui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimbus%2Frobotframework-platynui/lists"}