fast-win-automator
v1.0.0
Published
A lightweight, high-performance native Windows UI Automation library.
Downloads
167
Maintainers
Readme
fast-win-automator 🚀
A lightweight, blazing-fast, dependency-free native Windows UI Automation library for Node.js and TypeScript.
Unlike traditional automation frameworks (like Appium/WinAppDriver) that rely on heavy HTTP servers, Java environments, and outdated background drivers, fast-win-automator communicates directly with the Windows OS kernel via modern native UI Automation (UIA3) C++ bindings.
Key Features
- ⚡ Ultra-Low Latency: In-process C++ execution runs commands and assertions in
< 1msinstead of the50ms+overhead of WebDriver HTTP requests. - 📦 Zero External Dependencies: No need to install Java, Python, or external Windows executables. A simple
npm installis all it takes. - 🎯 Flake-Free Targeting: Find elements reliably by their structural
AutomationIdrather than flimsy screen coordinates or flaky text labels. - 🔄 Background Execution: Because it uses native OS control patterns, tests can trigger clicks and inputs even if the target application is minimized or hidden behind another window.
- 💪 Modern Windows UI Support: Built specifically for native UIA3 COM interfaces, offering native support for WinUI 3, MAUI, WPF, Win32, and Chromium-based Electron desktop shells.
Installation
Install the library directly via npm:
npm install fast-win-automator
Getting Started
Ensure the application you want to test is running on your desktop. You can use tools like Accessibility Insights for Windows or Inspect.exe to find the exact AutomationId of any layout element.
TypeScript / JavaScript Example
TypeScript
import { WindowsAutomator } from 'fast-win-automator';
const driver = new WindowsAutomator();
async function runTest() {
console.log("Initializing Test Execution...");
try {
// Automatically handles implicit waiting loops to ensure elements are ready before clicking
await driver.click("equalButton", { timeout: 5000 });
console.log("🎉 Success! The element was clicked natively.");
} catch (error) {
console.error("❌ Test Failed:", error.message);
}
}
runTest();