GPAL Compared

Last verified: 2026-09-25

GPAL against the tools people already know: Playwright, Puppeteer, Selenium, UiPath, Power Automate and TestCafe. Two rules decide what goes on this page.

Where they are ahead, the page says so. Anything not yet run is marked untested, and the page is updated as runs land.

The tools

GPAL is an automation library that drives a real browser and the Windows desktop from one C# workflow. Playwright, Puppeteer, Selenium and TestCafe are browser testing and automation frameworks. UiPath and Power Automate are RPA platforms. Blueprint MCP puts a real browser in the hands of an AI assistant.

ToolWhat it isBest forRuns onLicensing
GPALC# automation library; Selenium, Puppeteer and the OttoMagic extension behind one fluent APIUnattended workflows across browser and desktop, on a real profileWindowsBusiness Source License 1.1
PlaywrightBrowser testing framework (Microsoft)Cross-browser testing in CIWindows, macOS, LinuxOpen source
PuppeteerChromium control library over CDP (Google)Scripting Chrome from NodeWindows, macOS, LinuxOpen source
SeleniumWebDriver standard and bindingsCross-browser testing, gridsWindows, macOS, LinuxOpen source
TestCafeBrowser testing framework (DevExpress)Web app testing in NodeWindows, macOS, LinuxOpen source
UiPathRPA platform with a visual designerEnterprise RPA with orchestrationWindowsCommercial, licensed per robot
Power AutomateMicrosoft RPA and cloud flowsMicrosoft 365 shopsWindowsCommercial, Microsoft plans
Blueprint MCPMCP server and browser extension (Rails Blueprint)Letting an AI assistant drive your real browser profileChrome, Edge and Firefox, through NodeOpen source, with a paid tier

Feature matrix

One row per job.

Yes documented, one call   Partial a recipe, or with limits   No not documented

JobGPALPlaywrightPuppeteerSeleniumUiPathPower AutomateTestCafe
Download a file Yes. One call on all three engines Yes. Download class Partial. CDP download behavior, then watch the folder Partial. Set the profile folder, then poll it Partial. Configure the browser, check the folder Partial. Script the Save As dialog with UI automation No
Upload a file Yes. Direct or through the OS dialog Yes Yes Yes Yes. OS dialog Partial. Script the Upload dialog with UI automation Yes
Several paths in one selector Yes. CSS, XPath and image, tried in order declared No. One locator No No Partial. Fuzzy matching and anchors Yes. Several selectors per element, tried in order No. One CSS string or function per Selector
Handler for a banner or modal, anywhere in the run Yes. Persistent selectors No No No No No. Pop-up handling is set per action Partial. Native dialogs only
Wait for an element before acting Yes. WaitFor in the unit of work Yes Partial. waitForSelector Partial. Explicit waits Yes. Timeout and Wait for page load on every activity Yes. Wait for web page content Yes
Wait for an element to reach a state Yes. Visible, hidden, enabled, disabled, checked, selected, clickable, editable Partial. Visible and hidden through waitFor; other states test-runner only Partial. Visible and hidden through waitForSelector; enabled only before actions Partial. WebDriverWait with a lambda; .NET dropped ExpectedConditions Partial. Appear and disappear through Check App State Partial. Appear and disappear; enabled and disabled for desktop windows only Partial. Visible through visibilityCheck; other states via retrying assertions
Hardware input for the whole run Yes. A hardware engine variant, or per selector on any engine No No No Partial. Chosen per activity No. Physical or simulated, chosen per action No. Cannot emulate system events
Call the site's API as the browser Yes. Fetch runs inside the page on all three engines Partial. APIRequestContext shares cookies, not the transport Partial. Hand-written fetch in evaluate Partial. Hand-written fetch in executeScript No. HTTP Request has no browser session Partial. Hand-written fetch in Run JavaScript Partial. Hand-written fetch in a ClientFunction
Hand the session to a browserless client Yes. ContinueAsRESTClient Yes. APIRequestContext No No No No. HTTP actions keep their own cookies Partial. t.request with cookies copied by hand
Run script before the page runs Yes. One call on all three engines, Chromium browsers Yes. Chromium, Firefox and WebKit Yes. evaluateOnNewDocument Partial. Raw CDP, or BiDi on Firefox No No. JavaScript runs on the current page only Yes. Client scripts run before the page loads
Real browser profile with modern automation Yes. On all three engines No. Default Chrome profile not supported Partial. userDataDir or connect; default profile undocumented Partial. user-data-dir argument; docs use temporary dirs Partial. Extension mode only; CDP and WebDriver are isolated Yes. Extension uses the default profile No. Real profile excludes native automation
Headful browser nobody can see Yes. Hidden desktops, no admin, runs on Windows Home No. Headless or on screen No. Headless or on screen No. Headless or on screen Partial. PiP, a child session over RDP Partial. Child session, or virtual desktop in preview; Pro or Enterprise No. Headless or on screen
Parallel workflows, each on its own hidden desktop Yes. Each workflow owns its browser and its desktop No hidden desktops No hidden desktops No hidden desktops Partial. PiP child session Partial. PiP session No hidden desktops
Browser and desktop apps in one workflow Yes. UIAutomation beside the browser No. Browser only No. Browser only No. Browser only Yes Yes No. Electron apps only
Choice of engine per run Yes. Selenium, Puppeteer or OttoMagic No. One No. One No. One Partial. Five browser modes, set per activity or project Yes. Extension or WebDriver per Launch Browser No. Set by the browser chosen
Linux and containers No. Windows only Yes Yes Yes Partial. Linux robot in Docker, cross-platform Chrome only No Yes

Anti-bot protection

One row per protection, filled in only from real runs. Everything else stays untested until a run fills it; nothing here is inferred from a vendor name.

Two routes are tested. Fetch is the browser making the call from inside the page. Handoff is ContinueAsRESTClient, the same session taken out of the browser.

ProtectionSite and endpointFetchHandoffRun
Akamai Bot Manager radissonhotels.com, availability-api/multiple-price-from Passed. Real rate data Blocked at the edge 2026-08-20, Chrome, Selenium and Puppeteer
Akamai harrods.com, proxied Algolia search Passed Passed only right after a real search 2026-08-20 and 2026-08-21, Chrome
DataDome leroymerlin.fr, search-autocomplete suggest Passed Passed 2026-08-20, Chrome
CloudflareUntestedUntested
PerimeterX (HUMAN)UntestedUntested
AWS WAFUntestedUntested
KasadaUntestedUntested
FastlyUntestedUntested

The same protection does not predict the route. Akamai on Radisson let only the in-page call through; Akamai on Harrods let both through for a while. What matters is being able to ask per site, per endpoint, against one session.

How we know

Every feature has a tester program behind it that drives the real thing and checks the result, and every check has passed.

Each browser feature is run on every engine and browser combination it supports, windowed and headless: Selenium on Chrome, Edge and Firefox, Puppeteer on Chrome and Edge, and OttoMagic on Chrome, Edge and Firefox. Script injection has no Firefox path yet, and hidden desktops with image matching are coming Q1 2027.

Browser

  • Navigation, tabs and windows
  • Every kind of click, hover, focus and drag and drop
  • Typing, key presses and modifier keys
  • Select lists, sliders and ranges
  • Finding elements, reading and writing their attributes, and page state
  • Frames and shadow roots
  • Alerts, confirms and prompts
  • Scrolling of the window and of elements, and end-of-page detection
  • Cookies, localStorage, sessionStorage, Cache and IndexedDB
  • Downloads to a named file and uploads of one or many files
  • Files from a url carrying the session, with web auth
  • The site's own API called from inside the page, and the session handed to a REST client
  • Script injected before the page runs
  • Persistent selectors that fire wherever they match
  • Image matching, including inside shadow DOM and iframes
  • Hardware input as well as simulated
  • Every REST endpoint and client workflow paging
  • Parallel workflows, each with its own browser, on the screen or on hidden desktops

Desktop

  • Applications through UIAutomation: typing, menus, every click kind, scrolling and grids
  • File dialogs: open, save, and folder pickers
  • The clipboard
  • Windows Explorer: grid reads, selection, and drag and drop of files
  • Programs running on hidden desktops

Data

  • SQL Server: CRUD, twelve parameter types, stored procedures, table-valued parameters and transactions
  • Excel, Google Sheets and Google Drive
  • Converters across CSV, YAML, Excel, database and file, with round trips
  • Cryptography: AES-GCM, salted hashes and RSA signing
  • Logging to file, CSV, database and email

Where we lose

A comparison with no losses in it does not get believed. These are ours.

Roadmap

What is coming to GPAL, and roughly when.

FeatureWhat it doesTarget
Bot of the WeekA new GPAL bot with its full source and a walkthrough. Ideas in the queue: a GitHub release watcher, a daily news digest, a batch file processor, a log viewer, and a test runner for your own workflowsEvery week
Two-factor sign-inTOTP codes from a stored secret, and QR codes read off a page, so a workflow signs in past 2FA unattendedQ4 2026
OttoMagic updateTypes into the focused element, resolves image matches to page elements, and loads into temporary Firefox profilesQ4 2026
NotificationsPosts to Slack, Teams or any webhook when a workflow finishes or failsQ4 2026
ArchivesZip and unzip in the fluent chain: download, unpack, convertQ4 2026
Clipboard in and outCopy from an application or a page to the clipboard, and fill a field from itQ4 2026
MCP serverAI assistants such as Claude and Cursor drive your own browser through OttoMagicQ1 2027
SFTP and SSHPicks up from and drops files on the servers enterprises still useQ1 2027
Steadier automationScrolling finds the element that really scrolls, and actions wait for a slow application to catch upQ1 2027
Application image matching on hidden desktopsCaptures the application's own window and clicks the control under the match, so image selectors work where the mouse cannot reachQ1 2027
MySQL and PostgreSQLThe database support SQL Server has today, on bothQ2 2027
Richer database callsStored procedure OUTPUT and RETURN values, and update and delete built from a table name and its keyQ2 2027
GPAL.OCRReads text from images and the screen, as its own packageQ2 2027
Forms polishWrapped cells in list views, and tree views filled before the form opensQ2 2027
UIAutomation engine choicePick the managed or COM UIAutomation engine per run, so Outlook, Word and native Win32 apps answer properlyQ2 2027
GPAL StudioThe visual workflow builder out of preview, with a new look built on the parts it has todayQ2 2027
PDFReads text and tables out of PDFs, the statement you just downloadedQ3 2027
Presentation outputRenders data to PDF, PNG, Word or a styled HTML reportQ3 2027
Secure remote controlGPAL on one machine, the browser on another, across the LAN or the internet, behind secure authenticationQ3 2027
Workflows as AI toolsYour compiled workflows become tools an AI assistant can run, the same way every timeQ3 2027
OttoPilotRuns workflows on a schedule, watches them, restarts them and keeps their historyQ4 2027
Bot fleet templatesLocked VMs that log themselves in and start their agents: one turns dropped files into jobs, the rest pull jobs from a queue and run the workflowQ4 2027
Hosted GPALGPAL as a service, built on secure remote controlLater
Macros in OttoMagicBuild and play step-by-step macros from the extension itselfLater
.NET 8A second target alongside .NET Framework 4.8Later
💬 Ask GPAL