17using DocumentFormat.OpenXml.Drawing;
21using System.Collections.Generic;
22using System.Diagnostics;
26using System.Threading.Tasks;
89 #region <BrowserInterfaces>
116 IAllowToGPALObject<IBrowser>
119 bool? FileDownloaded { [Data(Description =
"True if the most recent download action successfully downloaded a file", Submenu =
"Browser State")]
get;
set; }
120 BrowserType BrowserType { [Data(Description =
"Return the current browser type", Submenu =
"Browser State")]
get; }
121 IWebDriver BrowserDriver { [Data(Description =
"The browser driver controlling the current Browser", Submenu =
"Browser State")]
get; }
126 string RestApiBaseUrl { [Data(Description =
"Where this browser's GPALRestAPI is listening, e.g. http://localhost:3117/, taken from the port it announced while starting", Submenu =
"Browser State")]
get; }
127 int CurrentTabIdx { [Data(Description =
"Index of the currently active browser tab/window", Submenu =
"Browser State")]
get; }
128 string CurrentUrl { [Data(Description =
"The URL of the page currently loaded in the browser", Submenu =
"Browser State")]
get; }
129 string BrowserVersion { [Data(Description =
"The version of the browser being automated", Submenu =
"Browser State")]
get; }
130 object JavaScriptResultObj { [Data(Description =
"The result object returned by the most recent ExecuteJavaScriptObj call", Submenu =
"Browser State")]
get; }
131 string JavaScriptResultStr { [Data(Description =
"The result string returned by the most recent ExecuteJavaScriptStr call", Submenu =
"Browser State")]
get; }
132 PuppeteerCommunicator PuppeteerCommunicator { [Data(Description =
"Communicator used to send/receive messages to the Puppeteer engine for this Browser", Submenu =
"Engines")]
get; }
133 IPuppeteerClient PuppeteerClient { [Data(Description =
"The Puppeteer client used to issue commands when this Browser is using the Puppeteer engine", Submenu =
"Engines")]
get; }
134 int ServerResponseCode { [Data(Description =
"HTTP status code of the most recent page navigation/response", Submenu =
"Browser State")]
get;
set; }
135 string SiteMapSource { [Data(Description =
"The sitemap text the last GetSiteMapUrls read", Submenu =
"Browser State")]
get; }
136 IReadOnlyList<string> ColumnNames { [Data(Description =
"The column names the last GetGrid read off the page itself, from the header row of a table it was pointed at", Submenu =
"Grids")]
get; }
137 bool UseOttoMagic { [Data(Description =
"True if this Browser is using the OttoMagic automation engine", Submenu =
"Browser State")]
get; }
138 bool UsePuppeteer { [Data(Description =
"True if this Browser is using the Puppeteer automation engine", Submenu =
"Browser State")]
get; }
139 bool UseSelenium { [Data(Description =
"True if this Browser is using the Selenium automation engine", Submenu =
"Browser State")]
get; }
140 AutomationEngine AutomationEngine { [Data(Description =
"The automation engine (OttoMagic, Puppeteer, or Selenium) used by this Browser", Submenu =
"Browser State")]
get; }
141 IRESTClient OttoMagicClient { [Data(Description =
"The client for the OttoMagic REST API this browser is running", Submenu =
"Engines")]
get; }
142 [Settings(Description =
"The hidden desktop this browser is running on, or null when it is on the visible one.")]
143 IHiddenDesktop HiddenDesktop { [Component(Description =
"The hidden desktop this browser is running on, or null when it is on the desktop you are looking at")]
get; }
144 [Scroll(Description =
"Helper method to check whether the current page is at the bottom")]
146 bool IsAlive { [Data(Description =
"Whether the browser is still running", Submenu =
"Browser State")]
get; }
148 [Action(Description =
"Remove the CallIf handler everywhere it has been set. Use this once you are done using the handler.", Submenu =
"Page")]
149 void RemoveCallIfHandlerEverywhere(CallIfDelegate func);
150 MagicHelper MagicHelper { [Data(Description =
"The MagicHelper used to issue commands when this Browser is using the OttoMagic engine", Submenu =
"Engines")]
get; }
158 [Settings(Description =
"What this desktop is called. Browsers naming the same one share it.")]
159 string Name { [Data(Description =
"What this desktop is called")]
get; }
160 [Settings(Description =
"How many visible top level windows are on it right now.")]
161 int WindowCount { [Data(Description =
"Visible top level windows on it right now")]
get; }
162 [
Browser(Description =
"Put this desktop on the screen for the default time, then put yours back.")]
164 [
Browser(Description =
"Put this desktop on the screen for this many milliseconds, then put yours back.")]
165 string Peek(
int forMs);
166 [
Browser(Description =
"Give up GPAL's handle on this desktop. Closes nothing running there.")]
168 [
Browser(Description =
"Close what is running on this desktop and then give up the handle on it.")]
169 void CloseEverything();
178 [Settings(Description =
"Every desktop made so far, in the order they were made.")]
179 IReadOnlyList<string> Names { [Data(Description =
"Every desktop made so far, in the order they were made")]
get; }
180 [Settings(Description =
"One desktop by name, so a workflow that did not keep the browser can still reach it.")]
181 IHiddenDesktop this[
string desktopName] { [Data(Description =
"One hidden desktop, by name")]
get; }
182 [Settings(Description =
"Visible top level windows across every hidden desktop added up.")]
183 int WindowCount { [Data(Description =
"Windows on every hidden desktop added up")]
get; }
184 [Settings(Description =
"True while the screen is on a hidden desktop and has not been handed back.")]
185 bool IsShowing { [Data(Description =
"True while the screen is on a hidden desktop")]
get; }
186 [
Browser(Description =
"Walk every hidden desktop that has windows, the default time each.")]
188 [
Browser(Description =
"Walk every hidden desktop that has windows, this many milliseconds each.")]
189 string Peek(
int forMsEach);
190 [
Browser(Description =
"Put one named desktop on the screen for the default time.")]
191 string Peek(
string desktopName);
192 [
Browser(Description =
"Put the screen back on the desktop a peek took it from. Safe from any thread.")]
194 [
Browser(Description =
"Give up GPAL's handles on every hidden desktop. Closes nothing running on them.")]
196 [
Browser(Description =
"Close what is running on every hidden desktop and then give up the handles.")]
197 void CloseEverything();
200 #region <BaseBrowserInterfaces>
205 public interface IAllowBrowserType { [Settings(Description =
"Set which browser type to run: Chrome (default), Edge or Firefox.", Submenu =
"Engine")]
IAllowBrowserSettingsOrGoTo WithBrowserType([BrowserType(Description =
"Chrome, Edge or Firefox")] BrowserType browserType); }
209 [Settings(Description =
"Set which engine to use to automate the browser: OttoMagic, Puppeteer (default) or Selenium.", Submenu =
"Engine")]
215 [Settings(Description =
"Set debug port to use [57005 (0xdead) default]. Specify to reconnect to a browser session using .WithExistingCDPDebugPort. If both port and pipe are set, port is preferred.", Submenu =
"Engine")]
217 [Settings(Description =
"Use debug pipe for puppeteer commmunications. If both port and pipe are set, port is preferred.", Submenu =
"Engine")]
219 [Settings(Description =
"Drive a browser whose GPALRestAPI is already running, here or on another machine, instead of launching one", Submenu =
"Engine")]
224 [Settings(Description =
"Drive a browser that is already running and listening on this remote debugging port, instead of starting one", Submenu =
"Engine")]
229 [Settings(Description =
"Load images in the page, this can affect layout and object coordinates, if that matters.", Submenu =
"Stealth")]
231 [Settings(Description =
"Scroll each scraped element into view as it is read, so the page follows the workflow. For watching a run, not for correctness. Ignored in headless. [false default]", Submenu =
"Selectors")]
233 [Settings(Description =
"Open PDF files externally, not in the browser. So, download the pdf.", Submenu =
"Downloads")]
235 [Settings(Description =
"Prompt when downloading a file? [true default/false for headless]", Submenu =
"Downloads")]
237 [Settings(Description =
"Location of the browser driver and where automatically updating the driver will occur. Default is executable directory.", Submenu =
"Engine")]
238 IAllowBrowserSettingsOrGoTo WithDriverLocation([Directory(Description =
"Location of browser driver for this instance. [./ (default)(same dir as exe)]")]
string driverPath);
239 [Settings(Description =
"Control whether popups are blocked", Submenu =
"Stealth")]
241 [Settings(Description =
"Use javascript injection to interact with an element", Submenu =
"Stealth")]
243 [Settings(Description =
"Always overwrite a file if it exists", Submenu =
"Downloads")]
245 [Settings(Description =
"Wait for browser page to finish loading", Submenu =
"Waiting")]
247 [Settings(Description =
"How long a click waits to see whether it started a navigation. [250 (default)] 0 skips the check", Submenu =
"Waiting")]
249 [Settings(Description =
"Run the browser on a Win32 desktop object of its own, headful but invisible, so the workflow does not take the screen. Hardware engines cannot reach a desktop nobody is on and step down to the protocol engine of their own family.", Submenu =
"Engine")]
251 [Settings(Description =
"Run the browser on the named Win32 desktop object. Browsers naming the same desktop share it, browsers naming different ones get one each.", Submenu =
"Engine")]
253 [Settings(Description =
"To change browser profiles, use this option to specify the data-dir path. If Directory and UserName are both defined, Directory will be used.", Submenu =
"Profile")]
255 [Settings(Description =
"To change browser profiles, use this option to specify the username whose browser data-dir to use. If Directory and UserName are both defined, Directory will be used.", Submenu =
"Profile")]
257 [Settings(Description =
"The name of the browser profile to use under the data-dir (sometime, might be same result as UserName)", Submenu =
"Profile")]
259 [Settings(Description =
"Set the browser default download directory. Can be overriden with a fully qualified filename. [path/file/]", Submenu =
"Downloads")]
261 [Settings(Description =
"Use websockets to download for Right Click and Download", Submenu =
"Downloads")]
263 [Settings(Description =
"Set the time in seconds to wait for a download to finish before giving up.", Submenu =
"Downloads")]
265 [Settings(Description =
"Set the HTTP referrer to use when navigating every subsequent Get/Goto. Use empty string to clear.", Submenu =
"Stealth")]
267 [Settings(Description =
"Set the user agent to use with any Goto or Get for the rest of the browser sessions", Submenu =
"Stealth")]
269 [Settings(Description =
"Launch a browser purely to read its real user agent. Off by default, in which case the user agent comes from WithUseUserAgent, then gpal.yaml, then the per-browser template with the installed version filled in", Submenu =
"Stealth")]
271 [Settings(Description =
"Set whether or not to obey robots.txt (false - default).", Submenu =
"Robots")]
273 [Settings(Description =
"Set whether or not to respect robot meta tags noindex/nofollow/none (false - default).", Submenu =
"Robots")]
278 [Action(Description =
"Open url in a new tab", Submenu =
"Tabs and Windows")]
280 [Action(Description =
"Open url in a new window", Submenu =
"Tabs and Windows")]
289 [Callback(Description =
"GLOBAL based callback if any selector in any UOW is found")]
291 [Callback(Description =
"GLOBAL based callback if any selector in any UOW is NOT found")]
293 [Callback(Description =
"Callback when something fails that the workflow can decide about, a navigation that never loaded a page being the case today. Falls through to GPAL.CallOnFail when this browser has none")]
295 [Settings(Description =
"Who this browser is, for a site that asks. The credential's WebAuthType decides how it is presented, and it is presented once at the first navigation", Submenu =
"Profile")]
304 [Callback(Description =
"UOW based callback if any selector in the UOW is found")]
306 [Callback(Description =
"UOW based callback if any selector in the UOW is NOT found")]
308 [Callback(Description =
"UOW based callback when a row of input is consumed and entered.\nUseful for chaining to another workflow")]
318 [
Browser(Description =
"Set the desired browser window size.", Submenu =
"Windows")]
323 [Action(Description =
"Hide the found element", Submenu =
"Element")]
345 [Action(Description =
"Directly set a DOM attribute (named by the preceding WithAttribute call) to the given value on the found element(s). Does not simulate typing and does not honor GPAL.TypingDelay.", Submenu =
"Element")]
358 [Action(Description =
"Set the value of the element(s) matched by the preceding WithSelector call from the value of the element matched by the given selector.", Submenu =
"Element")]
369 [Data(Description =
"Names the attribute to set; must be followed by .SetAttribute(value) to specify the value and complete the action.", Submenu =
"Grids")]
374 [Action(Description =
"Left click the found element.", Submenu =
"Clicks")]
376 [Action(Description =
"Left click the found element.", Submenu =
"Clicks")]
378 [Action(Description =
"M iddle click the found element.", Submenu =
"Clicks")]
380 [Action(Description =
"Left click the found select menu element.", Submenu =
"Clicks")]
382 [Action(Description =
"Stealth (Runtime.disable before) Left click the found element.", Submenu =
"Clicks")]
384 [Action(Description =
"Left click the found element, pressing modifier key (none [default]) while clicking.", Submenu =
"Clicks")]
386 [Action(Description =
"Left click the found element, handling a download dialog after clicking.", Submenu =
"Files")]
388 [Action(Description =
"Left click the found element, handling an upload dialog after clicking.", Submenu =
"Files")]
390 [Action(Description =
"Left double click the found element, pressing modifier key (none [default]) while clicking.", Submenu =
"Clicks")]
392 [Action(Description =
"Right click the found element, pressing modifier key (none [default]) while clicking.", Submenu =
"Clicks")]
399 [Action(Description =
"Save the element (if WithSelector is specified) or page to the GPALFile.", Submenu =
"Files")]
404 [Wait(Description =
"After an action is called (ie, LeftClick), wait for a window to open with this name (title)")]
406 [Wait(Description =
"After an action is called (ie, LeftClick), wait for a window to open which name (title) matches the regular expression")]
408 [Wait(Description =
"The time in seconds to wait for a window to appear before giving up")]
414 [Data(Description =
"Send the specified string using the selector interaction type (selenium/javascript/hardware)", Submenu =
"Keyboard")]
416 [Data(Description =
"Send a control character specified by the VKCode (GPAL has some defined)", Submenu =
"Keyboard")]
418 [Data(Description =
"Press the modifier key specified (Control/Shift/Alt). NOTE: Be careful with Shift and sending mixed case strings after pressing Shift. Mixed case strings will release the Shift key.", Submenu =
"Keyboard")]
420 [Data(Description =
"Release the modifier key specified (Control/Shift/Alt) as previously pressed.", Submenu =
"Keyboard")]
423 [Data(Description =
"Fill in [overwrite] text from a string", Submenu =
"Fill In")]
425 [Data(Description =
"Append to the end text from a string", Submenu =
"Fill In")]
427 [Data(Description =
"Insert text (wherever the cursor is) from a string", Submenu =
"Fill In")]
430 [Data(Description =
"Fill in [overwrite] text from a file. CSV values per line takenized for each input selector", Submenu =
"Fill In")]
432 [Data(Description =
"Append to the end text from a file. CSV values per line takenized for each input selector", Submenu =
"Fill In")]
434 [Data(Description =
"Insert text (wherever the cursor is) from a file. CSV values per line takenized for each input selector", Submenu =
"Fill In")]
437 [Data(Description =
"Fill in [overwrite] text from a database query. Tokenized by each column per input per row", Submenu =
"Fill In")]
439 [Data(Description =
"Append to the end text from a database query. Tokenized by each column per input per row", Submenu =
"Fill In")]
441 [Data(Description =
"Insert text (wherever the cursor is) from a database query. Tokenized by each column per input per row", Submenu =
"Fill In")]
443 [Data(Description =
"Fill in [overwrite] text from a data grid. Tokenized List<List<string>> each string per input per list entry", Submenu =
"Fill In")]
445 [Data(Description =
"Append to the end text from a data grid. Tokenized List<List<string>> each string per input per list entry", Submenu =
"Fill In")]
447 [Data(Description =
"Insert text (wherever the cursor is) from a data grid. Tokenized List<List<string>> each string per input per list entry", Submenu =
"Fill In")]
449 [Data(Description =
"Set the value of an input range element", Submenu =
"Keyboard")]
454 [
Browser(Description =
"Close the current tab [no URL], or the tab with URL", Submenu =
"Tabs")]
458 [
Browser(Description =
"Go to tab with URL", Submenu =
"Tabs")]
463 [
Selector(Description =
"Subsequent withselector searches are for elements nested under this element. Nesting is possible.")]
465 [
Selector(Description =
"Subsequent withselector searches are for elements nested under this iframe. Nesting is possible.")]
473 [
Selector(Description =
"Subsequent selector are for elements in a shadowdom specified by the shadowdom selector. Nesting is possible.")]
475 [
Selector(Description =
"Reset back to the top level dom document for finding elements")]
480 [Action(Description =
"Scroll the specified web element n pixels horizontally", Submenu =
"Element")]
482 [Action(Description =
"Scroll the specified web element n pixels vertically", Submenu =
"Element")]
487 [
Browser(Description =
"Scroll the browser window horizontally by scrollAmount pixels", Submenu =
"Scrolling")]
489 [
Browser(Description =
"Scroll the browser window veritcally by scrollAmount pixels", Submenu =
"Scrolling")]
494 [
Browser(Description =
"Close the current window [no URL], or the window with URL", Submenu =
"Windows")]
498 [
Browser(Description =
"Go to window with URL", Submenu =
"Windows")]
513 [
Browser(Description =
"Execute the supplied javascript in the browser and return an integer in browser.JavaScriptResultObj", Submenu =
"Scripts")]
515 [
Browser(Description =
"Execute the supplied javascript in the browser and return an integer in browser.JavaScriptResultStr", Submenu =
"Scripts")]
520 [
Browser(Description =
"Answer the alert, confirm and prompt dialogs the page raises, instead of letting them open and block. True accepts (OK, and confirm returns true), false dismisses (Cancel, and confirm returns false). Set it before the browser launches.", Submenu =
"Dialogs")]
522 [
Browser(Description =
"What a prompt hands back when dialogs are accepted. Not available on Selenium, where the driver answers the dialog itself.", Submenu =
"Dialogs")]
524 [
Browser(Description =
"Stop answering dialogs, so they open and block again. Different from WithDialogsAccepted(false), which answers Cancel.", Submenu =
"Dialogs")]
529 [
Browser(Description =
"Where this browser's window is and how big it is, in screen coordinates, chrome included. Answered by whichever engine is driving, so a workflow does not have to know which one that is.", Submenu =
"Windows")]
534 [
Browser(Description =
"Inject a script (raw JS string, or GPALFile - if multiple files are specified, all are loaded and injected as separate scripts) to run on every new document load. Callable before the first .GoTo()/.Get() (active from the first page load) or at any later point (applies to subsequent navigations). Persists until .ClearInjectedScripts() is called.", Submenu =
"Scripts")]
536 [
Browser(Description =
"Inject script(s) loaded from a GPALFile - if multiple filenames are specified (e.g. via wildcard), all are loaded and injected as separate scripts.", Submenu =
"Scripts")]
538 [
Browser(Description =
"Remove all scripts previously registered via InjectScript.", Submenu =
"Scripts")]
543 [Settings(Description =
"Wait for browser network activity to idles. Defauilt is 0 connections.", Submenu =
"Waiting")]
545 [Settings(Description =
"Timeout to wait for network idle = true. Defauilt is 500 ms.", Submenu =
"Waiting")]
547 [Settings(Description =
"Timeout to wait for network idle = true. Defauilt is 500 ms.", Submenu =
"Waiting")]
549 [Settings(Description =
"Duration to maintain network stats before pruning old data. Default is 10 seconds (10_000 ms).", Submenu =
"Waiting")]
553 #endregion <BaseInterfaces>
556 public interface IAllowToGPALObject<TResult>
558 [Fluent(Description =
"Ends a declaration or workflow, returning a GPAL object which can be assigned. Use instead of an explicit cast. [ Selector mySel = GPAL.Selector.WithCSS(css).ToGPALObject() ]")]
559 TResult ToGPALObject();
566 [
Selector(Description =
"Add literal data to a grid by invoking this function when using .GetGrid")]
IAllowAfterAnySelector WithSelector(Func<string> dataFunction);
570 [Action(
"Get the current page source", Submenu =
"Page")]
572 [Action(
"Carry on without the browser: hand back a RESTClient holding this browser's origin, cookies, user agent, accept language and credential", Submenu =
"Calls")]
574 [Action(
"Get the raw sitemap XML", Submenu =
"Page")]
576 [Action(
"Get the sitemap URLs as a List<string>")]
578 [Action(
"Save the sitemap URLs to a file, format chosen by the file extension", Submenu =
"Page")]
580 [Action(
"Clear cached sitemap / LLM digest / hydration results, forcing the next Get/Save to refetch", Submenu =
"Page")]
582 [Action(
"Get the current page source as an LLM digest")]
584 [Action(
"Save to file, the current page source as an LLM digest")]
586 [Action(
"Get the current page next.js hydrated data", Submenu =
"Page")]
588 [Action(
"Save to file, the current page next.js hydrated data", Submenu =
"Page")]
593 [Action(
"Run the get storage actions for storageType", Submenu =
"Calls")]
595 [Action(
"Run the set storage actions for storageType", Submenu =
"Calls")]
597 [Action(
"Run the delete storage actions for storageType", Submenu =
"Calls")]
602 [
Browser(Description =
"The domain for the storage action", Submenu =
"Storage")]
604 [
Browser(Description =
"The path for the storage action", Submenu =
"Storage")]
606 [
Browser(Description =
"The key for the storage action", Submenu =
"Storage")]
608 [
Browser(Description =
"The store name for the indexedDb action", Submenu =
"Storage")]
610 [
Browser(Description =
"The user defined filter to help select wildcard storage actions", Submenu =
"Storage")]
617 public interface IAllowGet { [
Browser(Description =
"Navigate to the URL headless, launching a headless browser when none is open. Same navigation as GoTo, with the headless download options set first", Submenu =
"Navigation")]
IAllowBrowserActionOrAnySelector Get([URL()]
GPALUrl URL); }
618 public interface IAllowClose { [
Browser(Description =
"Close the current browser session. True [default] to kill web drivers running.", Submenu =
"Navigation")]
void Close(
bool killWebDrivers =
false); }
627 [Data(Description =
"Values .Fetch drops into its request's numbered tokens, one row per set of requests. Column 0 fills {0}, column 1 fills {1}, and so on", Submenu =
"Fill In")]
629 [Data(Description =
"Values .Fetch drops into its request's numbered tokens, from a file. CSV values per line, one line per set of requests", Submenu =
"Fill In")]
631 [Data(Description =
"Values .Fetch drops into its request's numbered tokens, from a database query. One column per token, one row per set of requests", Submenu =
"Fill In")]
633 [Data(Description =
"Values .Fetch drops into its request's numbered tokens, as a single row of comma separated values", Submenu =
"Fill In")]
636 public interface IAllowGetGrid { [Data(Description =
"Retrieve data and add it into this GPALGrid. Pass a grid configured with .WithDedupeData(true) to skip duplicate rows. GPAL keeps one internally for a workflow if you pass null.", Submenu =
"Grids")]
IAllowWithHeaderOrFileActions GetGrid(ref IGPALGrid<string> returnGrid); }
637 public interface IAllowGetElements { [Data(Description =
"Find elements for all selectors in this UOW and return them as a unified List<GPALElement>. Results are also available per-selector via selector.WebSelectorFoundResults.", Submenu =
"Grids")]
IAllowBrowserActionOrAnySelector GetElements(out List<GPALElement> elements); }
638 public interface IAllowWithHeader { [Data(Description =
"Column header for exported data. If a selector is not given a new (.WithName), use this. Or use this instead of the name when used on a Selector.", Submenu =
"Grids")]
IAllowWithHeaderOrFileActions WithHeader(
string header); }
639 public interface IAllowWithAllThatMatch { [Data(Description =
"How many items per page to retrieve OR total items to retrieve. Defaults to int.MaxValue, get all items that match. If less than returns on a page, retrieve only rowCount, rows of results per page. If greater than the number of results on a page, this is the total number of results to return.", Submenu =
"Grids")]
IAllowAfterAnySelectorExceptWithAll WithAllThatMatch(
int rowCount =
int.MaxValue); }
644 [Wait(Description =
"IF after an action is called, this is a sleep timer. If used after adding selectors (.WithSelector) [before calling an action], this is the time to wait to find elements for .WithSelectors before continuing the workflow (can cause to invoke CallIfNotFound handler)")]
646 [Wait(Description =
"Wait for the Selector before proceeding with the workflow. Use WaitFor(timeInMs) or use the default of three [3] seconds. Similar to .WithSelector.WaitFor.Action (can cause to invoke CallIfNotFound handler)")]
648 [Wait(Description =
"Wait for the element(s) defined using .WithSelector to enter the specified state.")]
652 public interface IAllowStartWorkflow { [Fluent(Description =
"Start the workflow if no action is used to start the workflow. Perhaps your logic is in the CallIf handlers, so this will kick off finding the selector elements, thus calling Found/NotFound handlers")]
IAllowBrowserActionOrAnySelector StartWorkflow(); }
655 [Fluent(Description =
"Perform a drag-and-drop operation. OffsetX/Y is the grab point, DeltaX/DeltaY is the drop offset. Uses native drag events for the current automation engine (Selenium Actions, CDP mouse events, or OttoMagic in-page events); falls back to smoothed hardware mouse emulation for image-matched/remote-desktop elements")]
657 [Fluent(Description =
"Perform a drag-and-drop operation while pressing a modifier key. OffsetX/Y is the grab point, DeltaX/DeltaY is the drop offset. Uses native drag events for the current automation engine (Selenium Actions, CDP mouse events, or OttoMagic in-page events); falls back to smoothed hardware mouse emulation for image-matched/remote-desktop elements")]
662 [Fluent(Description =
"Print each element named by .WithSelector to a PDF of its own, or the page when no selector is set. Each file comes from GPALFile.Next")]
664 [Fluent(Description =
"Print orientation for PrintToPDF - use before calling PrintToPDF")]
669 [Fluent(Description =
"Cast the current tab to the specified device")]
671 [Fluent(Description =
"Cast the desktop to the specified device")]
673 [Fluent(Description =
"Stop casting to device")]
678 #region <DerivedInterfaces>
719 [Action(Description =
"Wait for the page to make a matching call and hand it back as a request ready to issue", Submenu =
"Calls")]
730 , IAllowToGPALObject<IBrowser>
752 [Fluent(Description =
"Issue an API request from inside the page, so it carries the session the browser already earned: its cookies, TLS fingerprint, header order and any anti-bot clearance. Honors .WithPages and .WithTokensFrom. The response bodies are handed back with .SaveTo(ref string)")]
754 [Action(Description =
"Record what the page asks for, so an endpoint can be read off a site", Submenu =
"Calls")]
756 [Action(Description =
"Record what the page asks for and hand back everything recorded so far", Submenu =
"Calls")]
758 [Action(Description =
"Forget everything recorded so far, so what comes next is what happens next", Submenu =
"Calls")]
760 [Settings(Description =
"Only record calls whose url holds this", Submenu =
"Calls")]
796 , IAllowToGPALObject<IBrowser>
826 , IAllowToGPALObject<IBrowser>
867 #endregion <DerivedInterfaces>
868 #region Workflow Interfaces
871 [Workflow(Description =
"Runs the workflows added to this browser, in the order they were added.")]
876 [Workflow(Description =
"Executes the workflow while the predicate returns true.")]
879 [Workflow(Description =
"Executes the workflow until the specified selector finds at least one element.")]
882 [Workflow(Description =
"Executes the workflow until the predicate returns true.")]
885 [Workflow(Description =
"Sets the timeout in milliseconds for While or Until loops.")]
888 [Workflow(Description =
"Sets the maximum number of iterations for While or Until loops.")]
893 [Workflow(Description =
"Adds a workflow to be scheduled. It builds and owns whatever it drives.")]
898 [Settings(Description =
"How many workflows may be in flight at once. One, the default, runs them one after another.")]
900 [Settings(Description =
"The least time between two workflows starting. [250ms (default)] 0 starts them together.")]
902 [Settings(Description =
"How long to wait for them all before giving up and reporting the unfinished ones as failed. [no limit (default)]")]
904 [Workflow(Description =
"Runs every workflow added and waits for them all.")]
906 [Workflow(Description =
"Runs every workflow added and hands back what happened to each.")]
911 [Workflow(Description =
"Defines a workflow to be executed repeatedly based on While or Until conditions.")]
914 #endregion Workflow Interfaces
915 #endregion <BrowserInterfaces>
916 #region <Element Assistant Interfaces>
923 [Action(Description =
"Left click the specified element, pressing modifier key (none [default]) while clicking.")]
925 [Action(Description =
"Left click the specified element.")]
927 [Action(Description =
"Left click the specified element, pressing modifier key (none [default]) while clicking.")]
929 [Action(Description =
"Left double click the specified element, pressing modifier key (none [default]) while clicking.")]
931 [Action(Description =
"M iddle click the found element.")]
933 [Action(Description =
"Right click the specified element, pressing modifier key (none [default]) while clicking.")]
935 [Data(Description =
"Fill in [overwrite] text from a string")]
937 [Data(Description =
"Insert text (wherever the cursor is) from a string")]
939 [Data(Description =
"Append to the end text from a string")]
941 [Data(Description =
"Send a control character specified by the VKCode (GPAL has some defined)")]
943 [Data(Description =
"Send the specified string using the selector interaction type (selenium/javascript/hardware)")]
945 [Data(Description =
"Press the modifier key specified (Control/Shift/Alt). NOTE: Be careful with Shift and sending mixed case strings after pressing Shift. Mixed case strings will release the Shift key.")]
947 [Data(Description =
"Release the modifier key specified (Control/Shift/Alt) as previously pressed.")]
949 [Action(Description =
"Scroll the specified element n pixels horizontally")]
951 [Action(Description =
"Scroll the specified element n pixels vertically")]
956 [ElementAssitant(Description =
"Declare the element to interact with using the ElementAssistant")]
962 #endregion <\Element Interfaces>
963 #region <File Interface>
968 [File(Description =
"Save the retrieved grid. Output format and delimiter are determined by the GPALFile (its extension, or explicit file settings).")]
970 [File(Description =
"Append the retrieved grid. Output format and delimiter are determined by the GPALFile (its extension, or explicit file settings).")]
972 [File(Description =
"Hand back what .Fetch retrieved, as a JSON array holding one response body per page requested.")]
976 #region Graphics Interface
979 [
GPAL(Description =
"Capture a screenshot")]
986 [
GPAL(Description =
"Save to BASE64 string")]
988 [Data(Description =
"Returns the last captured screenshot as a Bitmap")]
990 [File(Description =
"Save to file (overwrite)")]
998 #endregion Graphics Interface
1004 [
Browser(Description =
"Navigates browser history back", Submenu =
"Navigation")]
1006 [Action(Description =
"A screenshot of the visible part of the tab", Submenu =
"Page")]
1007 string CaptureVisibleTab();
1008 string CheckNetworkIdle(
int? maxConnections =
null,
int? timeoutMs =
null,
int? pruneMs =
null);
1009 [
Browser(Description =
"Closes a tab by URL or tab ID", Submenu =
"Tabs")]
1010 TabTuple CloseTab(dynamic URLorTabId =
null);
1011 bool DeleteStorage(WebsiteStorageType storageType,
bool deleteAcrossOrigins =
false,
string domain =
null,
string path =
null,
string key =
null,
string storeName =
null);
1012 [
Browser(Description =
"Navigates browser history forward", Submenu =
"Navigation")]
1014 [
Browser(Description =
"Sets browser to full screen", Submenu =
"Windows")]
1016 [
Browser(Description =
"Navigates to a URL", Submenu =
"Navigation")]
1018 [Data(Description =
"Gets content and CSS for a elementId", Submenu =
"Element")]
1019 string GetContentAndCss(
string elementId);
1020 [Data(Description =
"The computed styles of the element", Submenu =
"Element")]
1021 Dictionary<string, object> GetCssAttributes(
string elementId);
1022 [Data(Description =
"The attributes of the element", Submenu =
"Element")]
1023 Dictionary<string, object> GetDomAttributes(
string elementId);
1024 [Data(Description =
"The DOM properties of the element", Submenu =
"Element")]
1025 Dictionary<string, object> GetDomProperties(
string elementId);
1026 [
Browser(Description =
"Gets the current URL", Submenu =
"Navigation")]
1027 string GetCurrentUrl();
1028 [Data(Description =
"Gets the ready status NOTE: if no page is loaded, this will return null cause there is no content script", Submenu =
"Page")]
1029 string GetReadyStatus();
1030 [Data(Description =
"Gets the shadow root for an elementId", Submenu =
"Find Elements")]
1032 string GetStorage(WebsiteStorageType storageType,
string domain =
null,
string path =
null,
string key =
null,
string storeName =
null);
1033 [
Browser(Description =
"Navigates to a URL", Submenu =
"Navigation")]
1035 [Action(Description =
"Navigates to a tab by URL or tab ID", Submenu =
"Tabs and Windows")]
1036 TabTuple GotoTab(dynamic URLorTabId);
1037 [
Browser(Description =
"Returns the browser window inner/outer height/widge { y: window.innerHeight, x: window.width, height: window.outerHeight, width: window.outerWidth }", Submenu =
"Windows")]
1038 System.Drawing.Rectangle GetWindowRectangle();
1039 [
Browser(Description =
"Switches context to an element NOTE: InFrame and InElement are identical in implementation", Submenu =
"Frames")]
1040 void SwitchToElement(
string elementId);
1041 [Settings(Description =
"Switches context to iframe NOTE: InFrame and InElement are identical in implementation")]
1042 void InFrame(
string elementId);
1043 [
Browser(Description =
"Minimizes the browser window", Submenu =
"Windows")]
1045 [
Browser(Description =
"Maximizes the browser window", Submenu =
"Windows")]
1047 [Action(Description =
"Scrolls an element into view by ID", Submenu =
"Mouse")]
1048 void MoveTo(
string elementiId);
1049 [
Browser(Description =
"Restores the browser window to normal", Submenu =
"Windows")]
1051 [Action(Description =
"Opens a new tab with optional URL", Submenu =
"Tabs and Windows")]
1053 [
Browser(Description =
"Switches to the next tab", Submenu =
"Tabs")]
1055 [
Browser(Description =
"How many tabs the browser actually has open, which is not the same as how many GPAL opened", Submenu =
"Tabs")]
1057 [Action(Description =
"Overrides the referrer URL", Submenu =
"Referrer and User Agent")]
1058 void OverrideReferrer(
string referrer);
1059 [Action(Description =
"Overrides the browser's user agent string", Submenu =
"Referrer and User Agent")]
1060 void SetUserAgent(
string userAgent);
1061 [Scroll(Description =
"Scrolls the page down")]
1063 [Scroll(Description =
"Scrolls to the page end")]
1065 [Scroll(Description =
"Scrolls to the page top")]
1067 [Scroll(Description =
"Scrolls the page up")]
1069 [Data(Description =
"Press the specified modifier keys", Submenu =
"Keyboard")]
1070 void PressModifierKey(ModifierKeys modifierKeys);
1071 [
Browser(Description =
"Switches to the previous tab", Submenu =
"Tabs")]
1073 [
Browser(Description =
"Refreshes the current page", Submenu =
"Navigation")]
1075 [Data(Description =
"Press the specified modifier keys", Submenu =
"Keyboard")]
1076 void ReleaseModifierKey(ModifierKeys modifierKeys);
1077 [
Browser(Description =
"Restores the browser window", Submenu =
"Windows")]
1079 [
Browser(Description =
"Scrolls the window horizontally by pixels", Submenu =
"Scrolling")]
1080 void ScrollWindowHorizontal(
int pixels);
1081 [
Browser(Description =
"Scrolls the window vertically by pixels", Submenu =
"Scrolling")]
1082 void ScrollWindowVertical(
int pixels);
1083 void SetRange(
string elementId,
int rangeValue);
1084 bool SetStorage(WebsiteStorageType storageType,
string data,
string domain =
null,
string path =
null,
string key =
null,
string storeName =
null);
1085 [Action(Description =
"Overrides referrer stealthily", Submenu =
"Referrer and User Agent")]
1086 void SetGoogleReferrer();
1087 [Settings(Description =
"Names the file the next download should land under")]
1088 void WithDownloadFile(
string downloadPath);
1089 [Action(Description =
"Focuses an element by ID", Submenu =
"Mouse")]
1090 void Focus(
string elementId);
1091 [Action(Description =
"Fires a change event on an element by ID", Submenu =
"Input")]
1092 void FireChangeEvent(
string elementId);
1093 [Scroll(Description =
"Scrolls an element into view by ID")]
1094 void ScrollIntoView(
string elementId);
1095 void ScrollElement(
string elementId,
int hPixels,
int vPixels);
1096 [Data(Description =
"Gets the attribute hash of an element", Submenu =
"Element")]
1097 string GetElementAttributeHash(
string elementId);
1098 [Action(Description =
"Get the html source of the current page", Submenu =
"Page")]
1099 string GetPageSource();
1100 [Data(Description =
"Gets the parent node of an element by ID", Submenu =
"Find Elements")]
1102 string GetAttribute(
string elementId,
string attribute);
1103 void SetAttribute(
string elementId,
string attribute,
string value);
1104 void SetValueFromElement(
string srcSelector,
string destElementId);
1105 [Action(Description =
"Performs a left click on an element by ID", Submenu =
"Clicks")]
1106 void LeftClick(
string elementId);
1107 [Action(Description =
"Performs a left double click on an element by ID", Submenu =
"Clicks")]
1108 void LeftDoubleClick(
string elementId);
1109 [Action(Description =
"Performs a left click on an element by ID", Submenu =
"Clicks")]
1110 void MiddleClick(
string elementId);
1111 [Action(Description =
"Performs a right click on an element by ID", Submenu =
"Clicks")]
1112 void RightClick(
string elementId);
1113 void SelectClick(
string elementId, dynamic indexOrValue);
1114 [Data(Description =
"Checks if an element is visible in viewport by ID", Submenu =
"Element")]
1115 bool IsVisibleInViewport(
string elementId);
1116 [Scroll(Description =
"Checks if the page is at the end")]
1118 [Action(Description =
"Hovers over an element by ID", Submenu =
"Mouse")]
1119 void Hover(
string elementId);
1120 void DragAndDrop(
string elementId,
int deltaX,
int deltaY,
int offsetX = 0,
int offsetY = 0);
1121 [Data(Description =
"Gets the window inner height", Submenu =
"Window")]
1122 int WindowInnerHeight();
1123 [Data(Description =
"Gets the window inner width", Submenu =
"Window")]
1124 int WindowInnerWidth();
1125 [Data(Description =
"Gets the window outer height", Submenu =
"Window")]
1126 int WindowOuterHeight();
1127 [Data(Description =
"Gets the window outer width", Submenu =
"Window")]
1128 int WindowOuterWidth();
1129 string Fetch(
string url,
string method =
null,
string body =
null,
string contentType =
null,
string[] headers =
null,
bool asBytes =
false);
1130 [Data(Description =
"Gets the window page offset X", Submenu =
"Window")]
1131 int WindowPageOffsetX();
1132 [Data(Description =
"Gets the window page offset Y", Submenu =
"Window")]
1133 int WindowPageOffsetY();
1134 [Data(Description =
"Where the element is in the viewport, and its size", Submenu =
"Element")]
1135 System.Drawing.Rectangle GetBoundingClientRect(
string elementId);
1136 [Action(Description =
"Hides an element by ID", Submenu =
"Input")]
1137 void HideElement(
string elementId);
1138 [
Browser(Description =
"Registers a script to run on every new document load", Submenu =
"Scripts")]
1139 void InjectScript(
string script);
1140 [
Browser(Description =
"Removes all scripts previously registered via InjectScript", Submenu =
"Scripts")]
1141 void ClearInjectedScripts();
1142 [Data(Description =
"Whether the element can be clicked", Submenu =
"Element")]
1143 bool IsClickAble(
string elementId);
1144 [Action(Description =
"Clears the referrer header", Submenu =
"Referrer and User Agent")]
1145 void ClearReferrer();
1146 [Data(Description =
"Evaluates an XPath expression to locate a single element", Submenu =
"Find Elements")]
1148 [Data(Description =
"Evaluates an XPath expression to locate multiple elements", Submenu =
"Find Elements")]
1149 List<GPALElement> EvaluateAll(
string xpath);
1150 [Data(Description =
"Evaluates an XPath expression to locate a single element", Submenu =
"Find Elements")]
1152 [Data(Description =
"Evaluates an XPath expression to locate multiple elements", Submenu =
"Find Elements")]
1153 List<GPALElement> EvaluateAllPersistent(
string xpath);
1154 [Data(Description =
"Gets the browser's preferred languages, most preferred first", Submenu =
"Page")]
1155 string GetLanguages();
1156 [Data(Description =
"Gets the user agent", Submenu =
"Page")]
1157 string GetUserAgent();
1158 [Data(Description =
"Get select menu option items", Submenu =
"Element")]
1159 List<GPALElement> GetOptions(
string elementId);
1160 void FillInAppend(
string elementId,
string text);
1161 void FillInInsert(
string elementId,
string text);
1162 void FillInOverwrite(
string elementId,
string text);
1163 void LeftClickAndDownload(
string elementId,
string filenameAndPath);
1164 void LeftClickAndUpload(
string elementId,
string filenameAndPath);
1165 void LeftClickAndUpload(
string elementId,
GPALFile filenamesAndPaths);
1166 [Data(Description =
"Queries a single element using a CSS selector", Submenu =
"Find Elements")]
1168 [Data(Description =
"Queries multiple elements using a CSS selector", Submenu =
"Find Elements")]
1169 List<GPALElement> QueryPersistentSelectors(
string css);
1170 [Data(Description =
"Queries a single element using a CSS selector", Submenu =
"Find Elements")]
1172 [Data(Description =
"Queries multiple elements using a CSS selector", Submenu =
"Find Elements")]
1173 List<GPALElement> QuerySelectors(
string css);
1174 void ScrollWindow(
int hPixels,
int vPixels);
1175 [Data(Description =
"Sends a single key", Submenu =
"Keyboard")]
1176 void SendKey(
byte vkcode);
1177 void SendString(
string text,
int delayMs = 0);
1178 [
Browser(Description =
"Switches to the default content", Submenu =
"Frames")]
1179 void SwitchToDefaultContent();
1181 [
Browser(Description =
"Switches to a shadow root by element ID", Submenu =
"Frames")]
1182 void SwitchToShadowRoot(
string elementId);
1183 [Data(Description =
"Gets browser settings", Submenu =
"Recorder")]
1184 string GetBrowserSettings();
1185 [Data(Description =
"Gets GPAL settings", Submenu =
"Recorder")]
1186 string GetGpalSettings();
1187 [Data(Description =
"Gets general settings", Submenu =
"Recorder")]
1188 string GetSettings();
1189 [Data(Description =
"Gets the workflow", Submenu =
"Recorder")]
1190 string GetWorkflow();
1192 [
Browser(Description =
"Brings the browser window to the top", Submenu =
"Windows")]
1193 bool TopBrowser(Process process);
1194 [Action(Description =
"Open a new window on the url", Submenu =
"Tabs and Windows")]
1196 [
Browser(Description =
"Switch to a window", Submenu =
"Windows")]
1198 [
Browser(Description =
"Close a window", Submenu =
"Windows")]
1200 [
Browser(Description =
"Move to the next window (to the right)", Submenu =
"Windows")]
1202 [
Browser(Description =
"Move to the previous window (to the left)", Submenu =
"Windows")]
1204 [
Browser(Description =
"The window the browser is on", Submenu =
"Windows")]
1206 [Data(Description =
"Gets the window screen left position", Submenu =
"Window")]
1207 int WindowScreenLeft();
1208 [Data(Description =
"Gets the window screen top position", Submenu =
"Window")]
1209 int WindowScreenTop();
1211 #endregion MagicHelper
1212 #region Google Sheets
1215 [Settings(Description =
"The spreadsheet to work on, by name or id")]
1221 [Settings(Description =
"The sheet to work on, by name or id")]
1223 [Action(Description =
"The names of the sheets in the spreadsheet")]
1225 [Action(Description =
"Rename the spreadsheet")]
1231 [Action(Description =
"Rename the sheet")]
1233 [Settings(Description =
"The range to read, such as A1:C10")]
1235 [Settings(Description =
"The rows to write")]
1237 [Settings(Description =
"What kind of formatting to apply")]
1243 [Action(Description =
"Add the data to the end of what the cell holds")]
1245 [Action(Description =
"Add the data to the start of what the cell holds")]
1247 [Settings(Description =
"The range to write to, such as A1:C10")]
1249 [Action(Description =
"The sum of the range")]
1251 [Action(Description =
"How many cells in the range hold a value")]
1257 [Action(Description =
"Delete the sheet")]
1259 [Action(Description =
"Write the data to the sheet")]
1265 [Settings(Description =
"Where in the cell text to insert")]
1267 [Settings(Description =
"Text to put between what is inserted and what was there")]
1269 [Action(Description =
"Insert the data into the cell")]
1275 [Settings(Description =
"The value for the chosen format")]
1277 [Settings(Description =
"How the text is aligned")]
1279 [Settings(Description =
"How the text is aligned")]
1281 [Settings(Description =
"How numbers are shown")]
1283 [Settings(Description =
"How far the text is turned")]
1285 [Settings(Description =
"The color to apply")]
1290 [Action(Description =
"Apply the format to the range")]
1295 [Settings(Description =
"The Apps Script function the trigger runs")]
1301 [Settings(Description =
"How often a time trigger runs")]
1303 [Action(Description =
"Create the trigger")]
1308 [Settings(Description =
"The Apps Script project to work on")]
1310 [Settings(Description =
"The name of the script file in the project")]
1312 [Settings(Description =
"Who may call the web app")]
1314 [Settings(Description =
"Whose account the web app runs as")]
1316 [Settings(Description =
"The description of the deployment")]
1320 [Action(Description =
"Upload the script to the project")]
1322 [Action(Description =
"Upload the script to the project")]
1327 [Action(Description =
"Deploy the uploaded script as a web app and hand back its url")]
1332 [Action(Description =
"Save what was read")]
1334 [Action(Description =
"Save what was read")]
1340 [Settings(Description =
"The Google account to use Sheets as")]
1342 [Settings(Description =
"Drive sheets through an Apps Script web app deployed by hand, instead of the Sheets API. Takes the deployment url and needs no credentials.")]
1345 #endregion Google Sheets
1346 #region PuppeteerClient / based entirely on restclient
1352 [Settings(Description =
"Sets the PuppeteerCommunicator used to send commands to the puppeteer/CDP server", Submenu =
"Request")]
1357 [Settings(Description =
"Sets a custom endpoint path to call directly, bypassing the built-in ApiEndpoint enum", Submenu =
"Request")]
1359 [Settings(Description =
"Sets the endpoint to call, resolved from the given ApiEndpoint value", Submenu =
"Request")]
1361 [Settings(Description =
"Sets the name under which this execution's result will be stored, for later retrieval via the WithXFromResult methods", Submenu =
"Request")]
1363 [Settings(Description =
"Save the result to this file", Submenu =
"Request")]
1365 [Settings(Description =
"Sets the display name for this client", Submenu =
"Request")]
1371 [Settings(Description =
"Sets the url parameter for the request", Submenu =
"Navigation")]
1373 [Data(Description =
"Sets the url parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1375 [Data(Description =
"Sets the url parameter from the named result of a previous execution", Submenu =
"From Result")]
1377 [Settings(Description =
"Sets the tab id parameter for the request", Submenu =
"Navigation")]
1379 [Data(Description =
"Sets the tab id parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1381 [Data(Description =
"Sets the tab id parameter from the named result of a previous execution", Submenu =
"From Result")]
1383 [Settings(Description =
"Sets the window id parameter for the request", Submenu =
"Navigation")]
1385 [Data(Description =
"Sets the window id parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1387 [Data(Description =
"Sets the window id parameter from the named result of a previous execution", Submenu =
"From Result")]
1389 [Settings(Description =
"Sets the key parameter for the request", Submenu =
"Storage")]
1391 [Data(Description =
"Sets the key parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1393 [Data(Description =
"Sets the key parameter from the named result of a previous execution", Submenu =
"From Result")]
1395 [Settings(Description =
"Sets the css selector parameter for the request", Submenu =
"Element")]
1397 [Data(Description =
"Sets the css selector parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1399 [Data(Description =
"Sets the css selector parameter from the named result of a previous execution", Submenu =
"From Result")]
1401 [Settings(Description =
"Sets the gpalElements parameter, identifying the elements the request should act on", Submenu =
"Element")]
1403 [Data(Description =
"Sets the elementId parameter from the result at the given index of a previous execution, then calls WithElementId", Submenu =
"From Result")]
1405 [Data(Description =
"Sets the elementId parameter from the named result of a previous execution, then calls WithElementId", Submenu =
"From Result")]
1407 [Settings(Description =
"Sets the xpath parameter for the request", Submenu =
"Element")]
1409 [Data(Description =
"Sets the xpath parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1411 [Data(Description =
"Sets the xpath parameter from the named result of a previous execution", Submenu =
"From Result")]
1413 [Settings(Description =
"Sets the pixels parameter for the request", Submenu =
"Drag and Scroll")]
1415 [Data(Description =
"Sets the pixels parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1417 [Data(Description =
"Sets the pixels parameter from the named result of a previous execution", Submenu =
"From Result")]
1419 [Settings(Description =
"Sets the referrer parameter for the request", Submenu =
"Navigation")]
1421 [Data(Description =
"Sets the referrer parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1423 [Data(Description =
"Sets the referrer parameter from the named result of a previous execution", Submenu =
"From Result")]
1425 [Settings(Description =
"Sets the text parameter for the request", Submenu =
"Element")]
1427 [Data(Description =
"Sets the text parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1429 [Data(Description =
"Sets the text parameter from the named result of a previous execution", Submenu =
"From Result")]
1431 [Action(Description =
"Where a file the browser downloads should end up")]
1433 [Action(Description =
"Sets the upload path parameter(s) so a subsequent action uploads the given file(s)")]
1435 [Settings(Description =
"Sets the elementId parameter for the request, resolving CSS selectors to an element handle if needed", Submenu =
"Element")]
1437 [Data(Description =
"Sets the elementId parameter from the result at the given index of a previous execution, then calls WithElementId", Submenu =
"From Result")]
1439 [Data(Description =
"Sets the elementId parameter from the named result of a previous execution, then calls WithElementId", Submenu =
"From Result")]
1441 [Action(Description =
"Sets the value of the destination element identified by destSelector from the source element identified by the preceding WithCss or WithElementId call")]
1443 [Data(Description =
"Sets the horizontal pixels parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1445 [Data(Description =
"Sets the horizontal pixels parameter from the named result of a previous execution", Submenu =
"From Result")]
1447 [Data(Description =
"Sets the vertical pixels parameter from the result at the given index of a previous execution", Submenu =
"From Result")]
1449 [Data(Description =
"Sets the vertical pixels parameter from the named result of a previous execution", Submenu =
"From Result")]
1451 [Settings(Description =
"Sets the modifier keys parameter for the request", Submenu =
"Element")]
1453 [Settings(Description =
"Sets the session token parameter for the request", Submenu =
"Request")]
1455 [Settings(Description =
"Sets the CSS parameter", Submenu =
"Request")]
1460 [Fluent(Description =
"Synchronously executes the configured request and returns the result as a string")]
1462 [Fluent(Description =
"Synchronously executes the configured request and returns the result as a string")]
1466 [Fluent(Description =
"Executes the configured request, then returns this client so further fluent calls can configure the next request")]
1468 [Fluent(Description =
"Executes the configured request, then returns this client so further fluent calls can configure the next request")]
1470 [Action(Description =
"Asynchronously executes the configured request and returns the result as a string")]
1471 Task<string> ExecuteAsync();
1472 [Action(Description =
"Asynchronously executes the configured request and returns the result as a string")]
1473 Task<T> ExecuteAsync<T>();
1474 [Data(Description =
"Everything stored under a name so far, in the order it was stored")]
1476 [Data(Description =
"Every result stored under name, in the order it was stored, so a loop that ran five times answers with five")]
1477 IReadOnlyList<object> GetExecutionResults(
string name);
1478 [Action(Description =
"Empties what WithResultName has stored, so GetExecutionResults answers about what has happened since rather than everything since the client was made")]
1485 [Settings(Description =
"Sets the request parameters as an ordinal array", Submenu =
"Request")]
1487 [Settings(Description =
"Sets the request parameters from an object with named fields", Submenu =
"Request")]
1489 [Data(Description =
"Sets the request parameters from the result at the given index of a previous execution", Submenu =
"From Result")]
1491 [Data(Description =
"Sets the request parameters from the named result of a previous execution", Submenu =
"From Result")]
1493 [Settings(Description =
"Sets the content encoding used for requests sent to the puppeteer communicator", Submenu =
"Request")]
1499 [Workflow(Description =
"Adds a workflow step that invokes the given action against this client")]
1501 [Workflow(Description =
"Empties the declared workflow steps so the next loop runs a new set.")]
1503 [Workflow(Description =
"Sets the timeout in milliseconds for While or Until loops.")]
1506 [Workflow(Description =
"Sets the maximum number of iterations for While or Until loops.")]
1508 [Workflow(Description =
"Repeat the workflow while the condition holds")]
1510 [Workflow(Description =
"Configures execution to repeat until the given condition returns true, subject to WhileLoopTimeout/WhileLoopMaxIterations")]
1516 [Settings(Description =
"Sets the timeout, in milliseconds, used by CheckNetworkIdle", Submenu =
"Network Idle")]
1518 [Settings(Description =
"Sets the prune interval, in milliseconds, used by CheckNetworkIdle", Submenu =
"Network Idle")]
1520 [Settings(Description =
"Sets the maximum number of in-flight connections allowed before the network is considered busy, used by CheckNetworkIdle", Submenu =
"Network Idle")]
1526 [Settings(Description =
"Sets the horizontal pixels parameter for the request", Submenu =
"Drag and Scroll")]
1528 [Settings(Description =
"Sets the vertical pixels parameter for the request", Submenu =
"Drag and Scroll")]
1534 [Settings(Description =
"Sets the horizontal drag delta parameter for a drag and drop", Submenu =
"Drag and Scroll")]
1536 [Settings(Description =
"Sets the vertical drag delta parameter for a drag and drop", Submenu =
"Drag and Scroll")]
1538 [Settings(Description =
"Sets the horizontal grab offset within the element for a drag and drop", Submenu =
"Drag and Scroll")]
1540 [Settings(Description =
"Sets the vertical grab offset within the element for a drag and drop", Submenu =
"Drag and Scroll")]
1546 [Data(Description =
"Sets the attribute name parameter for SetAttribute/GetAttribute requests")]
1548 [Settings(Description =
"Sets the attribute value parameter for SetAttribute requests", Submenu =
"Element")]
1554 [Settings(Description =
"Set the value to choose from the Select menu", Submenu =
"Element")]
1556 [Settings(Description =
"Sets the index of the option to choose from a Select menu", Submenu =
"Element")]
1561 [Settings(Description =
"Sets the text parameter for the request")]
1566 [
Browser(Description =
"Sets the storage domain parameter for storage operations")]
1568 [
Browser(Description =
"Sets the storage path parameter for storage operations")]
1570 [
Browser(Description =
"Sets the storage key parameter for storage operations")]
1572 [
Browser(Description =
"Sets the storage store name parameter for IndexedDB storage operations")]
1574 [
Browser(Description =
"Sets the storage data parameter for storage operations")]
1576 [Settings(Description =
"Sets whether storage should be deleted across all origins, not just the current one", Submenu =
"Storage")]
1582 [Settings(Description =
"Sets the range value parameter for a SetRange request", Submenu =
"Element")]
1588 [
Browser(Description =
"Configure this client to navigate the browser back one page in history", Submenu =
"Navigation")]
1590 [Action(Description =
"Configure this client to capture a screenshot of the visible tab in the given image format", Submenu =
"Page")]
1592 [Fluent(Description =
"Cast the desktop to the specified device name")]
1594 [Fluent(Description =
"Cast the current tab to the specified device name")]
1596 [
Browser(Description =
"Configure this client to close the tab with the given URL, or the current tab if none is given", Submenu =
"Tabs")]
1598 [
Browser(Description =
"Configure this client to close the tab with the given tab id", Submenu =
"Tabs")]
1600 [
Browser(Description =
"Configure this client to close the window containing the given URL, or the current window if none is given", Submenu =
"Windows")]
1602 [
Browser(Description =
"Configure this client to close the window containing the tab with the given tab id", Submenu =
"Windows")]
1604 [Action(Description =
"Configure this client to delete the given type of website storage", Submenu =
"Storage")]
1606 [Action(Description =
"Configure this client to execute the given JavaScript in the page", Submenu =
"Page")]
1608 [Fluent(Description =
"Issue an API request from inside the page, so it carries the session the browser already earned: its cookies, TLS fingerprint, header order and any anti-bot clearance. A relative url resolves against wherever the browser currently is")]
1610 [Settings(Description =
"HTTP method for the request", Submenu =
"Request")]
1612 [Settings(Description =
"Body to send with the request", Submenu =
"Request")]
1614 [Settings(Description =
"Content type of the body", Submenu =
"Request")]
1616 [Settings(Description =
"Extra request headers, flattened to name, value, name, value", Submenu =
"Request")]
1618 [Settings(Description =
"True to bring the response body back base64 encoded, which is what a file needs", Submenu =
"Request")]
1631 [
Browser(Description =
"Configure this client to navigate the browser forward one page in history", Submenu =
"Navigation")]
1633 [
Browser(Description =
"Configure this client to make the browser window fullscreen", Submenu =
"Windows")]
1635 [Data(Description =
"Configure this client to query the puppeteer server's ready status, optionally for a specific session token", Submenu =
"Page")]
1637 [Action(Description =
"Configure this client to check whether network activity has gone idle", Submenu =
"Page")]
1639 [Data(Description =
"Configure this client to retrieve the shadow root of the element matching the given CSS selector", Submenu =
"Find Elements")]
1641 [
Browser(Description =
"Configure this client to retrieve the current page URL", Submenu =
"Navigation")]
1643 [
Browser(Description =
"Configure this client to retrieve information about the current browser window", Submenu =
"Windows")]
1645 [Data(Description =
"Configure this client to retrieve the given type of website storage", Submenu =
"Page")]
1647 [Data(Description =
"Configure this client to retrieve the browser's preferred languages, most preferred first", Submenu =
"Page")]
1649 [Data(Description =
"Configure this client to retrieve the browser's user agent string", Submenu =
"Page")]
1651 [
Browser(Description =
"Configure this client to navigate the current tab to the given URL, resolving relative URLs and checking robots.txt restrictions", Submenu =
"Navigation")]
1653 [
Browser(Description =
"Configure this client to switch to the tab whose URL matches the given URL", Submenu =
"Tabs")]
1655 [
Browser(Description =
"Configure this client to switch to the tab with the given tab id", Submenu =
"Tabs")]
1657 [
Browser(Description =
"Configure this client to switch to the window containing the tab whose URL matches the given URL", Submenu =
"Windows")]
1659 [
Browser(Description =
"Configure this client to switch to the window containing the tab with the given tab id", Submenu =
"Windows")]
1661 [Settings(Description =
"Configure this client to switch context into the element matching the given selector", Submenu =
"Element")]
1663 [
Browser(Description =
"Configure this client to inject the given JavaScript into the page", Submenu =
"Scripts")]
1665 [
Browser(Description =
"Configure this client to remove all previously injected scripts (via InjectScript)", Submenu =
"Scripts")]
1667 [
Browser(Description =
"Configure this client to switch context back to the main document", Submenu =
"Frames")]
1669 [Settings(Description =
"Configure this client to switch context into the shadow root of the element matching the given selector", Submenu =
"Element")]
1671 [
Browser(Description =
"Configure this client to maximize the browser window", Submenu =
"Windows")]
1673 [
Browser(Description =
"Configure this client to minimize the browser window", Submenu =
"Windows")]
1675 [Action(Description =
"Configure this client to move the mouse to the element matching the given selector", Submenu =
"Mouse")]
1677 [Action(Description =
"Configure this client to move the mouse to a viewport coordinate instead of to an element, for targets with no DOM handle such as an image match", Submenu =
"Mouse")]
1679 [Action(Description =
"Configure this client to open a new tab navigated to the given URL, resolving relative URLs and checking robots.txt restrictions", Submenu =
"Tabs and Windows")]
1681 [
Browser(Description =
"Configure this client to switch to the next tab", Submenu =
"Tabs")]
1683 [
Browser(Description =
"Configure this client to switch to the next browser window", Submenu =
"Windows")]
1685 [
Browser(Description =
"Configure this client to restore the browser window to its normal (non-maximized, non-minimized) state", Submenu =
"Windows")]
1687 [Action(Description =
"Configure this client to open a new browser window navigated to the given URL, resolving relative URLs and checking robots.txt restrictions", Submenu =
"Tabs and Windows")]
1689 [Action(Description =
"Configure this client to override the HTTP referrer sent with subsequent requests", Submenu =
"Referrer and User Agent")]
1691 [Scroll(Description =
"Configure this client to scroll the page down by the given number of page heights")]
1693 [Scroll(Description =
"Configure this client to scroll to the bottom of the page")]
1695 [Scroll(Description =
"Configure this client to scroll to the top of the page")]
1697 [Scroll(Description =
"Configure this client to scroll the page up by the given number of page heights")]
1699 [Data(Description =
"Configure this client to press and hold the given modifier key(s)", Submenu =
"Keyboard")]
1701 [
Browser(Description =
"Configure this client to switch to the previous tab", Submenu =
"Tabs")]
1703 [
Browser(Description =
"Configure this client to switch to the previous browser window", Submenu =
"Windows")]
1705 [
Browser(Description =
"Configure this client to refresh the current page", Submenu =
"Navigation")]
1707 [Data(Description =
"Configure this client to release the given modifier key(s)", Submenu =
"Keyboard")]
1709 [
Browser(Description =
"Configure this client to restore the browser window to its normal size", Submenu =
"Windows")]
1711 [Action(Description =
"Configure this client to left-click the given element and download the resulting target", Submenu =
"Files")]
1713 [Action(Description =
"Configure this client to left-click the given element to open a file picker, then upload the file(s) set via UploadFrom", Submenu =
"Files")]
1715 [Scroll(Description =
"Configure this client to scroll the browser window horizontally by the given number of pixels")]
1717 [Scroll(Description =
"Configure this client to scroll the browser window vertically by the given number of pixels")]
1728 [Data(Description =
"Configure this client to send a key press for the given virtual key code, translating it to the corresponding DOM key and code", Submenu =
"Keyboard")]
1730 [Action(Description =
"Configure this client to write the given type of website storage; combine with WithStorageDomain/WithStorageKey/WithStorageData etc to specify what to write", Submenu =
"Storage")]
1732 [Action(Description =
"Configure this client to override the browser's user agent string for subsequent requests", Submenu =
"Referrer and User Agent")]
1734 [Action(Description =
"Configure this client to override the HTTP referrer with https://www.google.com, to mimic arriving from a search engine", Submenu =
"Referrer and User Agent")]
1736 [Fluent(Description =
"Configure this client to stop any active screen casting")]
1738 [
Browser(Description =
"Configure this client to switch context back to the main document", Submenu =
"Frames")]
1740 [
Browser(Description =
"Configure this client to switch context into the element matching the given selector", Submenu =
"Frames")]
1742 [
Browser(Description =
"Configure this client to switch context into the iframe matching the given selector", Submenu =
"Frames")]
1744 [
Browser(Description =
"Configure this client to switch context into the shadow root of the element matching the given selector", Submenu =
"Frames")]
1746 [Action(Description =
"Where files the browser downloads should end up", Submenu =
"Files")]
1748 [Action(Description =
"Configure this client to fire a DOM change event on the given element", Submenu =
"Input")]
1750 [Action(Description =
"Configure this client to set keyboard focus on the given element", Submenu =
"Mouse")]
1752 [Data(Description =
"Configure this client to retrieve the bounding client rectangle of the given element", Submenu =
"Element")]
1754 [Data(Description =
"Configure this client to compute a hash of the given element's attributes, useful for detecting element changes", Submenu =
"Element")]
1756 [Action(Description =
"Configure this client to retrieve the current page's HTML source", Submenu =
"Page")]
1758 [Data(Description =
"Configure this client to retrieve the parent node of the given element", Submenu =
"Find Elements")]
1760 [Data(Description =
"Configure this client to retrieve the text content and computed CSS of the given element", Submenu =
"Element")]
1762 [Data(Description =
"Configure this client to retrieve the CSS attributes of the given element", Submenu =
"Element")]
1764 [Data(Description =
"Configure this client to retrieve the DOM attributes of the given element", Submenu =
"Element")]
1766 [Data(Description =
"Configure this client to retrieve the DOM properties of the given element", Submenu =
"Element")]
1768 [Action(Description =
"Configure this client to hide the given element", Submenu =
"Input")]
1770 [Data(Description =
"Configure this client to check whether the given element is clickable", Submenu =
"Element")]
1772 [Data(Description =
"Configure this client to check whether the given element is displayed", Submenu =
"Element")]
1774 [Data(Description =
"Configure this client to check whether the given element is enabled", Submenu =
"Element")]
1776 [Scroll(Description =
"Configure this client to check whether the page is scrolled to its end")]
1778 [Data(Description =
"Configure this client to check whether the given element is visible in the viewport", Submenu =
"Element")]
1780 [Data(Description =
"Configure this client to check whether the element with the given backend node id is visible in the viewport", Submenu =
"Element")]
1782 [Action(Description =
"Configure this client to left-click the given element", Submenu =
"Clicks")]
1784 [Action(Description =
"Configure this client to double left-click the given element", Submenu =
"Clicks")]
1786 [Action(Description =
"Configure this client to middle-click the given element", Submenu =
"Clicks")]
1788 [Action(Description =
"Configure this client to right-click the given element", Submenu =
"Clicks")]
1790 [Action(Description =
"Open a drop-down's options by clicking the element; follow with WithSelectValue or WithSelectIndex", Submenu =
"Clicks")]
1792 [Scroll(Description =
"Configure this client to scroll the given element into view")]
1794 [Data(Description =
"Configure this client to retrieve the browser window's inner height", Submenu =
"Window")]
1796 [Data(Description =
"Configure this client to retrieve the browser window's inner width", Submenu =
"Window")]
1798 [Data(Description =
"Configure this client to retrieve the browser window's outer height", Submenu =
"Window")]
1800 [Data(Description =
"Configure this client to retrieve the browser window's outer width", Submenu =
"Window")]
1802 [Data(Description =
"Configure this client to retrieve the page's horizontal scroll offset", Submenu =
"Window")]
1804 [Data(Description =
"Configure this client to retrieve the page's vertical scroll offset", Submenu =
"Window")]
1806 [Data(Description =
"Configure this client to retrieve the browser window's screen X position", Submenu =
"Window")]
1808 [Data(Description =
"Configure this client to retrieve the browser window's screen Y position", Submenu =
"Window")]
1810 [Action(Description =
"Configure this client to hover the mouse over the given element", Submenu =
"Mouse")]
1812 [Data(Description =
"Configure this client to evaluate the given XPath expression and return the first matching node", Submenu =
"Find Elements")]
1814 [Data(Description =
"Configure this client to evaluate the given XPath expression and return all matching nodes", Submenu =
"Find Elements")]
1816 [Data(Description =
"Configure this client to find the first element matching the given CSS selector", Submenu =
"Find Elements")]
1818 [Data(Description =
"Configure this client to find all elements matching the given CSS selector", Submenu =
"Find Elements")]
1821 [Action(Description =
"Configure this client to clear any overridden HTTP referrer", Submenu =
"Referrer and User Agent")]
1823 [
Browser(Description =
"Configure this client to bring the browser window to the foreground", Submenu =
"Windows")]
1829 [Action(Description =
"Configure this client to set an attribute on the given element; combine with WithAttribute and WithValue to specify the attribute and value", Submenu =
"Input")]
1831 [Data(Description =
"Configure this client to set the value of a range input element; combine with WithRangeValue to specify the value", Submenu =
"Keyboard")]
1833 [Scroll(Description =
"Configure this client to scroll the given element; combine with WithHPixels/WithVPixels to specify the scroll amount")]
1835 [Action(Description =
"Configure this client to start a drag from the given element; combine with WithDestElementId or WithDeltaX/WithDeltaY to set the drop target", Submenu =
"Mouse")]
1837 [Data(Description =
"Configure this client to retrieve an attribute from the given element; combine with WithAttribute to specify which attribute", Submenu =
"Element")]
1844 string Name { [Data(Description =
"The display name assigned to this client via WithName")]
get; }
1846 #endregion Puppeteer
1856 [Settings(Description =
"Sets the target URL (blank or null becomes https://google.com)")]
1868 [Settings(Description =
"Start declaring the storage action with storage type first")]
1880 [
Browser(Description =
"Optional: domain override")]
1886 [
Browser(Description =
"For indexedDb, this is the 'table' the object store, they call it a store name")]
1892 [
Browser(Description =
"Optional: path (e.g. cookie path, object store name)")]
1898 [
Browser(Description =
"Specific key for the current storage type")]
1904 [Settings(Description =
"User defined data, strictly used for filtering in GPAL")]
1913 [Settings(Description =
"Delete the storage on every origin, not only the current one (OttoMagic only)")]
1925 [
Browser(Description =
"Optional: domain override")]
1941 string Url { [Data(Description =
"The target URL (never null)")]
get; }
1943 [Action(Description =
"Adds a fully-configured StorageAction to the list")]
1945 [Action(Description =
"Adds multiple fully-configured StorageAction items")]
1946 List<StorageAction> Add(List<StorageAction> storageActions);
1951 [Data(Description =
"List of storage actions to perform before navigation")]
Browser object that contains the fluent methods to create your Browser workflow. Instatiated using G...
delegate CallIfStatus CallAfterFillInDelegate(IBrowser browser, IGPALGrid< string > tokens, int tokenIdx)
Delegate callback for the CallAfterFillIn EventHandler which will be invoked after each row of tokens...
delegate CallIfStatus CallOnFailDelegate(IBrowser browser, GPALFailure failure, string detail)
Delegate for the CallOnFail handler, invoked when something fails that the workflow,...
delegate CallIfStatus CallIfDelegate(IBrowser browser, List< IGPALElement > foundElements, List< IGPALElement > matchedElements, Selector selector, bool matchedAll)
Delegate callback for the CallIfFound/CallIfNotFound EventHandlers which will be invoked when a selec...
Represents a URL with optional pre-navigation storage cleanup / inspection actions....
Represents a single storage-related action to perform before navigating to a URL.
Class to define database usage. Currently only used for input from a table, sql or stored procedure....
Pseudo element used in Applications and Browser workflows for image matching and unified automation....
GPAL File object instantied with GPAL.File Used to load tokens into a GPALGrid [rows/columns].
Everything starts here, all the GPAL controls and global settings using fluent syntax are here....
Describes an API request for .Fetch to issue from inside the page, so it carries the session the brow...
GPAL Selector used to locate Application and Browser elements. Instantiated with GPAL....
Allow Browser Settings, Goto, WaitOnDocumentReady.
What a workflow may say once .WithCallFilter has said which call it is after. Taking a template only ...
Starting interface - only allows setting the target URL.
IAllowGPALUrlStorageType ForUrl(string url)
Sets the target URL (blank or null becomes https://google.com).
Allow setting the storage data parameter for 'set' operations.
IAllowGPALUrlStorageItemConfig WithStorageData(string data)
Optional: domain override.
Interface after deleting a specific item - allows optional path/domain.
IAllowGPALUrlStorageItemConfig WithStorageKey(string key)
Specific key for the current storage type.
IAllowGPALUrlStorageItemConfig WithDeleteAcrossOrigins(bool trueFalse)
OttoMagic Only: For delete operations without a domain, limit to origin? true = delete across origins...
IAllowGPALUrlStorageItemConfig WithStorageDomain(string domain)
Optional: domain override.
IAllowGPALUrlStorageItemConfig WithStorageStoreName(string storeName)
For indexedDb, this is the 'table' the object store, they call it a store name.
IAllowGPALUrlStorageItemConfig WithStoragePath(string path)
Optional: path (e.g. cookie path, object store name).
IAllowGPALUrlStorageItemConfig WithUserDefined(string userDefined)
User defined data, strictly used for filtering in GPAL. Can store data of value.
Interface after URL is set - allows selecting storage type.
IAllowGPALUrlStorageItemConfig WithStorageType(WebsiteStorageType type)
Start declaring the storage action with storage type first.
IAllowAfterAnySelector InShadowDom(Selector shadowDomSelector)
NOTE: can only use CSS selectors in shadow dom.
IAllowPuppeteerInputText FillInInsert(dynamic elementOrelementId, int delayMs=0)
IAllowPuppeteerExecution SendString(string text, int delayMs=0)
Simulates typing: dispatches real key events character-by-character. Honors GPAL.TypingDelay when del...
IAllowPuppeteerInputText FillInOverwrite(dynamic elementOrelementId, int delayMs=0)
IAllowPuppeteerInputText FillInAppend(dynamic elementOrelementId, int delayMs=0)
Sets the element's value directly (fast path) - does NOT honor GPAL.TypingDelay. delayMs only paces ...
IAllowBrowserActionOrAnySelector SetAttribute(string value)
Directly sets a DOM attribute on the found element(s) via element.setAttribute(attribute,...
IAllowBrowserActionOrAnySelector SetValueFrom(Selector selector)
Copies the value from the element matched by selector into the element(s) matched by the preceding I...
IAllowSetAttributeValue WithAttribute(string attribute)
Names the DOM attribute to set on the found element(s). Must be followed by IAllowSetAttributeValue....
string RestApiBaseUrl
Where this browser's GPALRestAPI is listening, e.g. http://localhost:3117/, taken from the port it an...
Public interface exposed to consumers.
string Url
The target URL (never null).
IReadOnlyList< StorageAction > GetActions()
List of storage actions to perform before navigation.
One Win32 desktop object a browser is running on. Reached from the browser that is on it,...
Every hidden desktop this process has made, and the screen itself. Peek and Return move the screen,...