GPAL - Generally Positive Automation Library v1.0
GPAL The Fluent Automation LIbrary
Loading...
Searching...
No Matches
GenerallyPositive.GPAL Class Reference

Everything starts here, all the GPAL controls and global settings using fluent syntax are here. GPAL cannot inherit any of the GPAL interfaces since it is a static class, but it does implement them, but will return some GPAL object or interface. More...

Classes

class  GPALEventArgs
 Used to pass objects of interest when publishing an Information or Exception Channel message
NOTE: Properties are contextual to where the Information/Exception is published.
Only objects relevant to that context will be passed as an event argument, the rest will be null.
In this way, the programmer can examine aspects when the message is published and utilize those for logging or debugging or fault-tolerance handling.
Every event will have a GPALObject as applicable to the context publishing the message.. More...

Static Public Member Functions

static void RegisterOCR (Func< OCRInterfaces.IGPALOCR > factory)
static IGPALExcel ExcelFor (GPALFile excelFile)
static ICredentials CredentialsFor (CredentialServiceType credentialServiceType)
static IGoogleSheets GoogleSheetsFor (string spreadsheetName)
static IGoogleDrive GoogleDriveFor (ICredentials credentials)
static IGPALGrid< T > GridForType< T > ()
static Selector CssSelector (string css, string selectorName=null)
 Helper for shorthand notation.
static Selector XPathSelector (string xpath, string selectorName=null)
static GPALFile FileFor (string path)
static IBrowser BrowserGet (GPALUrl url)
static IBrowser BrowserGoto (GPALUrl url)
static GPALButton ButtonFor (string text)
static GPALLabel LabelFor (string text)
static GPALInput InputFor (string text="")
static GPALTextArea TextAreaFor (string text="")
static GPALRichTextBox RichTextBoxFor (string text="")
static GPALCheckbox CheckboxFor (string text, bool isChecked=false)
static GPALRadioButton RadioButtonFor (string text, bool isChecked=false)
static GPALTab TabFor (string text)
static GPALChart ChartFor (string title="")
static GPALComboBox ComboBoxFor (params string[] items)
static GPALDataGridView DataGridViewFor (params string[] columns)
static GPALListView ListViewFor (params string[] columns)
static GPALProgressBar ProgressBarFor (int maximum=100)
static GPALStatusStrip StatusStripFor (string text="Ready")
static GPALNumericUpDown NumericUpDownFor (decimal minimum=0, decimal maximum=100)
static GPALDateTimePicker DateTimePickerFor (DateTime? value=null)
static GPALTreeView TreeViewFor ()
static GPALFileSelector FileSelectorFor (string title="Select File/Folder")
static GPALTableLayoutPanel TableLayoutPanelFor (int columns=1, int rows=1)
static Browser.IAllowElementSetting ElementAssistant (Selector selector)
 Instantiates a new Browser ElementAssistant object with fluent methods to help you manipulate WebElements in Callback EventHandlers.
static Application.IAllowForSelector ElementAssistant (Application.Application application)
 Instantiates a new Application ElementAssistant with fluent methods to help you manipulate AutomationElements in callback EventHandlers.
static void LoadSettings (GPALFile settingsFile=null)
static void SaveSettings (GPALFile settingsFile=null)
static IAllowGraphicSettings CaptureScreen (Browser.IBrowser browser)
 Take a screenshot.
static string MyMethodName ()
 Returns the calling methods name (used in Information/Exception messages).
Instead of harcoding method names, call MyMethodName.
static void PublishSimpleEvent (GPALEventType gPALEventType, string msg, dynamic gPALObject=null, Enums.GPALObjectType gPALObjectType=GPALObjectType.None, Exception ex=null)
 Publish a message to either the information channel or exception channel (if exception passed in) Publish will insert the calling methods name, so there is no need to call GPAL.MyMethodName() A screenshot is published as well as the Browser/Application object to do what you want with in your handler.
static void EmitTable< TRow, TCol, TValue > (string title, IDictionary<(TRow row, TCol col), TValue > data, string cornerLabel="", Func< TValue, string > formatCell=null, string emptyCell="-")
 Emits an ASCII table for any 2-axis keyed dictionary as a single INFO event: row keys down the side, column keys across the top, one cell per (row, col) present in data . Missing cells show emptyCell . Row/column order is the natural order of the key type (enum value, numeric, or string). Cells render via formatCell , defaulting to ToString().
static void EmitRuntimeTable (string title, IDictionary<(BrowserType bt, AutomationEngine ae), TimeSpan > runtimes)
 Convenience wrapper over EmitTable<TRow,TCol,TValue> for test-program bt/ae[/headless] loops: browser types down the side, automation engines across the top, each cell the wall-clock runtime. Call once per headless state with its own title (e.g. "Window" and "Headless").
static IAllowGPALSettings AppCallIfFound (Application.Application.CallIfDelegate callIfFound)
 Global Browser CallIfFound handler called for every selector in every Unit of Work.
static IAllowGPALSettings AppCallIfNotFound (Application.Application.CallIfDelegate callIfNotFound)
 Global Browser CallIfNotFound handler called for every selector in every Unit of Work.
static IAllowGPALSettings CallIfFound (Browser.Browser.CallIfDelegate callIfFound)
 Global Browser CallIfFound handler called for every selector in every Unit of Work.
static IAllowGPALSettings CallIfNotFound (Browser.Browser.CallIfDelegate callIfNotFound)
 Global Browser CallIfNotFound handler called for every selector in every Unit of Work.
static IAllowGPALSettings WithPublishToConsole (GPALEventType eventType=GPALEventType.INFO|GPALEventType.WARNING|GPALEventType.ERROR|GPALEventType.EXCEPTION|GPALEventType.NOTICE|GPALEventType.CAUTION|GPALEventType.FAILURE)
 Print the published information or exception messages to the console.
static IAllowGPALSettings WithPublishToDebug (GPALEventType eventType=GPALEventType.INFO|GPALEventType.WARNING|GPALEventType.ERROR|GPALEventType.EXCEPTION|GPALEventType.NOTICE|GPALEventType.CAUTION|GPALEventType.FAILURE)
 Indicate which event types to print to the console. Default is none.
static IAllowGPALSettings WithPublishToLogger (IGPALLogger logger)
 Print the published information or exception messages to the supplied database. Uses Database Create sql One column for each property in GPALEventArgs.
static IAllowGPALSettings RemoveLogger (IGPALLogger logger)
 Stops publishing events to a logger.
static IAllowGPALSettings WithHandlerEvents (GPALEventType eventTypes)
 Which event types reach the handlers given to WithInformationHandler and WithExceptionHandler. All of them by default.
Building an event costs a stack capture, and that cost is paid whenever anything wants the event. An attached handler wants everything unless it says otherwise, so an application showing events on screen should name the ones it shows: DEEPDEBUG alone is thousands of events a run.
static IAllowGPALSettings WithPublishStackTrace (bool trueFalse=true)
 Print the stack trace along with the published GPAL message.
static IAllowGPALSettings CallOnFail (Browser.Browser.CallOnFailDelegate callOnFail)
 Add a handler to be called when something fails that the workflow is in a position to decide about, on any browser that has no handler of its own.
GPAL fails forward, so without a handler the failure is reported and the run carries on. A handler is how a workflow takes a different decision instead. The browser it is handed is what tells one workflow from another when several are running against this one handler.
static IAllowGPALSettings WithDefaultErrorPlaceholder (string message="##UNABLE TO GET##")
 When GPAL is unable to retrieve data from an element, this message will be placed in the grid.
GPAL will always strive to give you as much data as possible until you get your selectors perfected.
static IAllowGPALSettings WithDownloadTimeoutInSec (int seconds)
 Set the default timeout time in seconds to wait for a download to start The default is 60 seconds.
static IAllowGPALSettings WithNoFallbackActions (bool trueFalse=true)
 GPAL has fallback alternatives for actions should they fail, generally applies to selenium. The fallback involves javascript alternative to complete the action. Set this to true to NOT use try any fallback recovery, just fail this is set to false by default, if used with no parameter the default is true.
static IAllowGPALSettings WithAllThatMatch (int matchCount=int.MaxValue)
 Global value for selector matches so it's not set UOW at a time.
static IAllowGPALSettings WithAutoUpdateWebDriver (bool trueFalse=true)
 Automatically download and unzip the web driver that matches the version of the browser being run. This uses setting which will be in the GPAL.yaml configuration file which is loaded on startup (or loaded on-demand with a path). this is set to false by default, if used with no parameter the default is true.
static IAllowGPALSettings WithAutomationEngine (AutomationEngine automationEngine)
 Set the automation type to use for all browsers. NOTE: can be overridden at the selector level (to choose javascript or hardware).
static IAllowGPALSettings WithDriverLocation (string driverPath)
 The location of the browser drivers to be used for each GPAL.Browser instance.
This can be overridden at the GPAL.Browser level, as well.
Additionally, if not defined, the default location is the same directory as the GPAL executable.
static IAllowGPALSettings WithTempDirectory (string tempPath)
 Where GPAL puts files it had to create but nobody asked to keep, such as a GPALFile given a url rather than a path.
When not set, a GPALfilesSafeToDelete folder beside the executable, created on first use. The name is the documentation: nothing in there is anyone's data, and deleting the lot costs nothing.
static IAllowGPALSettings WithTypingDelay (int delayInTicks)
 Sets the ceiling for the inter-character typing delay used by SendString across every automation engine (Hardware, Selenium, Puppeteer/CDP, OttoMagic).
Default is 0 (no pacing - the whole string is sent atomically).
When greater than 0, SendString dispatches the text character-by-character, sleeping a random duration between Math.Min(25, delayInTicks) and delayInTicks milliseconds before each character - not a fixed pause. A constant, identical gap between every keystroke is itself a detectable signature, so this value is a ceiling on a randomized range rather than the pace itself.
static IAllowGPALSettings WithImageMatchingPercentage (int matchPercent)
 Sets the image matching percentage for image Selectors.
.
static IAllowGPALSettings WithSimulateMouseMovement (bool trueFalse=true)
 Global setting to simulate a human moving the mouse to the next point for all commands.
Default is false.
static IAllowGPALSettings WithStopOnNotFound (bool trueFalse=true)
 Global setting instructing GPAL to terminate if any Selector cannot find any elements.
This is the GLOBAL setting affecting all Selectors.
This setting is also available on individual selectors to only stop on critical Selectors.
Default is false.
static IAllowGPALSettings WithTempProfileDirectory (string tempProfileDirectory)
static IAllowGPALSettings WithExceptionHandler (EventHandler< GPALEventArgs > eventHandler)
 Set the handler to receive handled Exception messages from GPAL.
GPAL also sets an unhandled exception handler and will publish unhandled exceptions to this channel as well.
GPAL will terminate on unhandled exceptions after publishing to the channel.
static IAllowGPALSettings WithPromptBeforeUnexpectedExit (bool trueFalse=true)
 Prompt 'Press any key...' before terminating due to an uncaught exception. GPAL tries to handle all exceptions and continue running, publishing events with more information.
static IAllowGPALSettings WithInformationHandler (EventHandler< GPALEventArgs > eventHandler)
 Set the handler to receive Information messages from GPAL which you might like to know about.
.
static IAllowGPALSettings WithWaitFor (int waitForInTicks)
 Global setting to wait for time in ticks for an element to show up. Applied to every element in every workflow. Override in a unit of work using this pattern .WithSelector(select0or) .WaitFor(waitForInTicks) .LeftClick() NOTE: shortcut actions like LeftClick{selector) will not waitfor and no syntax will make them wait except this global setting.
static IAllowGPALSettings WithTakeEventScreenshot (bool trueOrFalse)

Properties

static byte VK_ALT [get]
 Alt key virtual keycode (VK) for use with keybd_event. https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes.
static byte VK_DELETE [get]
 Delete key virtual keycode (VK) for use with keybd_event.
static byte VK_F10 [get]
 F10 key virtual keycode (VK) for use with keybd_event.
static byte VK_PRIOR [get]
 Page Up key virtual keycode (VK) for use with keybd_event.
static byte VK_NEXT [get]
 Page Down key virtual keycode (VK) for use with keybd_event.
static byte VK_END [get]
 End key virtual keycode (VK) for use with keybd_event.
static byte VK_HOME [get]
 Home key virtual keycode (VK) for use with keybd_event.
static byte VK_DOWN [get]
 Down Arrow key virtual keycode (VK) for use with keybd_event.
static byte VK_UP [get]
 Up Arrow key virtual keycode (VK) for use with keybd_event.
static byte VK_TAB [get]
 Tab key virtual keycode (VK) for use with keybd_event.
static byte VK_RETURN [get]
 Enter/Return key virtual keycode (VK) for use with keybd_event.
static byte VK_SHIFT_RIGHT [get]
 Right Shift key virtual keycode (VK) for use with keybd_event.
static byte VK_SHIFT_LEFT [get]
 Left Shift key virtual keycode (VK) for use with keybd_event.
static byte VK_CONTROL_LEFT [get]
 Left Control key virtual keycode (VK) for use with keybd_event.
static byte VK_CONTROL_RIGHT [get]
 Right Control key virtual keycode (VK) for use with keybd_event.
static byte VK_LWIN [get]
 Left Windows key virtual keycode (VK) for use with keybd_event.
static byte VK_RWIN [get]
 Right Windows key virtual keycode (VK) for use with keybd_event.
static byte VK_SCROLL [get]
 Scroll Lock key virtual keycode (VK) for use with keybd_event.
static byte VK_LMENU [get]
 Left Alt key virtual keycode (VK) for use with keybd_event.
static byte VK_RMENU [get]
 Right Alt key virtual keycode (VK) for use with keybd_event.
static byte VK_APPS [get]
 Application (Menu) key virtual keycode (VK) for use with keybd_event.
static byte VK_SPACE [get]
 Space bar key virtual keycode (VK) for use with keybd_event.
static byte VK_BACK [get]
 Backspace key virtual keycode (VK) for use with keybd_event.
static uint KEYEVENTF_EXTENDEDKEY [get]
 The extended-key flag indicates whether the keystroke message originated from one of the additional keys on the enhanced keyboard. The extended keys consist of the ALT and CTRL keys on the right-hand side of the keyboard; the INS, DEL, HOME, END, PAGE UP, PAGE DOWN, and arrow keys in the clusters to the left of the numeric keypad; the NUM LOCK key; the BREAK (CTRL+PAUSE) key; the PRINT SCRN key; and the divide (/) and ENTER keys in the numeric keypad. The extended-key flag is set if the key is a extended key For use with keybd_event.
static uint KEYEVENTF_KEYUP [get]
 Indicates a keyup keystroke is being sent. For use with keybd_event.
static List< IGPALLoggerLoggerList = new List<IGPALLogger>() [get]
static GPALSettings GPALSettings [get, set]
static Cryptography Cryptography [get]
static Base64Helper Base64Helper [get]
static IAllowAIProvider AI [get]
 Entry point for the GPAL AI subsystem, providing a fluent interface for AI tasks.
static IGPALYouTube YouTube [get]
static OCRInterfaces.IGPALOCR OCR [get]
static IImageHelper ImageHelper [get]
static IAllowFileName File [get]
 Instantiates a new fluent File SETTINGS object.
This data object defines settings for use by the .FillInFrom method.
static IAllowGridActions< string > Grid [get]
 New GPALGrid<string></string> (rows/columns).
static IAllowLoggingSettings Logger [get]
 New GPAL Logger.
static IAllowEmailServerSettings Mail [get]
 New GPAL Mail handler.
static IAllowConverterInput Converter [get]
 New GPAL Convertor.
static IAllowApplicationOpenOrParameters Application [get]
 Instantiates a new fluent Application object.
static IAllowBrowserTypeOrGoto Browser [get]
 Instantiates a new fluent Browser object.
static IAllowDatabaseSettings Database [get]
 Instantiates a new fluent Database SETTINGS object.
This data object defines settings for use by .FillInFrom method.
static IAllowSelectorSettings Selector [get]
 Instantiates a new fluent GPAL Selector object used to locate an element.
Selectors are for browsers or applications.
.
static IAllowRequestSettings Request [get]
 Start describing an API request for .Fetch to issue from inside the page, so it carries the session the browser has already earned rather than a fresh connection of its own.
static IAllowExecutableSetup Launcher [get]
static IAllowRESTEndpoint RESTClient [get]
 Instantiate a new fluent RESTClient.
static IAllowCredentialServiceType Credentials [get]
 Return a new credential manager.
static IAllowGiven Gherkin [get]
static IAllowSpreadsheetSelection GoogleSheets [get]
 New Googlesheets workflow.
static IAllowDriveCredentials GoogleDrive [get]
 New GoogleDrive workflow.
static IGPALExcel Excel [get]
static IAllowGPALUrlForUrl Url [get]
static IAllowFormSettings Form [get]
 Instantiates a new GPALForm for creating simple interactive user interfaces.
static IAllowControlSettingsEnabledAndDefault Button [get]
 Instantiates a new GPALButton for use on GPAL forms.
Callback EventHandler is invoked on the GPALButton.WindowsControl.Clicked event.
static IAllowControlSettingsAndChartSettings Chart [get]
 Instantiates a new GPALChart for use on GPAL forms.
Callback EventHandler is invoked on the GPALChart.WindowsControl.Clicked event.
static IAllowControlSettingsEnabledAndChecked Checkbox [get]
 Instantiates a new GPALCheckbox for use on a GPAL form.
Callback EventHandler is invoked on the GPALCheckbox.WindowsControl.CheckChanged event.
Default is not checked.
static IAllowComboBoxControlSettings ComboBox [get]
 Instantiates a new GPALComboBox for use on a GPAL form.
Callback(s) set via WhenSelectedDo are invoked on the underlying ComboBox.SelectedIndexChanged event.
static IAllowDataGridViewControlSettings DataGridView [get]
 Instantiates a new GPALDataGridView for use on a GPAL form.
Callback EventHandler is invoked on the GPALDataGridView.WindowsControl.CellValueChanged event (or other events when specified via .ForEvent). Supports tabular data display with columns and optional editing.
static IAllowDateTimePickerControlSettings DateTimePicker [get]
 Instantiates a new GPALDateTimePicker for use on a GPAL form.
Callback EventHandler is invoked on the GPALDateTimePicker.WindowsControl.ValueChanged event (or other events when specified via .ForEvent).
static IAllowFileSelectorControlSettings FileSelector [get]
 Instantiates a new GPALFileSelector for use on a GPAL form.
Opens a standard file or folder selection dialog when clicked.
Callback EventHandler is invoked after a selection is made (or canceled), with FileSelectorEventArgs containing the selected path(s) and cancellation status.
Selected path(s) available via SelectedPath / SelectedPaths properties.
static IAllowControlSettingsPlaceholderEnabledAndPassword Input [get]
 Instantiates a new one-line GPALInput control for use on a GPAL form.
Callback EventHandler is invoked on the GPALInput.WindowsControl.TextChanged event.
static IAllowControlSettingsAndFontSettings Label [get]
 Instantiates a new GPALLabel for use on a GPAL form.
Callback EventHandler is invoked on the GPALLabel.WindowsControl.Clicked event.
static IAllowListVIewControlSettings ListView [get]
 Instantiates a new GPALListView for use on a GPAL form.
Callback EventHandler is invoked on the GPALListView.WindowsControl.SelectedIndexChanged event (or other events when specified via .ForEvent).
Supports columns, different view modes (Details, List, etc.), selection, and double-click activation.
static IAllowNumericUpDownControlSettings NumericUpDown [get]
 Instantiates a new GPALNumericUpDown for use on a GPAL form.
Callback EventHandler is invoked on the GPALNumericUpDown.WindowsControl.ValueChanged event (or other events when specified via .ForEvent). Useful for selecting numeric values such as timeouts, retry counts, ports, etc.
static IAllowProgressBarControlSettings ProgressBar [get]
 A progress bar control for GPAL forms.
Displays task completion percentage or indeterminate (marquee) activity.
Callback (if set) is invoked on the ValueChanged event of the underlying ProgressBar.
static IAllowControlSettingsEnabledAndChecked RadioButton [get]
 Instantiates a new GPALRadioButton for use on a GPAL form.
Callback EventHandler is invoked on the GPALRadioButton.WindowsControl.CheckChanged event.
Default is not selected.
static IAllowStatusStripControlSettings StatusStrip [get]
 A status strip control (docked at the bottom) for GPAL forms.
Displays real-time status messages, browser info, file counts, etc.
Callback (if set) is invoked on the primary StatusStrip event (usually ItemClicked or similar).
static IAllowMenuBarControlSettings MenuBar [get]
 A menu bar docked to the top of a GPAL form.
Open a top-level menu with WithMenu("TopMenu"), then attach GPAL.BarItem items with WithItem(item).
static IAllowBarItemSettings BarItem [get]
 A single item shared by menu bars and toolbars: text, optional image, optional shortcut key, and a callback wired to its click.
static IAllowToolbarControlSettings Toolbar [get]
 A toolbar docked below the menu bar, holding GPAL.BarItem buttons and optional separators.
static IAllowControlSettings Tab [get]
 Instantiates a new GPALTab for use on a GPAL form.
Callback EventHandler is invoked on the GPALTab.WindowsControl.Clicked event.
static IAllowSplitterControlSettings Splitter [get]
 Instantiates a new GPALSplitter for use on a GPAL form: two panes with a bar between them, built whole and then laid out like any other control.
Call .HSplit for a left and right pane or .VSplit for a top and bottom, add the controls of both panes in order, and mark where the first pane ends with SplitRight or SplitBottom. .
static IAllowGroupBoxControlSettings GroupBox [get]
 Instantiates a new GPALGroupBox for use on a GPAL form: a titled box around a set of controls, laid out like any other control. A container can go inside it, so a group box can hold a splitter.
static GPALSpliter SplitRight [get]
 Marks the end of a splitter's left pane. Everything added after it is the right pane.
static GPALSpliter SplitBottom [get]
 Marks the end of a splitter's top pane. Everything added after it is the bottom pane.
static IAllowControlSettingsAndEnabled TextArea [get]
 Instantiates a new GPALTextArea for use on a GPAL form.
Callback EventHandler is invoked on the GPALTextarea.WindowsControl.TextChanged event.
static IAllowRichTextBoxControlSettings RichTextBox [get]
 Instantiates a new GPALRichTextBox for use on a GPAL form.
Renders Markdown (headings, bold, and bullet/numbered lists with nesting) - useful for displaying formatted AI responses or other structured text.
static IAllowTreeViewControlSettings TreeView [get]
 Instantiates a new GPALTreeView for use on a GPAL form.
Callback EventHandler is invoked on the GPALTreeView.WindowsControl.AfterSelect event (or other events when specified via .ForEvent). Supports hierarchical node display (folders, categories, workflows, etc.).
static bool UseHardware [get]
static bool UseJavaSCript [get]
static Browser.IAllowScheduledWorkflow Workflow [get]
 Runs whole workflows at once, each building and owning whatever it drives, so one can run Chrome on OttoMagic while the next runs Firefox on Selenium. Scheduling only: see Browser.Browser.WithWorkflow(Action<Browser.IBrowser>) for several steps against one browser you already have.
static Browser.IHiddenDesktops HiddenDesktop [get]
 Every hidden desktop this process has made, and the screen itself. Peek puts one on the screen and puts yours back afterwards, Return does it early from any thread, and CloseAll gives up the handles.

A browser hands back the one desktop it is on through its own HiddenDesktop, so this is for the operations that belong to the screen rather than to one desktop.
static string Version [get]
static string OAuthTokenUrl [get, set]
 Where an OAuth redirect lands and the token is read back from, e.g. http://localhost:3117/. Set while a credential is being consumed: a browser running OttoMagic already has a GPALRestAPI of its own, and anything else gets a listener bound on a free port for the one exchange.

Detailed Description

Everything starts here, all the GPAL controls and global settings using fluent syntax are here. GPAL cannot inherit any of the GPAL interfaces since it is a static class, but it does implement them, but will return some GPAL object or interface.

Definition at line 48 of file GPAL.cs.

Member Function Documentation

◆ AppCallIfFound()

IAllowGPALSettings GenerallyPositive.GPAL.AppCallIfFound ( Application.Application.CallIfDelegate callIfFound)
static

Global Browser CallIfFound handler called for every selector in every Unit of Work.

Parameters
callIfFound
Returns
Fluent interface to specify more global settings

Definition at line 2657 of file GPAL.cs.

◆ AppCallIfNotFound()

IAllowGPALSettings GenerallyPositive.GPAL.AppCallIfNotFound ( Application.Application.CallIfDelegate callIfNotFound)
static

Global Browser CallIfNotFound handler called for every selector in every Unit of Work.

Parameters
callIfNotFound
Returns
Fluent interface to specify more global settings

Definition at line 2667 of file GPAL.cs.

◆ BrowserGet()

IBrowser GenerallyPositive.GPAL.BrowserGet ( GPALUrl url)
static

Definition at line 1049 of file GPAL.cs.

◆ BrowserGoto()

IBrowser GenerallyPositive.GPAL.BrowserGoto ( GPALUrl url)
static

Definition at line 1057 of file GPAL.cs.

◆ ButtonFor()

GPALButton GenerallyPositive.GPAL.ButtonFor ( string text)
static

Definition at line 1064 of file GPAL.cs.

◆ CallIfFound()

IAllowGPALSettings GenerallyPositive.GPAL.CallIfFound ( Browser.Browser.CallIfDelegate callIfFound)
static

Global Browser CallIfFound handler called for every selector in every Unit of Work.

Parameters
callIfFound
Returns
Fluent interface to specify more global settings

Definition at line 2677 of file GPAL.cs.

◆ CallIfNotFound()

IAllowGPALSettings GenerallyPositive.GPAL.CallIfNotFound ( Browser.Browser.CallIfDelegate callIfNotFound)
static

Global Browser CallIfNotFound handler called for every selector in every Unit of Work.

Parameters
callIfNotFound
Returns
Fluent interface to specify more global settings

Definition at line 2687 of file GPAL.cs.

◆ CallOnFail()

IAllowGPALSettings GenerallyPositive.GPAL.CallOnFail ( Browser.Browser.CallOnFailDelegate callOnFail)
static

Add a handler to be called when something fails that the workflow is in a position to decide about, on any browser that has no handler of its own.
GPAL fails forward, so without a handler the failure is reported and the run carries on. A handler is how a workflow takes a different decision instead. The browser it is handed is what tells one workflow from another when several are running against this one handler.

Parameters
callOnFailCallback delegate
Returns
Fluent interface to specify more global settings

Definition at line 2788 of file GPAL.cs.

◆ CaptureScreen()

IAllowGraphicSettings GenerallyPositive.GPAL.CaptureScreen ( Browser.IBrowser browser)
static

Take a screenshot.

Bitmap screenshot = GPAL.CaptureScreen();
Returns
Bitmap of the screen

Definition at line 2353 of file GPAL.cs.

◆ ChartFor()

GPALChart GenerallyPositive.GPAL.ChartFor ( string title = "")
static

Definition at line 1131 of file GPAL.cs.

◆ CheckboxFor()

GPALCheckbox GenerallyPositive.GPAL.CheckboxFor ( string text,
bool isChecked = false )
static

Definition at line 1105 of file GPAL.cs.

◆ ComboBoxFor()

GPALComboBox GenerallyPositive.GPAL.ComboBoxFor ( params string[] items)
static

Definition at line 1139 of file GPAL.cs.

◆ CredentialsFor()

ICredentials GenerallyPositive.GPAL.CredentialsFor ( CredentialServiceType credentialServiceType)
static

Definition at line 992 of file GPAL.cs.

◆ CssSelector()

Selector GenerallyPositive.GPAL.CssSelector ( string css,
string selectorName = null )
static

Helper for shorthand notation.

<example>
.WithBrowserType(BrowserType.Chrome)
.Get("ebay.com")
.LeftClick(GPAL.CssSelector("#gh-search-btn"))
.Close(true);
</example>
static IAllowBrowserTypeOrGoto Browser
Instantiates a new fluent Browser object.
Definition GPAL.cs:617
Parameters
css
Returns

Definition at line 1026 of file GPAL.cs.

◆ DataGridViewFor()

GPALDataGridView GenerallyPositive.GPAL.DataGridViewFor ( params string[] columns)
static

Definition at line 1146 of file GPAL.cs.

◆ DateTimePickerFor()

GPALDateTimePicker GenerallyPositive.GPAL.DateTimePickerFor ( DateTime? value = null)
static

Definition at line 1182 of file GPAL.cs.

◆ ElementAssistant() [1/2]

Application.IAllowForSelector GenerallyPositive.GPAL.ElementAssistant ( Application.Application application)
static

Instantiates a new Application ElementAssistant with fluent methods to help you manipulate AutomationElements in callback EventHandlers.

// <b>CallIfFound</b> handler
public static int FoundNotepadPane(Application application, List<GPALAutomationElement> foundElements, List<GPALAutomationElement> matchedElements, Selector selector)
{
ElementAssistant elementAssistant = (ElementAssistant) GPAL.ElementAssistant(application);
foreach (GPALAutomationElement element in foundElements)
{
elementAssistant
.ForSelector(selector) // for interaction type, offsetX and offsetY
.WithElement(element)
.WithHardware // can override the selector interaction type here for this one element
.LeftClick();
}
return 0;
}
Application workflow container for automation elements.
static IAllowApplicationOpenOrParameters Application
Instantiates a new fluent Application object.
Definition GPAL.cs:586
static IAllowSelectorSettings Selector
Instantiates a new fluent GPAL Selector object used to locate an element. Selectors are for browsers...
Definition GPAL.cs:693
static Browser.IAllowElementSetting ElementAssistant(Selector selector)
Instantiates a new Browser ElementAssistant object with fluent methods to help you manipulate WebElem...
Definition GPAL.cs:1233
Parameters
applicationApplication object associated with the elements/callback
Returns
Fluent AutomationElement assistant to use in callback EventHandler

Definition at line 1264 of file GPAL.cs.

◆ ElementAssistant() [2/2]

Browser.IAllowElementSetting GenerallyPositive.GPAL.ElementAssistant ( Selector selector)
static

Instantiates a new Browser ElementAssistant object with fluent methods to help you manipulate WebElements in Callback EventHandlers.

public static int CallIfFound(Browser browser, List<GPALElement> foundElements, List<GPALElement> matchedElements, Selector selector)
{
elementAssistant = (ElementAssistant) GPAL.ElementAssistant(browser);
foreach (GPALElement webElement in matchedElements)
{
elementAssistant
.ForSelector(selector) // for interaction type, offsetX and offsetY
.WithElement(webElement)
.WithJavscript // can override the selector interaction type here for this one element
.LeftClick();
}
}
Pseudo element used in Applications and Browser workflows for image matching and unified automation....
static IAllowGPALSettings CallIfFound(Browser.Browser.CallIfDelegate callIfFound)
Global Browser CallIfFound handler called for every selector in every Unit of Work.
Definition GPAL.cs:2677
Parameters
browserBrowser object associated with the elements/callback
Returns
Fluent GPALElement assistant to use in callback EventHandler

Definition at line 1233 of file GPAL.cs.

◆ EmitRuntimeTable()

void GenerallyPositive.GPAL.EmitRuntimeTable ( string title,
IDictionary<(BrowserType bt, AutomationEngine ae), TimeSpan > runtimes )
static

Convenience wrapper over EmitTable<TRow,TCol,TValue> for test-program bt/ae[/headless] loops: browser types down the side, automation engines across the top, each cell the wall-clock runtime. Call once per headless state with its own title (e.g. "Window" and "Headless").

Definition at line 2641 of file GPAL.cs.

◆ EmitTable< TRow, TCol, TValue >()

void GenerallyPositive.GPAL.EmitTable< TRow, TCol, TValue > ( string title,
IDictionary<(TRow row, TCol col), TValue > data,
string cornerLabel = "",
Func< TValue, string > formatCell = null,
string emptyCell = "-" )
static

Emits an ASCII table for any 2-axis keyed dictionary as a single INFO event: row keys down the side, column keys across the top, one cell per (row, col) present in data . Missing cells show emptyCell . Row/column order is the natural order of the key type (enum value, numeric, or string). Cells render via formatCell , defaulting to ToString().

Parameters
titleHeading shown above the table.
dataValues keyed by (row, col).
cornerLabelLabel for the top-left corner (the row axis name).
formatCellOptional per-value formatter; defaults to ToString().
emptyCellText for a (row, col) pair absent from the data.

Definition at line 2580 of file GPAL.cs.

◆ ExcelFor()

IGPALExcel GenerallyPositive.GPAL.ExcelFor ( GPALFile excelFile)
static

Definition at line 986 of file GPAL.cs.

◆ FileFor()

GPALFile GenerallyPositive.GPAL.FileFor ( string path)
static

Definition at line 1043 of file GPAL.cs.

◆ FileSelectorFor()

GPALFileSelector GenerallyPositive.GPAL.FileSelectorFor ( string title = "Select File/Folder")
static

Definition at line 1194 of file GPAL.cs.

◆ GoogleDriveFor()

IGoogleDrive GenerallyPositive.GPAL.GoogleDriveFor ( ICredentials credentials)
static

Definition at line 1002 of file GPAL.cs.

◆ GoogleSheetsFor()

IGoogleSheets GenerallyPositive.GPAL.GoogleSheetsFor ( string spreadsheetName)
static

Definition at line 997 of file GPAL.cs.

◆ GridForType< T >()

IGPALGrid< T > GenerallyPositive.GPAL.GridForType< T > ( )
static

Definition at line 1007 of file GPAL.cs.

◆ InputFor()

GPALInput GenerallyPositive.GPAL.InputFor ( string text = "")
static

Definition at line 1081 of file GPAL.cs.

◆ LabelFor()

GPALLabel GenerallyPositive.GPAL.LabelFor ( string text)
static

Definition at line 1073 of file GPAL.cs.

◆ ListViewFor()

GPALListView GenerallyPositive.GPAL.ListViewFor ( params string[] columns)
static

Definition at line 1153 of file GPAL.cs.

◆ LoadSettings()

void GenerallyPositive.GPAL.LoadSettings ( GPALFile settingsFile = null)
static

Definition at line 2280 of file GPAL.cs.

◆ MyMethodName()

string GenerallyPositive.GPAL.MyMethodName ( )
static

Returns the calling methods name (used in Information/Exception messages).
Instead of harcoding method names, call MyMethodName.

Message = $"{GPAL.MyMethodName()}: Exception: Unable to load image. {ex.Message}"
Returns
Calling method's name

Definition at line 2374 of file GPAL.cs.

◆ NumericUpDownFor()

GPALNumericUpDown GenerallyPositive.GPAL.NumericUpDownFor ( decimal minimum = 0,
decimal maximum = 100 )
static

Definition at line 1174 of file GPAL.cs.

◆ ProgressBarFor()

GPALProgressBar GenerallyPositive.GPAL.ProgressBarFor ( int maximum = 100)
static

Definition at line 1160 of file GPAL.cs.

◆ PublishSimpleEvent()

void GenerallyPositive.GPAL.PublishSimpleEvent ( GPALEventType gPALEventType,
string msg,
dynamic gPALObject = null,
Enums.GPALObjectType gPALObjectType = GPALObjectType::None,
Exception ex = null )
static

Publish a message to either the information channel or exception channel (if exception passed in) Publish will insert the calling methods name, so there is no need to call GPAL.MyMethodName() A screenshot is published as well as the Browser/Application object to do what you want with in your handler.

GPAL.PublishSimpleEvent(GPALEventType.INFO, "An Information Channel Message.", application, GPALObjectType.Application);
GPAL.PublishSimpleEvent(GPALEventType.EXCEPTION, "An Exception Channel Message.", browser, GPALObjectType.Browser, exception);
Parameters
msgMessage to publish
gPALObjectGPAL object [Application, Browser, GPALForm, UnitOfWork]
gPALObjectTypeThe type of GPAL object passed in
ex[Optional]Exception raised

Definition at line 2406 of file GPAL.cs.

◆ RadioButtonFor()

GPALRadioButton GenerallyPositive.GPAL.RadioButtonFor ( string text,
bool isChecked = false )
static

Definition at line 1114 of file GPAL.cs.

◆ RegisterOCR()

void GenerallyPositive.GPAL.RegisterOCR ( Func< OCRInterfaces.IGPALOCR > factory)
static

Definition at line 471 of file GPAL.cs.

◆ RemoveLogger()

IAllowGPALSettings GenerallyPositive.GPAL.RemoveLogger ( IGPALLogger logger)
static

Stops publishing events to a logger.

Parameters
loggerThe logger to stop publishing to
Returns
Fluent interface to specify more global settings

Definition at line 2741 of file GPAL.cs.

◆ RichTextBoxFor()

GPALRichTextBox GenerallyPositive.GPAL.RichTextBoxFor ( string text = "")
static

Definition at line 1097 of file GPAL.cs.

◆ SaveSettings()

void GenerallyPositive.GPAL.SaveSettings ( GPALFile settingsFile = null)
static

Definition at line 2340 of file GPAL.cs.

◆ StatusStripFor()

GPALStatusStrip GenerallyPositive.GPAL.StatusStripFor ( string text = "Ready")
static

Definition at line 1167 of file GPAL.cs.

◆ TabFor()

GPALTab GenerallyPositive.GPAL.TabFor ( string text)
static

Definition at line 1123 of file GPAL.cs.

◆ TableLayoutPanelFor()

GPALTableLayoutPanel GenerallyPositive.GPAL.TableLayoutPanelFor ( int columns = 1,
int rows = 1 )
static

Definition at line 1201 of file GPAL.cs.

◆ TextAreaFor()

GPALTextArea GenerallyPositive.GPAL.TextAreaFor ( string text = "")
static

Definition at line 1089 of file GPAL.cs.

◆ TreeViewFor()

GPALTreeView GenerallyPositive.GPAL.TreeViewFor ( )
static

Definition at line 1189 of file GPAL.cs.

◆ WithAllThatMatch()

IAllowGPALSettings GenerallyPositive.GPAL.WithAllThatMatch ( int matchCount = int::MaxValue)
static

Global value for selector matches so it's not set UOW at a time.

Parameters
trueFalseAuto Update? [true]
Returns

Definition at line 2836 of file GPAL.cs.

◆ WithAutomationEngine()

IAllowGPALSettings GenerallyPositive.GPAL.WithAutomationEngine ( AutomationEngine automationEngine)
static

Set the automation type to use for all browsers. NOTE: can be overridden at the selector level (to choose javascript or hardware).

Parameters
automationEngine
Returns

Definition at line 2859 of file GPAL.cs.

◆ WithAutoUpdateWebDriver()

IAllowGPALSettings GenerallyPositive.GPAL.WithAutoUpdateWebDriver ( bool trueFalse = true)
static

Automatically download and unzip the web driver that matches the version of the browser being run. This uses setting which will be in the GPAL.yaml configuration file which is loaded on startup (or loaded on-demand with a path). this is set to false by default, if used with no parameter the default is true.

Parameters
trueFalseAuto Update? [true]
Returns

Definition at line 2848 of file GPAL.cs.

◆ WithDefaultErrorPlaceholder()

IAllowGPALSettings GenerallyPositive.GPAL.WithDefaultErrorPlaceholder ( string message = "##UNABLE TO GET##")
static

When GPAL is unable to retrieve data from an element, this message will be placed in the grid.
GPAL will always strive to give you as much data as possible until you get your selectors perfected.

Parameters
messageThe message to substitute for no data.
"##UNABLE TO GET##" [default]
Returns
Fluent interface to specify more global settings

Definition at line 2800 of file GPAL.cs.

◆ WithDownloadTimeoutInSec()

IAllowGPALSettings GenerallyPositive.GPAL.WithDownloadTimeoutInSec ( int seconds)
static

Set the default timeout time in seconds to wait for a download to start The default is 60 seconds.

Parameters
seconds
Returns

Definition at line 2812 of file GPAL.cs.

◆ WithDriverLocation()

IAllowGPALSettings GenerallyPositive.GPAL.WithDriverLocation ( string driverPath)
static

The location of the browser drivers to be used for each GPAL.Browser instance.
This can be overridden at the GPAL.Browser level, as well.
Additionally, if not defined, the default location is the same directory as the GPAL executable.

Parameters
driverPathPath to the drivers folder
Returns
Fluent interface to specify more global settings

Definition at line 2872 of file GPAL.cs.

◆ WithExceptionHandler()

IAllowGPALSettings GenerallyPositive.GPAL.WithExceptionHandler ( EventHandler< GPALEventArgs > eventHandler)
static

Set the handler to receive handled Exception messages from GPAL.
GPAL also sets an unhandled exception handler and will publish unhandled exceptions to this channel as well.
GPAL will terminate on unhandled exceptions after publishing to the channel.

GPAL.WithExceptionHandler(ExceptionEventHandler)
.WithInformationHandler(InformationEventHandler)
.WithTypingDelay(50);
Parameters
eventHandlerYour Exception channel event handler
Returns
Fluent interface to specify more global settings

Definition at line 3030 of file GPAL.cs.

◆ WithHandlerEvents()

IAllowGPALSettings GenerallyPositive.GPAL.WithHandlerEvents ( GPALEventType eventTypes)
static

Which event types reach the handlers given to WithInformationHandler and WithExceptionHandler. All of them by default.
Building an event costs a stack capture, and that cost is paid whenever anything wants the event. An attached handler wants everything unless it says otherwise, so an application showing events on screen should name the ones it shows: DEEPDEBUG alone is thousands of events a run.

// everything except the two that come in thousands
GPAL.WithHandlerEvents(GPALEventType.All &amp; ~(GPALEventType.DEBUG | GPALEventType.DEEPDEBUG));
Parameters
eventTypesThe event types to hand over.
Returns
Fluent interface to specify more global settings

Definition at line 2762 of file GPAL.cs.

◆ WithImageMatchingPercentage()

IAllowGPALSettings GenerallyPositive.GPAL.WithImageMatchingPercentage ( int matchPercent)
static

Sets the image matching percentage for image Selectors.
.

GPAL.WithTypingDelay(50)
.WithImageMatchingPercentage(80)
.WithSimulateMouse(true);
Parameters
matchPercentImage matching percentage [default is 80 (80%)]
Returns
Fluent interface to allow more GPAL settings

Definition at line 2961 of file GPAL.cs.

◆ WithInformationHandler()

IAllowGPALSettings GenerallyPositive.GPAL.WithInformationHandler ( EventHandler< GPALEventArgs > eventHandler)
static

Set the handler to receive Information messages from GPAL which you might like to know about.
.

GPAL.WithExceptionHandler(ExceptionEventHandler)
.WithInformationHandler(InformationEventHandler)
.WithTypingDelay(50);
Parameters
eventHandlerYour Information channel event handler
Returns
Fluent interface to specify more global settings

Definition at line 3062 of file GPAL.cs.

◆ WithNoFallbackActions()

IAllowGPALSettings GenerallyPositive.GPAL.WithNoFallbackActions ( bool trueFalse = true)
static

GPAL has fallback alternatives for actions should they fail, generally applies to selenium. The fallback involves javascript alternative to complete the action. Set this to true to NOT use try any fallback recovery, just fail this is set to false by default, if used with no parameter the default is true.

Parameters
trueFalseUse fallback recovery? [true]
Returns

Definition at line 2826 of file GPAL.cs.

◆ WithPromptBeforeUnexpectedExit()

IAllowGPALSettings GenerallyPositive.GPAL.WithPromptBeforeUnexpectedExit ( bool trueFalse = true)
static

Prompt 'Press any key...' before terminating due to an uncaught exception. GPAL tries to handle all exceptions and continue running, publishing events with more information.

Parameters
trueFalsetrue - prompt before exit
false [default] - just exit
Returns
Fluent interface to specify more global settings

Definition at line 3044 of file GPAL.cs.

◆ WithPublishStackTrace()

IAllowGPALSettings GenerallyPositive.GPAL.WithPublishStackTrace ( bool trueFalse = true)
static

Print the stack trace along with the published GPAL message.

Parameters
trueFalse
Returns

Definition at line 2773 of file GPAL.cs.

◆ WithPublishToConsole()

IAllowGPALSettings GenerallyPositive.GPAL.WithPublishToConsole ( GPALEventType eventType = GPALEventType::INFO | GPALEventType::WARNING | GPALEventType::ERROR | GPALEventType::EXCEPTION | GPALEventType::NOTICE | GPALEventType::CAUTION | GPALEventType::FAILURE)
static

Print the published information or exception messages to the console.

Parameters
publishToConsoletrue - print message to the console
false [default] - do not print messages to the console
Returns
Fluent interface to specify more global settings

Definition at line 2698 of file GPAL.cs.

◆ WithPublishToDebug()

IAllowGPALSettings GenerallyPositive.GPAL.WithPublishToDebug ( GPALEventType eventType = GPALEventType::INFO | GPALEventType::WARNING | GPALEventType::ERROR | GPALEventType::EXCEPTION | GPALEventType::NOTICE | GPALEventType::CAUTION | GPALEventType::FAILURE)
static

Indicate which event types to print to the console. Default is none.

Parameters
publishToDebugtrue - print message to debug
false [default] - do not print messages to debug
Returns
Fluent interface to specify more global settings

Definition at line 2713 of file GPAL.cs.

◆ WithPublishToLogger()

IAllowGPALSettings GenerallyPositive.GPAL.WithPublishToLogger ( IGPALLogger logger)
static

Print the published information or exception messages to the supplied database. Uses Database Create sql One column for each property in GPALEventArgs.

Parameters
loggerpublish events to this logger, which writes them wherever it was pointed
Returns
Fluent interface to specify more global settings

Definition at line 2730 of file GPAL.cs.

◆ WithSimulateMouseMovement()

IAllowGPALSettings GenerallyPositive.GPAL.WithSimulateMouseMovement ( bool trueFalse = true)
static

Global setting to simulate a human moving the mouse to the next point for all commands.
Default is false.

GPAL.WithTypingDelay(50)
.WithImageMatchingPercentage(80)
.WithSimulateMouse(true)
Parameters
moveWithArcTrue to move the mouse to the elements emulating a human
False [default] to jump the cursor the element
Returns
Fluent interface to allow more GPAL settings

Definition at line 2980 of file GPAL.cs.

◆ WithStopOnNotFound()

IAllowGPALSettings GenerallyPositive.GPAL.WithStopOnNotFound ( bool trueFalse = true)
static

Global setting instructing GPAL to terminate if any Selector cannot find any elements.
This is the GLOBAL setting affecting all Selectors.
This setting is also available on individual selectors to only stop on critical Selectors.
Default is false.

Parameters
stopOnNotFoundTrue to terminate the application is an element is not found
False [default] to continue.
Returns
Fluent interface to allow more GPAL settings
GPAL.WithTypingDelay(50)
.WithImageMatchingPercentage(80)
.WithStopOnNotFound(true)
Returns
Fluent interface to specify more global settings

Definition at line 3003 of file GPAL.cs.

◆ WithTakeEventScreenshot()

IAllowGPALSettings GenerallyPositive.GPAL.WithTakeEventScreenshot ( bool trueOrFalse)
static

Definition at line 3086 of file GPAL.cs.

◆ WithTempDirectory()

IAllowGPALSettings GenerallyPositive.GPAL.WithTempDirectory ( string tempPath)
static

Where GPAL puts files it had to create but nobody asked to keep, such as a GPALFile given a url rather than a path.
When not set, a GPALfilesSafeToDelete folder beside the executable, created on first use. The name is the documentation: nothing in there is anyone's data, and deleting the lot costs nothing.

Parameters
tempPathFolder for GPAL's own throwaway files
Returns
Fluent interface to specify more global settings

Definition at line 2886 of file GPAL.cs.

◆ WithTempProfileDirectory()

IAllowGPALSettings GenerallyPositive.GPAL.WithTempProfileDirectory ( string tempProfileDirectory)
static

Definition at line 3010 of file GPAL.cs.

◆ WithTypingDelay()

IAllowGPALSettings GenerallyPositive.GPAL.WithTypingDelay ( int delayInTicks)
static

Sets the ceiling for the inter-character typing delay used by SendString across every automation engine (Hardware, Selenium, Puppeteer/CDP, OttoMagic).
Default is 0 (no pacing - the whole string is sent atomically).
When greater than 0, SendString dispatches the text character-by-character, sleeping a random duration between Math.Min(25, delayInTicks) and delayInTicks milliseconds before each character - not a fixed pause. A constant, identical gap between every keystroke is itself a detectable signature, so this value is a ceiling on a randomized range rather than the pace itself.

SendString vs. FillIn (FillInAppend/FillInInsert/FillInOverwrite):

SendString simulates a user typing: it dispatches real key events one character at a time and is the only typing primitive that honors this setting. Use it when the target field reacts to individual keystrokes (autocomplete, input masks, JS keyup validation) or when the interaction needs to look human.

FillIn* sets the field's value directly (its fast path) and does NOT honor this setting - it stays atomic regardless of TypingDelay. Its optional delayMs parameter only paces the per-character fallback used if the fast-path assignment fails (e.g. a stubborn custom control). Use FillIn* for ordinary form filling where speed and reliability matter more than realism.

Parameters
delayInTicksCeiling for the randomized inter-character delay, in milliseconds
Returns
Fluent interface to allow more GPAL settings
GPAL.WithTypingDelay(50)
.WithImageMatchingPercentage(80)
.WithSimulateMouse(true);
Returns
Fluent interface to specify more global settings

Definition at line 2943 of file GPAL.cs.

◆ WithWaitFor()

IAllowGPALSettings GenerallyPositive.GPAL.WithWaitFor ( int waitForInTicks)
static

Global setting to wait for time in ticks for an element to show up. Applied to every element in every workflow. Override in a unit of work using this pattern .WithSelector(select0or) .WaitFor(waitForInTicks) .LeftClick() NOTE: shortcut actions like LeftClick{selector) will not waitfor and no syntax will make them wait except this global setting.

Parameters
waitForInTicks
Returns

Definition at line 3080 of file GPAL.cs.

◆ XPathSelector()

Selector GenerallyPositive.GPAL.XPathSelector ( string xpath,
string selectorName = null )
static

Definition at line 1035 of file GPAL.cs.

Property Documentation

◆ AI

IAllowAIProvider GenerallyPositive.GPAL.AI
staticget

Entry point for the GPAL AI subsystem, providing a fluent interface for AI tasks.

.WithTitle("AI Classifier")
.WithFormControl(GPAL.Input.WithName("input").WithText("Enter text"))
.WithFormControl(GPAL.TextArea.WithName("output"))
.Show();
.WithProvider(AIProviderType.XAI)
.WithTask(AITask.Classification)
.WithClassificationType(AIClassificationType.Sentiment)
.WithInputFrom(form.ControlList.OfType<GPALInput>().First())
.WithOutputTo(form.ControlList.OfType<GPALTextArea>().First())
.Execute();
A GPAL single line input instantiated with GPAL.Input for use on GPAL forms. Callback EventHandler i...
A GPAL multiline textare instantiated with GPAL.TextArea for use on GPAL forms. Callback EventHandle...
static IAllowFormSettings Form
Instantiates a new GPALForm for creating simple interactive user interfaces.
Definition GPAL.cs:1302
static IAllowAIProvider AI
Entry point for the GPAL AI subsystem, providing a fluent interface for AI tasks.
Definition GPAL.cs:459

Definition at line 458 of file GPAL.cs.

◆ Application

IAllowApplicationOpenOrParameters GenerallyPositive.GPAL.Application
staticget

Instantiates a new fluent Application object.

Application application = (Application)GPAL.Application
.WithParameters(@"C:\edit.this.file.txt")
.Open(@"C:\Program File\Notepad++\notepad++.exe");
-or-
.WithParameters(@"C:\edit.this.file.txt")
.Open(@"C:\Program File\Notepad++\notepad++.exe")
.ToGPALObject();
Returns
Fluent interface to create your workflow

1

Definition at line 585 of file GPAL.cs.

◆ BarItem

IAllowBarItemSettings GenerallyPositive.GPAL.BarItem
staticget

A single item shared by menu bars and toolbars: text, optional image, optional shortcut key, and a callback wired to its click.

static GPALBarItem saveItem = (GPALBarItem)GPAL.BarItem
.WithText("Save")
.WithImage(saveIcon)
.WithShortcutKey(System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)
.WithCallback<EventHandler>(SaveHandler)
.ToGPALObject();
A single item shared by GPAL menu bars and toolbars. Because it derives from GPALControl it speaks th...
new IAllowBarItemSettings WithText(string text)
Sets the item's display text.
Returns
Fluent interface to create your control

Definition at line 1894 of file GPAL.cs.

◆ Base64Helper

Base64Helper GenerallyPositive.GPAL.Base64Helper
staticget

Definition at line 434 of file GPAL.cs.

◆ Browser

IAllowBrowserTypeOrGoto GenerallyPositive.GPAL.Browser
staticget

Instantiates a new fluent Browser object.

Browser myBrowser = (Browser)GPAL.Browser
.WithBrowserType(BrowserType.Edge)
.WithDriverLocation(@"c:\drivers")
.GoTo("https://www.ebay.com/");
-or-
Browser myBrowser = GPAL.Browser
.WithBrowserType(BrowserType.Edge)
.WithDriverLocation(@"c:\drivers")
.GoTo("https://www.ebay.com/")
.ToGPALObject();
Returns
Fluent interface to create your workflow

Definition at line 616 of file GPAL.cs.

◆ Button

IAllowControlSettingsEnabledAndDefault GenerallyPositive.GPAL.Button
staticget

Instantiates a new GPALButton for use on GPAL forms.
Callback EventHandler is invoked on the GPALButton.WindowsControl.Clicked event.

static GPALButton gPalButton1 = (GPALButton)GPAL.Button
.WithName("button1")
.WithText("Exit")
.WithCallback(ExitButtonClickHandler)
.WithShortcutKey(System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.E); // Alt-E
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPalButton1)
.ShowDialog();
}
private static void ExitButtonClickHandler(object sender, EventArgs e)
{
Control control = (Control)sender;
while (null != control.Parent)
control = control.Parent;
control.Hide();
}
A GPAL button instantiated with GPAL.Button for use on GPAL forms. Callback EventHandler is invoked ...
IAllowControlSettingsEnabledAndDefault Default
Fluent interface to designate this button as the default button. NOTE: Do NOT define more than one d...
Returns
Fluent interface to create your control

Definition at line 1346 of file GPAL.cs.

◆ Chart

IAllowControlSettingsAndChartSettings GenerallyPositive.GPAL.Chart
staticget

Instantiates a new GPALChart for use on GPAL forms.
Callback EventHandler is invoked on the GPALChart.WindowsControl.Clicked event.

static GPALChart gPalChart = (GPALChart)GPAL.Chart
.WithPalette(ChartColorPalette.Bright)
.WithCallback(ChartHandler) // invoked when chart gets clicked
.WithName("Chart 1");
static void Main(string[] args)
{
GenerateBarSeries();
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPalChart)
.ShowDialog();
}
private static void GenerateBarSeries()
{
string[] seriesArray = { "Cat", "Dog", "Bird", "Monkey" };
int[] pointsArray = { 2, 1, 7, 5 };
gPalChart.Titles.Add("Animals");
// Add series
for (int i = 0; i < seriesArray.Length; i++)
{
Series series = gPalChart.Series.Add(seriesArray[i]);
// series.ChartType = SeriesChartType.Bar;
series.Points.Add(pointsArray[i]);
Legend legend = new Legend(seriesArray[i]);
// legend.Alignment = StringAlignment.Near;
gPalChart.Legends.Add(legend);
}
}
A GPAL chart instantiated with GPAL.Chart for use on GPAL forms. Callback EventHandler is invoked on...
IAllowControlSettingsAndChartSettings WithPalette(ChartColorPalette colorPalette)
Set the color palette of the chart bars.
Returns
Fluent interface to create your control

Definition at line 1403 of file GPAL.cs.

◆ Checkbox

IAllowControlSettingsEnabledAndChecked GenerallyPositive.GPAL.Checkbox
staticget

Instantiates a new GPALCheckbox for use on a GPAL form.
Callback EventHandler is invoked on the GPALCheckbox.WindowsControl.CheckChanged event.
Default is not checked.

static GPALCheckbox gPALCheckbox1 = (GPALCheckbox)GPAL.Checkbox
.WithChecked(true)
.WithText("Overwrite File")
.WithCallback(CheckboxHandler); // on check changed event handler
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPALCheckbox1)
.ShowDialog();
}
private static void CheckboxHandler(object sender, EventArgs e)
{
if (((CheckBox) sender).Checked)
{
gPALCheckbox2.Checked = false; // uncheck the other, to act like a radio button
}
}
A GPAL checkbox instantiateds with GPAL,Checkbox for use on GPAL forms. Callback EventHandler is inv...
IAllowControlSettings WithChecked(bool isChecked)
Sets whether the checkbox is checked.
Returns
Fluent interface to create your control

Definition at line 1446 of file GPAL.cs.

◆ ComboBox

IAllowComboBoxControlSettings GenerallyPositive.GPAL.ComboBox
staticget

Instantiates a new GPALComboBox for use on a GPAL form.
Callback(s) set via WhenSelectedDo are invoked on the underlying ComboBox.SelectedIndexChanged event.

static GPALComboBox browserSelector = (GPALComboBox)GPAL.ComboBox
.WithName("BrowserChoice")
.WithItems("Chrome", "Edge", "Firefox")
.WithSelectedIndex(0)
.WhenSelectedDo(selected =>
{
Debug.WriteLine($"Selected browser: {selected}");
// browserType = (BrowserType)Enum.Parse(typeof(BrowserType), selected);
})
.WithToolTip("Choose target browser for automation")
.ToGPALObject();
// later in form building:
.WithTitle("Automation Setup")
.WithFormControl(browserSelector)
.ShowDialog();
A dropdown list (ComboBox) for selecting one option from a predefined set of choices....
IAllowControlSettings WithName(string name)
Sets the name for the control. Used in Information and Exception channel messages.
Everything starts here, all the GPAL controls and global settings using fluent syntax are here....
Definition GPAL.cs:49
Returns
Fluent interface to create and configure the combo box

Definition at line 1485 of file GPAL.cs.

◆ Converter

IAllowConverterInput GenerallyPositive.GPAL.Converter
staticget

New GPAL Convertor.

Definition at line 559 of file GPAL.cs.

◆ Credentials

IAllowCredentialServiceType GenerallyPositive.GPAL.Credentials
staticget

Return a new credential manager.

Definition at line 928 of file GPAL.cs.

◆ Cryptography

Cryptography GenerallyPositive.GPAL.Cryptography
staticget

Definition at line 430 of file GPAL.cs.

◆ Database

IAllowDatabaseSettings GenerallyPositive.GPAL.Database
staticget

Instantiates a new fluent Database SETTINGS object.
This data object defines settings for use by .FillInFrom method.

// retrieve the top 4 rows from table TestInput from GPAL database on server "SQLSERVER\DATABASE"
Database inputDatabase = (Database)GPAL.Database
.WithServerName(@"SQLSERVER\DATABASE")
.WithDatabaseName("GPAL")
.WithTableName("TestInput")
.WithRowCount(4);
Browser myBrowser = (Browser)GPAL.Browser
.WithBrowserType(BrowserType.Edge)
.WithDriverLocation(@"c:\drivers")
.GoTo("https://www.ebay.com/")
.WithWaitOnDocumentReady(true)
.WithSelector(searchSelector)
.CallAfterFillIn(CallAFterFillIn) // after each row is consumed, invoke CallAfterFillIn
.FillInFrom(inputDatabase); // after each row is consumed, invoke CallAfterFillIn
static IAllowDatabaseSettings Database
Instantiates a new fluent Database SETTINGS object. This data object defines settings for use by ....
Definition GPAL.cs:660
Returns
Fluent interface to define your database input

Definition at line 659 of file GPAL.cs.

◆ DataGridView

IAllowDataGridViewControlSettings GenerallyPositive.GPAL.DataGridView
staticget

Instantiates a new GPALDataGridView for use on a GPAL form.
Callback EventHandler is invoked on the GPALDataGridView.WindowsControl.CellValueChanged event (or other events when specified via .ForEvent). Supports tabular data display with columns and optional editing.

static GPALDataGridView logGrid = (GPALDataGridView)GPAL.DataGridView
.WithName("LogGrid")
.WithColumns("Time", "Level", "Message")
.WithCallback((s, e) => Debug.WriteLine("Cell changed"))
.WithToolTip("Execution log and results")
.ToGPALObject();
A grid control instantiated with GPAL.DataGridView for use on GPAL forms, displaying the contents of ...
Returns
Fluent interface to create and configure the data grid view

Definition at line 1513 of file GPAL.cs.

◆ DateTimePicker

IAllowDateTimePickerControlSettings GenerallyPositive.GPAL.DateTimePicker
staticget

Instantiates a new GPALDateTimePicker for use on a GPAL form.
Callback EventHandler is invoked on the GPALDateTimePicker.WindowsControl.ValueChanged event (or other events when specified via .ForEvent).

static GPALDateTimePicker startTime = (GPALDateTimePicker)GPAL.DateTimePicker
.WithName("StartTime")
.WithValue(DateTime.Now)
.WithFormat(DateTimePickerFormat.Custom)
.WithCustomFormat("yyyy-MM-dd HH:mm")
.WithCallback((s, e) => Debug.WriteLine($"Date changed to {((DateTimePicker)s).Value}"))
.WithToolTip("Select start date and time")
.ToGPALObject();
A date/time picker control instantiated with GPAL.DateTimePicker for use on GPAL forms.
Returns
Fluent interface to create and configure the date/time picker

Definition at line 1542 of file GPAL.cs.

◆ Excel

IGPALExcel GenerallyPositive.GPAL.Excel
staticget

Definition at line 954 of file GPAL.cs.

◆ File

IAllowFileName GenerallyPositive.GPAL.File
staticget

Instantiates a new fluent File SETTINGS object.
This data object defines settings for use by the .FillInFrom method.

File inputFile = (File)GPAL.File
.WithFileName(@"c:\ebay.words.txt");
Browser myBrowser = (Browser)GPAL.Browser
.WithBrowserType(BrowserType.Edge)
.WithDriverLocation(@"c:\drivers")
.GoTo("https://www.ebay.com/")
.WithWaitOnDocumentReady(true)
.WithSelector(searchSelector)
.CallAfterFillIn(CallAFterFillIn) // after each row is consumed, invoke CallAfterFillIn
.FillInFrom(inputFile); // after each row is consumed, invoke CallAfterFillIn
static IAllowFileName File
Instantiates a new fluent File SETTINGS object. This data object defines settings for use by the ....
Definition GPAL.cs:508
Returns
Fluent interface to define your file input

Definition at line 507 of file GPAL.cs.

◆ FileSelector

IAllowFileSelectorControlSettings GenerallyPositive.GPAL.FileSelector
staticget

Instantiates a new GPALFileSelector for use on a GPAL form.
Opens a standard file or folder selection dialog when clicked.
Callback EventHandler is invoked after a selection is made (or canceled), with FileSelectorEventArgs containing the selected path(s) and cancellation status.
Selected path(s) available via SelectedPath / SelectedPaths properties.

static GPALFileSelector driverPicker = (GPALFileSelector)GPAL.FileSelector
.WithName("WebDriverPath")
.WithTitle("Select WebDriver Folder")
.WithInitialDirectory(@"C:\")
.WithSelectFolder(true) // true = folder browser, false = file dialog
.WithFilter("Executables (*.exe)|*.exe|All files (*.*)|*.*")
.WithMultiSelect(false)
.WithCallback((s, args) =>
{
if (args.Cancelled)
{
Debug.WriteLine("Selection cancelled");
}
else
{
Debug.WriteLine($"Selected: {args.SelectedPath}");
if (args.SelectedPaths.Count > 1)
{
Debug.WriteLine($"Multi-select: {string.Join(", ", args.SelectedPaths)}");
}
}
})
.WithToolTip("Click to browse for ChromeDriver / geckodriver folder")
.ToGPALObject();
// later in form building:
GPALForm myForm = (GPALForm)GPAL.Form
.WithTitle("File Selection Test")
.WithFormControl(driverPicker)
.ShowDialog();
A file/folder selector control instantiated with GPAL.FileSelector for use on GPAL forms....
Returns
Fluent interface to create and configure the file/folder selector

Definition at line 1594 of file GPAL.cs.

◆ Form

IAllowFormSettings GenerallyPositive.GPAL.Form
staticget

Instantiates a new GPALForm for creating simple interactive user interfaces.

static GPALButton gPalButton1 = (GPALButton)GPAL.Button
.WithName("button1")
.WithText("Exit")
.WithCallback(ExitButtonClickHandler)
.WithShortcutKey(System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.E); // Alt-E
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPalButton1)
.ShowDialog();
}
private static void ExitButtonClickHandler(object sender, EventArgs e)
{
Control control = (Control)sender;
while (null != control.Parent)
control = control.Parent;
control.Hide();
}
Returns
Fluent interface to create your GPAL GUI

Definition at line 1301 of file GPAL.cs.

◆ Gherkin

IAllowGiven GenerallyPositive.GPAL.Gherkin
staticget

Definition at line 933 of file GPAL.cs.

◆ GoogleDrive

IAllowDriveCredentials GenerallyPositive.GPAL.GoogleDrive
staticget

New GoogleDrive workflow.

Definition at line 949 of file GPAL.cs.

◆ GoogleSheets

IAllowSpreadsheetSelection GenerallyPositive.GPAL.GoogleSheets
staticget

New Googlesheets workflow.

Definition at line 941 of file GPAL.cs.

◆ GPALSettings

GPALSettings GenerallyPositive.GPAL.GPALSettings
staticgetset

Definition at line 200 of file GPAL.cs.

◆ Grid

IAllowGridActions<string> GenerallyPositive.GPAL.Grid
staticget

New GPALGrid<string></string> (rows/columns).

Definition at line 520 of file GPAL.cs.

◆ GroupBox

IAllowGroupBoxControlSettings GenerallyPositive.GPAL.GroupBox
staticget

Instantiates a new GPALGroupBox for use on a GPAL form: a titled box around a set of controls, laid out like any other control. A container can go inside it, so a group box can hold a splitter.

Definition at line 1990 of file GPAL.cs.

◆ HiddenDesktop

Browser.IHiddenDesktops GenerallyPositive.GPAL.HiddenDesktop
staticget

Every hidden desktop this process has made, and the screen itself. Peek puts one on the screen and puts yours back afterwards, Return does it early from any thread, and CloseAll gives up the handles.

A browser hands back the one desktop it is on through its own HiddenDesktop, so this is for the operations that belong to the screen rather than to one desktop.

GPAL.HiddenDesktop.Peek(); // every one that has windows, five seconds each
GPAL.HiddenDesktop.Peek(10_000); // the same walk, ten seconds each
GPAL.HiddenDesktop.Peek("Overnight"); // just that one
browser.HiddenDesktop.Peek(); // just the one this browser is on

Definition at line 2145 of file GPAL.cs.

◆ ImageHelper

IImageHelper GenerallyPositive.GPAL.ImageHelper
staticget

Definition at line 477 of file GPAL.cs.

◆ Input

IAllowControlSettingsPlaceholderEnabledAndPassword GenerallyPositive.GPAL.Input
staticget

Instantiates a new one-line GPALInput control for use on a GPAL form.
Callback EventHandler is invoked on the GPALInput.WindowsControl.TextChanged event.

static GPALInput gPalInput = (GPALInput)GPAL.Input
.WithText(@"c:\drivers")
.WithCallback(InputHandler); // on text changed event handler
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPalInput)
.ShowDialog();
}
IAllowControlSettingsAndFontSettings WithText(string text)
Set the text of the control.
Returns
Fluent interface to create your control

Definition at line 1625 of file GPAL.cs.

◆ KEYEVENTF_EXTENDEDKEY

uint GenerallyPositive.GPAL.KEYEVENTF_EXTENDEDKEY
staticget

The extended-key flag indicates whether the keystroke message originated from one of the additional keys on the enhanced keyboard. The extended keys consist of the ALT and CTRL keys on the right-hand side of the keyboard; the INS, DEL, HOME, END, PAGE UP, PAGE DOWN, and arrow keys in the clusters to the left of the numeric keypad; the NUM LOCK key; the BREAK (CTRL+PAUSE) key; the PRINT SCRN key; and the divide (/) and ENTER keys in the numeric keypad. The extended-key flag is set if the key is a extended key For use with keybd_event.

keybd_event(GPAL.VK_CONTROL_LEFT, 0, GPAL.KEYEVENTF_EXTENDEDKEY | 0, 0);

Definition at line 161 of file GPAL.cs.

◆ KEYEVENTF_KEYUP

uint GenerallyPositive.GPAL.KEYEVENTF_KEYUP
staticget

Indicates a keyup keystroke is being sent. For use with keybd_event.

keybd_event(GPAL.VK_CONTROL_LEFT, 0, GPAL.KEYEVENTF_EXTENDEDKEY | GPAL.KEYEVENTF_KEYUP, 0);

Definition at line 171 of file GPAL.cs.

◆ Label

IAllowControlSettingsAndFontSettings GenerallyPositive.GPAL.Label
staticget

Instantiates a new GPALLabel for use on a GPAL form.
Callback EventHandler is invoked on the GPALLabel.WindowsControl.Clicked event.

static GPALLabel gPalLabel = (GPALLabel)GPAL.Label
.WithText("Form Tester");
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPalLabel)
.ShowDialog();
}
A GPAL lable instantiated with GPAL.Label for use on GPAL forms. Callback EventHandler is invoked on...
Returns
Fluent interface to create your control

Definition at line 1657 of file GPAL.cs.

◆ Launcher

IAllowExecutableSetup GenerallyPositive.GPAL.Launcher
staticget

Definition at line 731 of file GPAL.cs.

◆ ListView

IAllowListVIewControlSettings GenerallyPositive.GPAL.ListView
staticget

Instantiates a new GPALListView for use on a GPAL form.
Callback EventHandler is invoked on the GPALListView.WindowsControl.SelectedIndexChanged event (or other events when specified via .ForEvent).
Supports columns, different view modes (Details, List, etc.), selection, and double-click activation.

static GPALListView fileResults = GPAL.ListView
.WithName("SavedFiles")
.WithColumns("Filename", "Size (KB)", "Date")
.WithView(ListViewMode.Details)
.WithFullRowSelect(true)
.WithCallback((s, e) => Debug.WriteLine("Selection changed"))
.ForEvent(ControlEventType.SelectedIndexChanged)
.WithCallback((s, e) => Debug.WriteLine("Item activated"))
.ForEvent(ControlEventType.DoubleClick)
.WithToolTip("List of processed or downloaded files")
.ToGPALObject();
// later in form building:
GPALForm myForm = (GPALForm)GPAL.Form
.WithTitle("File Results")
.WithFormControl(fileResults)
.ShowDialog();
A list view control capable of displaying data in Details, List, LargeIcon, SmallIcon,...
static IAllowListVIewControlSettings ListView
Instantiates a new GPALListView for use on a GPAL form. Callback EventHandler is invoked on the GPAL...
Definition GPAL.cs:1698
Returns
Fluent interface to create and configure the list view

Definition at line 1697 of file GPAL.cs.

◆ Logger

IAllowLoggingSettings GenerallyPositive.GPAL.Logger
staticget

New GPAL Logger.

Definition at line 533 of file GPAL.cs.

◆ LoggerList

List<IGPALLogger> GenerallyPositive.GPAL.LoggerList = new List<IGPALLogger>()
staticget

Definition at line 181 of file GPAL.cs.

◆ Mail

IAllowEmailServerSettings GenerallyPositive.GPAL.Mail
staticget

New GPAL Mail handler.

Definition at line 546 of file GPAL.cs.

◆ MenuBar

IAllowMenuBarControlSettings GenerallyPositive.GPAL.MenuBar
staticget

A menu bar docked to the top of a GPAL form.
Open a top-level menu with WithMenu("TopMenu"), then attach GPAL.BarItem items with WithItem(item).

static GPALMenuBar gPALMenuBar = (GPALMenuBar)GPAL.MenuBar
.WithMenu("File")
.WithItem(saveItem)
.WithSeparator()
.WithItem(exitItem)
.WithMenu("Help")
.WithItem(aboutItem)
.WithName("MainMenu")
.ToGPALObject();
A menu bar docked to the top of a GPAL form. Open a top-level menu with WithMenu(string),...
IAllowMenuBarControlSettings WithMenu(string topMenu)
Opens (or reselects) a top-level menu. Subsequent WithItem(GPALBarItem) and WithSeparator calls attac...
Returns
Fluent interface to create your control

Definition at line 1867 of file GPAL.cs.

◆ NumericUpDown

IAllowNumericUpDownControlSettings GenerallyPositive.GPAL.NumericUpDown
staticget

Instantiates a new GPALNumericUpDown for use on a GPAL form.
Callback EventHandler is invoked on the GPALNumericUpDown.WindowsControl.ValueChanged event (or other events when specified via .ForEvent). Useful for selecting numeric values such as timeouts, retry counts, ports, etc.

static GPALNumericUpDown timeoutSelector = (GPALNumericUpDown)GPAL.NumericUpDown
.WithName("TimeoutSeconds")
.WithMinimum(0)
.WithMaximum(300)
.WithValue(30)
.WithIncrement(5)
.WithDecimalPlaces(0)
.WithCallback((s, e) => Debug.WriteLine($"Timeout changed to {((NumericUpDown)s).Value}"))
.WithToolTip("Maximum wait time in seconds")
.ToGPALObject();
A numeric up/down spinner control instantiated with GPAL.NumericUpDown for use on GPAL forms.
Returns
Fluent interface to create and configure the numeric up/down control

Definition at line 1728 of file GPAL.cs.

◆ OAuthTokenUrl

string GenerallyPositive.GPAL.OAuthTokenUrl
staticgetset

Where an OAuth redirect lands and the token is read back from, e.g. http://localhost:3117/. Set while a credential is being consumed: a browser running OttoMagic already has a GPALRestAPI of its own, and anything else gets a listener bound on a free port for the one exchange.

Definition at line 2162 of file GPAL.cs.

◆ OCR

OCRInterfaces.IGPALOCR GenerallyPositive.GPAL.OCR
staticget

Definition at line 472 of file GPAL.cs.

◆ ProgressBar

IAllowProgressBarControlSettings GenerallyPositive.GPAL.ProgressBar
staticget

A progress bar control for GPAL forms.
Displays task completion percentage or indeterminate (marquee) activity.
Callback (if set) is invoked on the ValueChanged event of the underlying ProgressBar.

static GPALProgressBar downloadProgress = (GPALProgressBar)GPAL.ProgressBar
.WithName("DownloadProgress")
.WithMinimum(0)
.WithMaximum(100)
.WithValue(0)
.WithStyle(ProgressBarStyle.Continuous)
.WithCallback((s, e) => Debug.WriteLine("Progress updated"))
.WithToolTip("Current task progress")
.ToGPALObject();
A progress indicator control that shows completion percentage or indeterminate activity....
Returns
Fluent interface to create your control

Definition at line 1759 of file GPAL.cs.

◆ RadioButton

IAllowControlSettingsEnabledAndChecked GenerallyPositive.GPAL.RadioButton
staticget

Instantiates a new GPALRadioButton for use on a GPAL form.
Callback EventHandler is invoked on the GPALRadioButton.WindowsControl.CheckChanged event.
Default is not selected.

static GPALRadioButton gPalRadioButton1 = (GPALRadioButton)GPAL.RadioButton
.WithChecked(true)
.WithName("Radiobutton1")
.WithText("Chrome")
.WithCallback(RadioButton1Handler); // on check changed event handler
static GPALRadioButton gPalRadioButton2 = (GPALRadioButton)GPAL.RadioButton
.WithName("Radiobutton2")
.WithText("Edge")
.WithCallback(RadioButton2Handler); // on check changed event handler
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPalRadioButton1)
.WithFormControl(gPalRadioButton2)
.ShowDialog();
}
private static void RadioButtonHandler(object sender, EventArgs e)
{
if (((CheckBox) sender).Checked)
{
// YOUR CODE HERE - you don't have to thave two handlers, you could have one
}
}
A GPAL radiobutton instantiated with GPAL.RadioButton for use GPAL forms. Callback EventHandler is i...
IAllowControlSettings WithChecked(bool isChecked)
Sets whether the radiobutton is checked.
Returns
Fluent interface to create your control

Definition at line 1808 of file GPAL.cs.

◆ Request

IAllowRequestSettings GenerallyPositive.GPAL.Request
staticget

Start describing an API request for .Fetch to issue from inside the page, so it carries the session the browser has already earned rather than a fresh connection of its own.

static GPALRequest productSearch = (GPALRequest)GPAL.Request
.WithPath("/api/products/search")
.WithHttpMethod("POST")
.WithParameter("page={page}")
.WithName("product search");
Describes an API request for .Fetch to issue from inside the page, so it carries the session the brow...
IAllowRequestSettings WithPath(string path)
Path or full URL to request. A path such as "/api/search" is resolved against the origin the browser ...
Returns
Fluent interface to describe the request

Definition at line 723 of file GPAL.cs.

◆ RESTClient

IAllowRESTEndpoint GenerallyPositive.GPAL.RESTClient
staticget

Instantiate a new fluent RESTClient.

.WithAPIBase(browser.RestApiBaseUrl)
.WithEndpoint(ApiEndpoint.QuerySelectors)
.WithName("ButtonClient")
.WithParameters(new { selector = ".button" })
.WithHttpMethod("POST")
.ToGPALObject();
var elements = client.Execute<List<GPALElement>>(); // Logs "[ButtonClient][...]" if error
// Reuse
var moreElements = client
.WithParameters(new { selector = ".link" })
.Execute<List<GPALElement>>();
RESTClient client2 = GPAL.RESTClient
.WithAPIBase(browser.RestApiBaseUrl)
.WithName("TestClient")
.ToGPALObject();
RESTClient client3 = GPAL.RESTClient
.WithAPIBase(browser.RestApiBaseUrl)
.WithName("TestClient")
.ToGPALObject();
// EXAMPLES - not working code
// QuerySelector (CSS only)
var singleCss = client3.QuerySelector(".header")
.Execute<GPALElement>(); // GET /query-selector with { "css": ".header" }
// QuerySelectors (CSS only)
var allCss = client3.QuerySelectors(".sidebar-item")
.Execute<List<GPALElement>>(); // GET /query-selectors with { "css": ".sidebar-item" }
// Evaluate (XPath only)
var singleXPath = client3.Evaluate("//div[1]")
.Execute<GPALElement>(); // GET /evaluate with { "xpath": "//div[1]" }
// EvaluateAll (XPath only)
var allXPath = client3.EvaluateAll("//p")
.Execute<List<GPALElement>>(); // GET /evaluate-all with { "xpath": "//p" }
// Chaining with built-in methods, reusing results with names
RESTClient client4 = GPAL.RESTClient
.WithAPIBase(browser.RestApiBaseUrl)
.WithName("BuiltInChainClient")
.WithEndpoint(ApiEndpoint.Evaluate)
.WithXPath("//div[@class='product-name']")
.WithResultName("productName")
.AndThen<string>() // Result 0: "Laptop"
.WithEndpoint(ApiEndpoint.FillInOverwrite)
.WithXPath("//input[@id='search']")
.WithTextFromResult("productName") // Use Result "productName": "Laptop"
.WithResultName("inputResult")
.AndThen() // Submits "Laptop" to the input field
.WithEndpoint(ApiEndpoint.GetCurrentUrl)
.WithResultName("currentUrl")
.AndThen<string>() // Result 1: "http://localhost:3000/search?q=Laptop"
.WithEndpoint(ApiEndpoint.Goto)
.WithUrlFromResult("currentUrl") // Use Result "currentUrl": "http://localhost:3000/search?q=Laptop"
.AndThen(); // Navigates to the URL
var results = client4.GetExecutionResults();
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Product Name (Result 0): [{results[0]}]"); // "Laptop"
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Current URL (Result 1): [{results[1]}]"); // "http://localhost:3000/search?q=Laptop"
// Chaining with JavaScript, reusing results with names
RESTClient client5 = GPAL.RESTClient
.WithAPIBase(browser.RestApiBaseUrl)
.WithName("ScriptClient")
.WithEndpoint(ApiEndpoint.ExecuteJavaScript)
.WithParameters("//div[@class='item']")
.WithScript("return Array.from(arguments[0]).map(el => el.id);") // Returns ["item1", "item2"]
.WithResultName("elementIds")
.AndThen<List<string>>()
.WithEndpoint(ApiEndpoint.ExecuteJavaScript)
.WithParametersFromResult("elementIds") // Use Result "elementIds": ["item1", "item2"]
.WithScript("return arguments[0][1];") // Returns "item2"
.WithResultName("secondId")
.AndThen<string>()
.WithEndpoint(ApiEndpoint.ExecuteJavaScript)
.WithParametersFromResult("elementIds") // Use Result "elementIds": ["item1", "item2"]
.WithScript("return arguments[0].length;") // Returns 2
.WithResultName("idCount")
.AndThen<int>();
var results2 = client5.GetExecutionResults();
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Element IDs (Result 0): [{string.Join(", ", (List<string>)results2[0])}]"); // "item1, item2"
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Second ID (Result 1): [{results2[1]}]"); // "item2"
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Count of IDs (Result 2): [{results2[2]}]"); // 2
// Mixing named and ordinal lookups
RESTClient client6 = GPAL.RESTClient
.WithAPIBase(browser.RestApiBaseUrl)
.WithName("MixedLookupClient")
.WithEndpoint(ApiEndpoint.Evaluate)
.WithXPath("//div[@class='product-name']")
.WithResultName("productName")
.AndThen<string>() // Result 0: "Laptop"
.WithEndpoint(ApiEndpoint.ExecuteJavaScript)
.WithParametersFromResult("productName") // Use Result "productName": "Laptop"
.WithScript("return 'Search term: ' + arguments[0];") // Returns "Search term: Laptop"
.AndThen<string>() // Result 1 (unnamed)
.WithEndpoint(ApiEndpoint.FillInOverwrite)
.WithXPath("//input[@id='search']")
.WithTextFromResult(1) // Use Result 1 (ordinal): "Search term: Laptop"
.AndThen(); // Submits "Search term: Laptop" to the input field
var results3 = client6.GetExecutionResults();
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Product Name (Result 0): [{results3[0]}]"); // "Laptop"
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Script Result (Result 1): [{results3[1]}]"); // "Search term: Laptop"
// Using Execute (non-chaining) and reusing results later
RESTClient client7 = GPAL.RESTClient
.WithAPIBase(browser.RestApiBaseUrl)
.WithName("NonChainingClient")
.WithEndpoint(ApiEndpoint.Evaluate)
.WithXPath("//div[@class='product-name']")
.WithResultName("productName");
var product = client7.Execute<string>(); // Result 0: "Laptop", stored in _executionResults
client7.WithEndpoint(ApiEndpoint.FillInOverwrite)
.WithXPath("//input[@id='search']")
.WithTextFromResult("productName") // Use Result "productName": "Laptop"
.WithResultName("inputResult")
.Execute(); // Submits "Laptop" to the input field
var results4 = client7.GetExecutionResults();
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Product Name (Result 0): [{results4[0]}]"); // "Laptop"
// Can also use your own endpoint names (string)
RESTClient client = GPAL.RESTClient
.WithAPIBase(browser.RestApiBaseUrl)
.WithName("BuiltInChainClient")
.WithEndpoint("evaluate")
.WithXPath("//div[@class='product-name']")
.WithResultName("productName")
.AndThen<string>() // Result 0: "Laptop"
.WithEndpoint("input-text")
.WithXPath("//input[@id='search']")
.WithTextFromResult("productName") // Use Result "productName": "Laptop"
.WithResultName("inputResult")
.AndThen() // Submits "Laptop" to the input field
.WithEndpoint("get-current-url")
.WithResultName("currentUrl")
.AndThen<string>() // Result 1: "http://localhost:3000/search?q=Laptop"
.WithEndpoint("goto")
.WithUrlFromResult("currentUrl") // Use Result "currentUrl": "http://localhost:3000/search?q=Laptop"
.AndThen(); // Navigates to the URL
var results = client.GetExecutionResults();
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Product Name (Result 0): [{results[0]}]"); // "Laptop"
GPAL.PublishSimpleEvent(GPALEventType.NOTICE, $"Current URL (Result 1): [{results[1]}]"); // "http://localhost:3000/search?q=Laptop"
static IAllowRESTEndpoint RESTClient
Instantiate a new fluent RESTClient.
Definition GPAL.cs:914
string Execute(bool publishEvent=true)
Executes the request synchronously.
IAllowRESTParametersOrExecution WithParameters(params object[] parameters)
Sets parameters as a variable argument list.
IAllowRESTEndpointDetails WithAPIBase(string url)
Sets the API base URL with download path.

Definition at line 913 of file GPAL.cs.

◆ RichTextBox

IAllowRichTextBoxControlSettings GenerallyPositive.GPAL.RichTextBox
staticget

Instantiates a new GPALRichTextBox for use on a GPAL form.
Renders Markdown (headings, bold, and bullet/numbered lists with nesting) - useful for displaying formatted AI responses or other structured text.

static GPALRichTextBox gPalOutput = (GPALRichTextBox)GPAL.RichTextBox
.WithName("AIOutput")
.ToGPALObject();
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPalOutput)
.ShowDialog();
}
A read-only display control for rendering simple Markdown - headings (#, ##, ###),...
Returns
Fluent interface to create your control

Definition at line 2053 of file GPAL.cs.

◆ Selector

IAllowSelectorSettings GenerallyPositive.GPAL.Selector
staticget

Instantiates a new fluent GPAL Selector object used to locate an element.
Selectors are for browsers or applications.
.

// Sample Application selector for the current tab writing surface in Notepad++
Selector notepadPane = (Selector)GPAL.Selector
.WithName("Notepad Pane")
.WithXPath("/Window/Pane[1]")
.WithOffsetX(10)
.WithOffsetY(10);
// Sample Browser selector, selector paths are evaluated in order they are declared.
// If at least one eleement is found for the selector path, then no other paths are evaluated.
// This shows two paths, first CSS then XPath.
Selector searchSelector = (Selector)GPAL.Selector
.WithName("SearchInput")
.WithCSS("#gh-ac")
.WithXPath("//*[@id=\"gh-ac\"]")
.MatchPlaceholder("Search for anything"); // must match this to be found
Returns
Fluent interface to create your workflow

Definition at line 692 of file GPAL.cs.

◆ SplitBottom

GPALSpliter GenerallyPositive.GPAL.SplitBottom
staticget

Marks the end of a splitter's top pane. Everything added after it is the bottom pane.

Definition at line 1996 of file GPAL.cs.

◆ SplitRight

GPALSpliter GenerallyPositive.GPAL.SplitRight
staticget

Marks the end of a splitter's left pane. Everything added after it is the right pane.

Definition at line 1993 of file GPAL.cs.

◆ Splitter

IAllowSplitterControlSettings GenerallyPositive.GPAL.Splitter
staticget

Instantiates a new GPALSplitter for use on a GPAL form: two panes with a bar between them, built whole and then laid out like any other control.
Call .HSplit for a left and right pane or .VSplit for a top and bottom, add the controls of both panes in order, and mark where the first pane ends with SplitRight or SplitBottom. .

GPAL.Splitter.HSplit(0.55)
.WithFormControl(GPAL.LabelFor("Automation Engine:"))
.WithFormControl(comboBoxAutomationEngine)
.WithFormControl(GPAL.SplitRight)
.WithFormControl(gPALNumeric);

Definition at line 1984 of file GPAL.cs.

◆ StatusStrip

IAllowStatusStripControlSettings GenerallyPositive.GPAL.StatusStrip
staticget

A status strip control (docked at the bottom) for GPAL forms.
Displays real-time status messages, browser info, file counts, etc.
Callback (if set) is invoked on the primary StatusStrip event (usually ItemClicked or similar).

static GPALStatusStrip appStatus = (GPALStatusStrip)GPAL.StatusStrip
.WithName("MainStatus")
.WithText("Ready")
.WithCallback((s, e) => Debug.WriteLine("Status clicked"))
.WithToolTip("Application status bar")
.ToGPALObject();
A status bar (usually docked at the bottom of the form) that displays real-time messages,...
Returns
Fluent interface to create your control

Definition at line 1837 of file GPAL.cs.

◆ Tab

IAllowControlSettings GenerallyPositive.GPAL.Tab
staticget

Instantiates a new GPALTab for use on a GPAL form.
Callback EventHandler is invoked on the GPALTab.WindowsControl.Clicked event.

static GPALTab gPalTab1 = (GPALTab)GPAL.Tab
.WithName("Tab1")
.WithText("Tab 1")
.WithShortcutKey(System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.D1); // Alt-1
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithTab(gPalTab1) // items after this are placed on this tab
.WithFormControl(gPalRadioButton1)
.WithFormControl(gPalRadioButton2)
.ShowDialog();
}
A GPAL tab instantiated with GPAL.Tab for use on GPAL forms. Callback EventHandler is invoked on the...
Returns
Fluent interface to create your control

Definition at line 1955 of file GPAL.cs.

◆ TextArea

IAllowControlSettingsAndEnabled GenerallyPositive.GPAL.TextArea
staticget

Instantiates a new GPALTextArea for use on a GPAL form.
Callback EventHandler is invoked on the GPALTextarea.WindowsControl.TextChanged event.

static GPALTextArea gPalTextArea = (GPALTextArea)GPAL.TextArea
.WithText("Type something here")
.WithCallback(TextAreaHandler) // on text changed event handler
.WithShortcutKey(System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.T); // Alt-T
static void Main(string[] args)
{
Form myForm = (Form)GPAL.Form
.WithTitle("Simple Form Test")
.WithFormControl(gPalTextArea)
.ShowDialog();
}
Returns
Fluent interface to create your control

Definition at line 2019 of file GPAL.cs.

◆ Toolbar

IAllowToolbarControlSettings GenerallyPositive.GPAL.Toolbar
staticget

A toolbar docked below the menu bar, holding GPAL.BarItem buttons and optional separators.

static GPALToolbar gPALToolbar = (GPALToolbar)GPAL.Toolbar
.WithItem(newItem)
.WithSeparator()
.WithItem(runItem)
.WithName("MainToolbar")
.ToGPALObject();
A toolbar docked below the menu bar, containing GPALBarItem buttons and optional separators.
IAllowToolbarControlSettings WithItem(GPALBarItem item)
Adds a button to the toolbar.
Returns
Fluent interface to create your control

Definition at line 1920 of file GPAL.cs.

◆ TreeView

IAllowTreeViewControlSettings GenerallyPositive.GPAL.TreeView
staticget

Instantiates a new GPALTreeView for use on a GPAL form.
Callback EventHandler is invoked on the GPALTreeView.WindowsControl.AfterSelect event (or other events when specified via .ForEvent). Supports hierarchical node display (folders, categories, workflows, etc.).

static GPALTreeView workflowTree = (GPALTreeView)GPAL.TreeView
.WithName("WorkflowSteps")
.WithCallback((s, e) =>
{
var tv = (TreeView)s;
Debug.WriteLine($"Selected node: {tv.SelectedNode?.Text}");
})
.WithToolTip("Workflow structure or directory tree")
.ToGPALObject();
A tree view control instantiated with GPAL.TreeView for use on GPAL forms.
static IAllowTreeViewControlSettings TreeView
Instantiates a new GPALTreeView for use on a GPAL form. Callback EventHandler is invoked on the GPAL...
Definition GPAL.cs:2086
Returns
Fluent interface to create and configure the tree view

Definition at line 2085 of file GPAL.cs.

◆ Url

IAllowGPALUrlForUrl GenerallyPositive.GPAL.Url
staticget

Definition at line 959 of file GPAL.cs.

◆ UseHardware

bool GenerallyPositive.GPAL.UseHardware
staticget

Definition at line 2098 of file GPAL.cs.

◆ UseJavaSCript

bool GenerallyPositive.GPAL.UseJavaSCript
staticget

Definition at line 2102 of file GPAL.cs.

◆ Version

string GenerallyPositive.GPAL.Version
staticget

Definition at line 2153 of file GPAL.cs.

◆ VK_ALT

byte GenerallyPositive.GPAL.VK_ALT
staticget

Alt key virtual keycode (VK) for use with keybd_event. https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes.

Definition at line 58 of file GPAL.cs.

◆ VK_APPS

byte GenerallyPositive.GPAL.VK_APPS
staticget

Application (Menu) key virtual keycode (VK) for use with keybd_event.

Definition at line 138 of file GPAL.cs.

◆ VK_BACK

byte GenerallyPositive.GPAL.VK_BACK
staticget

Backspace key virtual keycode (VK) for use with keybd_event.

Definition at line 146 of file GPAL.cs.

◆ VK_CONTROL_LEFT

byte GenerallyPositive.GPAL.VK_CONTROL_LEFT
staticget

Left Control key virtual keycode (VK) for use with keybd_event.

Definition at line 110 of file GPAL.cs.

◆ VK_CONTROL_RIGHT

byte GenerallyPositive.GPAL.VK_CONTROL_RIGHT
staticget

Right Control key virtual keycode (VK) for use with keybd_event.

Definition at line 114 of file GPAL.cs.

◆ VK_DELETE

byte GenerallyPositive.GPAL.VK_DELETE
staticget

Delete key virtual keycode (VK) for use with keybd_event.

Definition at line 62 of file GPAL.cs.

◆ VK_DOWN

byte GenerallyPositive.GPAL.VK_DOWN
staticget

Down Arrow key virtual keycode (VK) for use with keybd_event.

Definition at line 86 of file GPAL.cs.

◆ VK_END

byte GenerallyPositive.GPAL.VK_END
staticget

End key virtual keycode (VK) for use with keybd_event.

Definition at line 78 of file GPAL.cs.

◆ VK_F10

byte GenerallyPositive.GPAL.VK_F10
staticget

F10 key virtual keycode (VK) for use with keybd_event.

Definition at line 66 of file GPAL.cs.

◆ VK_HOME

byte GenerallyPositive.GPAL.VK_HOME
staticget

Home key virtual keycode (VK) for use with keybd_event.

Definition at line 82 of file GPAL.cs.

◆ VK_LMENU

byte GenerallyPositive.GPAL.VK_LMENU
staticget

Left Alt key virtual keycode (VK) for use with keybd_event.

Definition at line 130 of file GPAL.cs.

◆ VK_LWIN

byte GenerallyPositive.GPAL.VK_LWIN
staticget

Left Windows key virtual keycode (VK) for use with keybd_event.

Definition at line 118 of file GPAL.cs.

◆ VK_NEXT

byte GenerallyPositive.GPAL.VK_NEXT
staticget

Page Down key virtual keycode (VK) for use with keybd_event.

Definition at line 74 of file GPAL.cs.

◆ VK_PRIOR

byte GenerallyPositive.GPAL.VK_PRIOR
staticget

Page Up key virtual keycode (VK) for use with keybd_event.

Definition at line 70 of file GPAL.cs.

◆ VK_RETURN

byte GenerallyPositive.GPAL.VK_RETURN
staticget

Enter/Return key virtual keycode (VK) for use with keybd_event.

Definition at line 98 of file GPAL.cs.

◆ VK_RMENU

byte GenerallyPositive.GPAL.VK_RMENU
staticget

Right Alt key virtual keycode (VK) for use with keybd_event.

Definition at line 134 of file GPAL.cs.

◆ VK_RWIN

byte GenerallyPositive.GPAL.VK_RWIN
staticget

Right Windows key virtual keycode (VK) for use with keybd_event.

Definition at line 122 of file GPAL.cs.

◆ VK_SCROLL

byte GenerallyPositive.GPAL.VK_SCROLL
staticget

Scroll Lock key virtual keycode (VK) for use with keybd_event.

Definition at line 126 of file GPAL.cs.

◆ VK_SHIFT_LEFT

byte GenerallyPositive.GPAL.VK_SHIFT_LEFT
staticget

Left Shift key virtual keycode (VK) for use with keybd_event.

Definition at line 106 of file GPAL.cs.

◆ VK_SHIFT_RIGHT

byte GenerallyPositive.GPAL.VK_SHIFT_RIGHT
staticget

Right Shift key virtual keycode (VK) for use with keybd_event.

Definition at line 102 of file GPAL.cs.

◆ VK_SPACE

byte GenerallyPositive.GPAL.VK_SPACE
staticget

Space bar key virtual keycode (VK) for use with keybd_event.

Definition at line 142 of file GPAL.cs.

◆ VK_TAB

byte GenerallyPositive.GPAL.VK_TAB
staticget

Tab key virtual keycode (VK) for use with keybd_event.

Definition at line 94 of file GPAL.cs.

◆ VK_UP

byte GenerallyPositive.GPAL.VK_UP
staticget

Up Arrow key virtual keycode (VK) for use with keybd_event.

Definition at line 90 of file GPAL.cs.

◆ Workflow

Browser.IAllowScheduledWorkflow GenerallyPositive.GPAL.Workflow
staticget

Runs whole workflows at once, each building and owning whatever it drives, so one can run Chrome on OttoMagic while the next runs Firefox on Selenium. Scheduling only: see Browser.Browser.WithWorkflow(Action<Browser.IBrowser>) for several steps against one browser you already have.

.WithWorkflow(() => { /* builds its own browser, closes it <em>&zwj;/ })
.WithWorkflow(() => { /</em> and so does this one *&zwj;/ })
.Run(2);
static Browser.IAllowScheduledWorkflow Workflow
Runs whole workflows at once, each building and owning whatever it drives, so one can run Chrome on O...
Definition GPAL.cs:2122

Definition at line 2121 of file GPAL.cs.

◆ YouTube

IGPALYouTube GenerallyPositive.GPAL.YouTube
staticget

Definition at line 468 of file GPAL.cs.


The documentation for this class was generated from the following file: