Concepts

Browser Automation Basics

GPAL.Browser is the entry point for web automation. GoTo drives a real browser through a page; Get fetches HTML directly with no browser at all. Tabs, history, and the server's last response code round out the basics.

Browser Profiles: Signed-In vs Temporary

For the most reliable bot-resistant runs, point GPAL at a real Chrome profile that already has a signed-in session, cookies, and browsing history. If you don't specify one, GPAL creates a temporary profile for the session and deletes it afterward - which works, but looks more 'bot-like' and can run into its own problems.

Browser Storage: Defining and Running Storage Actions

GPALUrl carries a list of storage actions - cookies, localStorage, sessionStorage, indexedDb, and cache - to inspect or change once that URL is active. The With...() calls used to define those actions on the GPALUrl double as filters when called on the browser before RunGet/RunSet/RunDelete, and WithUserDefined gives you a fallback when the built-in fields cannot pin down the action you mean.

Desktop Application Automation

GPAL.Application automates desktop programs - GUI applications running outside the browser - using the same selectors, actions, and units of work as GPAL.Browser.

Hardware-Level Interaction

WithHardware switches an element's interaction from programmatic DOM/UI-Automation calls to real OS-level mouse and keyboard events - the same input a person generates - and it works the same way for both browsers and desktop applications.

Page Readiness: Document Ready vs Network Idle

WithWaitOnDocumentReady and WithWaitOnIdleConnection both make GPAL wait before continuing after a navigation, but they measure 'ready' very differently - and for pages that load data asynchronously, only one of them tells the truth.

Selenium's JavaScript Injection Override

WithJavaScript swaps Selenium's normal element interaction for direct JavaScript injection - an escape hatch that's only meaningful for Selenium, since Puppeteer and OttoMagic have no equivalent 'normal' interaction to override in the first place.

Waiting: Before an Element vs After an Action

WaitFor means two different things depending on where it appears in a workflow: after WithSelector it's a search timeout for elements that haven't appeared yet; after an action it's a plain sleep. Knowing which one you're calling matters.