21using System.Collections.Generic;
22using System.Diagnostics;
26using System.Threading.Tasks;
27using System.Windows.Forms.DataVisualization.Charting;
36 #region <Selector Settings>
37 [Interface(Description =
"Selector Settings")]
40 [
Selector(Description =
"Locate element with OCR using the text to find")]
42 [
Selector(Description =
"Locate element using a CSS path (browser only)")]
44 [
Selector(Description =
"Locate element matching a partial or full HRef (browser only)")]
46 [
Selector(Description =
"Locate element using an XPath")]
48 [
Selector(Description =
"Locate element searching visible text to find")]
50 [
Selector(Description =
"Locate element with the given value")]
52 [
Selector(Description =
"Locate element with the given name")]
54 [
Selector(Description =
"Locate element with the given class name")]
56 [
Selector(Description =
"Locate element using an AutomationID (application only)")]
58 [
Selector(Description =
"Locate element loading the given image file to match")]
60 [
Selector(Description =
"Locate element loading the given image file to match")]
62 [
Selector(Description =
"Locate element using the supplied image to match")]
64 [Settings(Description =
"Name of selector (used in messages and column names)")]
66 [Settings(Description =
"X offset to click inside element, also starting X location in element for drag-and-drop")]
68 [Settings(Description =
"Y offset to click inside element, also starting X location in element for drag-and-drop")]
70 [Settings(Description =
"X delta for drag-and-drop")]
72 [Settings(Description =
"Y delta for drag-and-drop")]
74 [Settings(Description =
"Scroll down a page to see if the selector comes into view [image/ocr]")]
76 IAllowSelectorSettings WithHardware { [Settings(Description =
"Use hardware emulation to interact with this element [mouse/keyboard]")]
get; }
77 IAllowSelectorSettings WithJavaScript { [Settings(Description =
"Use javascript injection to interact with this element")]
get; }
78 [Obsolete(
"This method is not preferred. Consider using WithJavaScript instead.",
false)]
79 IAllowSelectorSettings WithJavascript { [Settings(Description =
"Use javascript injection to interact with this element")]
get; }
80 IAllowSelectorSettings WithSelenium { [Settings(Description =
"Use selenium to interact with this element [default]")]
get; }
81 [Settings(Description =
"Smoothly move mouse to interact with this element [instead of jump to]. Implies .WithHardware")]
83 [Settings(Description =
"Stop the workflow if this selector is not found")]
85 [Data(Description =
"When retrieving data from the element, get data from the named attribute. [visible text is default]")]
87 [Data(Description =
"Located elements will match only if the text contains the supplied string")]
90 [Data(Description =
"Located elements will match only if they have this named attribute")]
92 [Data(Description =
"Located elements will match only if the attribute name matches this regular expression")]
94 [Data(Description =
"Located elements will match only if the text contains the supplied string")]
97 [Data(Description =
"Located elements will match only if they have this href")]
99 [Data(Description =
"Located elements will match only if the href matches this regular expression")]
101 [Data(Description =
"Located elements will match only if the text contains the supplied string")]
104 [Data(Description =
"Located elements will match only if the placeholder value matches the supplied string")]
106 [Data(Description =
"Located elements will match only if the placebolder value matches this regular expression")]
108 [Data(Description =
"Located elements will match only if the text contains the supplied string")]
111 [Data(Description =
"Located elements will match only if the src matches the supplied string")]
113 [Data(Description =
"Located elements will match only if the src matched the regular expression")]
115 [Data(Description =
"Located elements will match only if the text contains the supplied string")]
118 [Data(Description =
"Located elements will match only if the text matches the regular expression")]
120 [Data(Description =
"Located elements will match only if the text matches the regular expression")]
123 [Data(Description =
"Located elements will match only if the text contains the supplied string")]
125 [Data(Description =
"Located elements will match only if the value matches the supplied string")]
127 [Data(Description =
"Located elements will match only if the value matches the regular expression")]
129 [Data(Description =
"Custom Application UIAutomation Element matching method to examine and 'match' located elements using your algorithm.")]
131 [Data(Description =
"Custom browser webElement matching method to examine and 'match' located elements using your algorithm")]
140 [Callback(Description =
"Selector based callback if this selector is found")]
142 [Callback(Description =
"Selector based callback if this selector is NOT found")]
148 #endregion <Selector Settings>
149 #region <GPAL Interfaces>
150 [Interface(Description =
"Global Settings")]
153 [
GPALSettings(Description =
"Print GPAL published information or exception messages to the supplied database. One column for each GPALEventArgs property. ")]
156 [
GPALSettings(Description =
"Print GPAL published information or exception messages to the output window in VisualStudio. [true (default)]")]
157 IAllowGPALSettings WithPublishToDebug(GPALEventType eventTypes = GPALEventType.INFO | GPALEventType.WARNING | GPALEventType.ERROR | GPALEventType.EXCEPTION | GPALEventType.NOTICE | GPALEventType.CAUTION | GPALEventType.FAILURE);
158 [
GPALSettings(Description =
"Indicate which published events to print to the console. [None (default)]")]
159 IAllowGPALSettings WithPublishToConsole(GPALEventType eventTypes = GPALEventType.INFO | GPALEventType.WARNING | GPALEventType.ERROR | GPALEventType.EXCEPTION | GPALEventType.NOTICE | GPALEventType.CAUTION | GPALEventType.FAILURE);
160 [
GPALSettings(Description =
"Print stack track when GPAL prints it's own published messages (PublishToConsole/PublishToDebug == true). [false (default)]")]
163 [
GPALSettings(Description =
"Intercharacter typing delay [0ms (default), no pacing]")]
165 [
GPALSettings(Description =
"Handler to receive GPAL Exception events")]
166 IAllowGPALSettings WithExceptionHandler(EventHandler<GPALEventArgs> ExceptionEventHandler);
167 [
GPALSettings(Description =
"Handler to receive GPAL Information events")]
168 IAllowGPALSettings WithInformationHandler(EventHandler<GPALEventArgs> InformationEventHandler);
169 [
GPALSettings(Description =
"Image matching similarity percentage. [80 (default)]")]
171 [
GPALSettings(Description =
"Simulate moving the mouse for every action (implies .WithHardware). [false (default)]")]
173 [
GPALSettings(Description =
"Stop workflow if any selector is not found")]
175 [
GPALSettings(Description =
"Global location for browser drivers. [./ (default)(same dir as exe)]")]
176 IAllowGPALSettings WithDriverLocation([Directory(Description =
"Global location for browser drivers. [./ (default)(same dir as exe)]")]
string driverPath =
"./");
177 IAllowGPALSettings WithTempDirectory([Directory(Description =
"Where GPAL writes files it created itself and nobody asked to keep. [GPALfilesSafeToDelete beside the exe (default)]")]
string tempPath);
178 [
GPALSettings(Description =
"Set the default location to store temporary profiles if WithDefaultDataDir is not used. default [C:\\profiles]. Also saved in GPAL.yaml that loads on startup.")]
179 IAllowGPALSettings WithTempProfileDirectory([Directory(Description =
"Global location for temp profiles. [c:\\profiles (default)(saved in GPAL.yaml that is loaded on startup)]")]
string tempProfileDirectory);
180 [
GPALSettings(Description =
"Substitue string when data cannot be retrieved for an element [##UNABLE TO GET## (default)]")]
182 [
GPALSettings(Description =
"Automatically update the Chrome webdriver when running a GPAL application. Manually deploy first Chrome driver, tho.")]
183 IAllowGPALSettings WithAutomationEngine(AutomationEngine automationEngine = AutomationEngine.PuppeteerPort);
184 [
GPALSettings(Description =
"Automatically update the Chrome webdriver when running a GPAL application. Manually deploy first Chrome driver, tho.")]
186 [
GPALSettings(Description =
"Do not try alternate methods to interact with an element if an error occurs.")]
188 [
GPALSettings(Description =
"Ticks to wait for element to show up before continuing. Applies to every element in every workflow. Override in a Unit of Work with .WaitFor().")]
190 [
GPALSettings(Description =
"Global CallIfFound handler for all selectors in any Unit of Work")]
192 [
GPALSettings(Description =
"Global CallIfFound handler for all selectors in any Unit of Work")]
194 [
GPALSettings(Description =
"Global CallIfFound handler for all application selectors in any Unit of Work")]
196 [
GPALSettings(Description =
"Global CallIfFound handler for all application selectors in any Unit of Work")]
199 #endregion <GPAL Interfaces>
200 #region <Database Interfaces>
204 IGPALGrid<string> Tokens {
get; }
237 [Settings(Description =
"How long a command may run before the provider gives up. [the provider's own default]")]
239 [Action(Description =
"Close the connection and roll back a transaction still open on it. The database can be used again after.")]
315 #endregion <DatabaseInterfaces>
369 [Settings(Description =
"How the site expects to be told who you are, which decides what a browser given this credential does with it")]
371 [Settings(Description =
"A token the workflow already holds, presented according to the WebAuthType")]
373 [Settings(Description =
"Where the OAuth redirect lands, which has to be the URI registered with the provider")]
390 void FetchAccessToken(out
string accessToken);
397 #endregion Credentials
458 #region <Converter Interfaces>
466 [Settings(Description =
"Get input data to convert using the Database object")]
468 [Settings(Description =
"Input data is contained in this GPALGrid")]
470 [Settings(Description =
"Input data is in this string")]
472 [Settings(Description =
"Input data file (extension denotes type, override using WithInputType)")]
474 [Settings(Description =
"Input class, uses reflection to map to output format")]
476 [Settings(Description =
"[Global] Register a custom struct type for the converter to recognize. Structs cannot be reliably determined. If you have a custom struct to convert, register it first.")]
481 [Settings(Description =
"Specify input data format")]
483 [Settings(Description =
"Specify output data format")]
485 [Settings(Description =
"[Global] First line is a column name list (for flat files: csv, txt, prn)")]
487 [Settings(Description =
"[Global] Ignore first line column name list (for flat files: csv, txt, prn)")]
489 [Settings(Description =
"[Global] Each field is contained in quotes (for flat files: csv, txt, prn)")]
491 [Settings(Description =
"Column names for this conversion. Overrides the input source's own columns positionally; unsupplied columns are backfilled from the source.")]
493 [Settings(Description =
"Append a single column name for this conversion. Repeated calls build the list in order.")]
498 [Action(Description =
"")]
500 [Action(Description =
"")]
502 [Action(Description =
"")]
504 [Action(Description =
"")]
506 [Action(Description =
"")]
508 [Action(Description =
"")]
510 [Action(Description =
"")]
512 [Action(Description =
"")]
514 [Action(Description =
"")]
516 [Action(Description =
"")]
518 [Action(Description =
"Pretty print the input to a new string.")]
523 [Action(
"Save to a string the decoded Base64 content")]
525 [Action(
"Save to a file based upon content type")]
539 #endregion <Converter Interfaces>
540 #region <File Interfaces>
543 string First {
get; }
546 string Filename {
get; }
547 List<string> Filenames {
get; }
548 string DirectoryPart {
get; }
549 string FilePart {
get; }
550 List<string> DirectoryParts {
get; }
551 List<string> FileParts {
get; }
552 List<string> ReturnFilenames {
get; }
553 string SourceUrl {
get; }
557 internal interface IGPALFileInternal
559 internal GPALFileSettings FileSettings {
get;
set; }
560 internal List<IGPALGrid<string>> TokenList {
get;
set; }
561 internal List<string> FileData {
get;
set; }
562 internal List<char?> Delimiter {
get;
set; }
563 internal List<bool> FieldsEnclosedInQuotes {
get;
set; }
564 internal List<bool> FirstLineIsColumnNames {
get;
set; }
565 internal List<bool> IgnoreFirstLineColumnNames {
get;
set; }
566 internal bool UseOneHeaderForAllFiles {
get;
set; }
567 internal List<Dictionary<object, dynamic>> FileDictionary {
get;
set; }
568 internal List<IGPALGrid<string>> FileGrid {
get;
set; }
569 internal bool AlreadyTokenized {
get;
set; }
573 [Settings(Description =
"IF this file is delimited, the delimiter used.")]
575 [Settings(Description =
"Add a column name to the column name list. (If no header in file or to override.)")]
577 [Settings(Description =
"Add column names to the column name list using the .WithDelimiter. Use this to add headers for multiple files.")]
579 [Settings(Description =
"Add column names to the column name list using the supplied array. One column per element. Use this to add headers for multiple files.")]
581 [Settings(Description =
"Each field is contained in quotes (for flat files: csv, txt, prn)")]
583 [Settings(Description =
"First line is a column name list (for flat files: csv, txt, prn)")]
585 [Settings(Description =
"Ignore first line header list")]
587 [Settings(Description =
"Overwrite the file or generate a new filename. Overwrite is default.")]
589 [Settings(Description =
"One column list is defined, use it for all files in the file list.")]
590 IAllowFileSettings WithUseSameColumnNamesForAllFiles(
bool useHeaderForAllFiles =
true);
591 [Settings(Description =
"Order in which files matched by a wildcard (e.g. *.csv) are added to the file list. Default is Name (alphabetical).")]
593 [Settings(Description =
"How Next builds a new unique filename (timestamp, date, or an incrementing counter). Default is CounterPadded.")]
594 IAllowFileSettings WithNextFilePattern(Enums.NextFilePattern nextFilePattern = Enums.NextFilePattern.CounterPadded);
598 [Action(Description =
"Copy the defined GPALFile(s) to a destination file or directory")]
599 void CopyTo(
string destination);
600 [Action(Description =
"Move the defined GPALFile(s) to a destination file or directory")]
601 void MoveTo(
string destination);
602 [Action(Description =
"Delete the destination file or files (wildcard) or all in the directory (no filename)")]
603 void Delete(
string destination);
604 [Action(Description =
"Delete the defined GPALFile underlying file(s)")]
609 [Settings(Description =
"Add a filename to the GPALFile list. Actual output filenames added to end.")]
611 [Settings(Description =
"A browser already holding the session a url needs. Set before .WithFileName. GPAL tries its own connection first and falls back to this browser, downloading in a new tab.")]
614 #endregion <File Interfaces>
616 public interface IGPALGrid<T> : IAllowGridActions<T>, IEnumerable<List<T>>
619 [Settings(Description =
"Enable duplicate-row detection for this grid when it is passed into GetGrid (off by default).")]
620 IGPALGrid<T> WithDedupeData(
bool useDedupe =
true);
622 public interface IAllowGridActions<T> : IAllowToGPALObject<IGPALGrid<T>>
624 IAllowGridActions<T> Add(IGPALGrid<T> grid);
625 IAllowGridActions<T> AddRow(List<T> row);
626 IAllowGridActions<T> AddColumn(List<T> column);
629 IAllowGridActions<T> AddCell(T value,
int row,
int column);
630 T GetCell(
int row,
int column);
631 IAllowGridActions<T> Clear();
632 IAllowGridActions<T> DeleteRow(RowPosition rowPosition = RowPosition.Last);
633 IAllowGridActions<T> InputFrom(
GPALFile input);
634 IAllowGridActions<T> SaveTo(
GPALFile output);
637 List<T>
this[
int index] {
get;
set; }
638 T
this[
int row,
int column] {
get;
set; }
640 bool Contains(T value);
641 public object Clone();
644 #region <Email Interfaces>
648 string SMTPServerName {
get; }
649 int SMTPPortNum {
get; }
650 string IMAPServerName {
get; }
651 int IMAPPortNum {
get; }
652 string POPServerName {
get; }
653 int POPPortNum {
get; }
654 string FromAddress {
get; }
658 [Settings(Description =
"")]
660 [Settings(Description =
"")]
662 [Settings(Description =
"")]
664 [Settings(Description =
"")]
666 [Settings(Description =
"")]
668 [Settings(Description =
"")]
670 [Settings(Description =
"The credential to authenticate with, whose username and password win over WithUserName and WithPassword")]
672 [Settings(Description =
"")]
674 [Settings(Description =
"")]
679 [Action(Description =
"")]
681 [Action(Description =
"")]
683 [Action(Description =
"Read the mail and hand back the messages")]
685 [Action(Description =
"Write every attachment on every message received into the given directory")]
687 [Action(Description =
"Mark every message Receive collected as read on the server, in one connection. IMAP only.")]
689 [Action(Description =
"Delete every message Receive collected from the server, in one connection. IMAP only.")]
691 [Action(Description =
"")]
693 [Action(Description =
"")]
695 [Action(Description =
"")]
701 [Settings(Description =
"")]
703 [Settings(Description =
"")]
705 [Settings(Description =
"")]
707 [Settings(Description =
"")]
709 [Settings(Description =
"")]
711 [Settings(Description =
"")]
713 [Settings(Description =
"")]
715 [Settings(Description =
"")]
717 [Settings(Description =
"")]
722 [Settings(Description =
"Fetch only the messages the server still has as unread. Every message when false, which is the default.")]
724 [Settings(Description =
"The most messages one Receive may fetch, newest first. Every message by default.")]
732 , IAllowToGPALObject<IGPALMail>
737 , IAllowToGPALObject<IGPALMail>
744 #endregion <Email Interfaces>
749 string LogDirectory {
get; }
750 string LogFilename {
get; }
751 string LogFullPath {
get; }
755 [Settings(Description =
"")]
757 [Settings(Description =
"")]
759 [Settings(Description =
"")]
761 [Settings(Description =
"")]
763 [Settings(Description =
"")]
765 [Settings(Description =
"Which event types this logger writes, published or called directly. Defaults to all")]
767 [Settings(Description =
"")]
769 [Settings(Description =
"")]
771 [Settings(Description =
"")]
773 [Settings(Description =
"")]
788 void Close(
bool saveOnClose);
951 string Execute(
bool publishEvent =
true);
952 T Execute<T>(
bool publishEvent =
true);
955 Task<string> ExecuteAsync(
bool publishEvent =
true);
956 Task<T> ExecuteAsync<T>(
bool publishEvent =
true);
1185 string Name {
get; }
1196 string TagName {
get; }
1197 string Text {
get; }
1198 bool Enabled {
get; }
1199 bool Selected {
get; }
1200 bool Displayed {
get; }
1201 Point Location {
get; }
1203 string GetAttribute(
string attributeName);
1204 void SetAttribute(
string attributeName,
string value);
1205 string GetCssValue(
string propertyName);
1206 string GetDomAttribute(
string attributeName);
1207 string GetDomProperty(
string propertyName);
1209 void Click(ModifierKeys modifierKeys);
1210 void MiddleClick(ModifierKeys modifierKeys = ModifierKeys.NONE);
1212 void SendKeys(
string text);
1215 Dictionary<string, object> Attributes {
get; }
1216 Dictionary<string, object> CssAttributes {
get; }
1217 Dictionary<string, object> DomAttributes {
get; }
1218 Dictionary<string, object> DomProperties{
get; }
1219 string AttributeName {
get; }
1220 string Href {
get; }
1222 string Value {
get; }
1223 string Placeholder {
get; }
1224 string Xpath {
get; }
1227 string FullXPath {
get; }
1235 string PageURL {
get; }
1237 dynamic WebElement {
get; }
1238 bool IsClickable(
bool publishEvent =
true);
1243 #endregion GPALElement
1244 #region Cryptography
1321 #endregion Cryptography
1326 IAllowWhen Given<T1>(Action<T1> step, T1 arg1);
1327 IAllowWhen Given<T1, T2>(Action<T1, T2> step, T1 arg1, T2 arg2);
1328 IAllowWhen Given<T1, T2, T3>(Action<T1, T2, T3> step, T1 arg1, T2 arg2, T3 arg3);
1334 IAllowAnd When<T1>(Action<T1> step, T1 arg1);
1335 IAllowAnd When<T1, T2>(Action<T1, T2> step, T1 arg1, T2 arg2);
1336 IAllowAnd When<T1, T2, T3>(Action<T1, T2, T3> step, T1 arg1, T2 arg2, T3 arg3);
1342 IAllowThen And<T1>(Action<T1> step, T1 arg1);
1343 IAllowThen And<T1, T2>(Action<T1, T2> step, T1 arg1, T2 arg2);
1344 IAllowThen And<T1, T2, T3>(Action<T1, T2, T3> step, T1 arg1, T2 arg2, T3 arg3);
1350 IAllowThen Then<T1>(Action<T1> step, T1 arg1);
1351 IAllowThen Then<T1, T2>(Action<T1, T2> step, T1 arg1, T2 arg2);
1352 IAllowThen Then<T1, T2, T3>(Action<T1, T2, T3> step, T1 arg1, T2 arg2, T3 arg3);
1355 #region <Request Settings>
1356 [Interface(Description =
"Describe an API request for .Fetch to issue from inside the page")]
1359 [Settings(Description =
"Replace a query parameter's value with the next numbered token")]
1361 [Settings(Description =
"Path or full URL to request. A path rides the origin the browser is already on")]
1363 [Settings(Description =
"HTTP method, for example GET, POST, PUT, DELETE. [GET (default)]")]
1365 [Settings(Description =
"Add a query parameter written as \"name=value\". Call once per parameter")]
1367 [Settings(Description =
"Add a request header written as \"Name: value\". Call once per header")]
1369 [Settings(Description =
"Body to send, used as-is")]
1371 [Settings(Description =
"Content type of the body. [application/json (default)]")]
1373 [Settings(Description =
"What this API calls its first page, which the page token counts on from. [0 (default)]")]
1375 [Settings(Description =
"The marker replaced with the page number, wherever it appears in the path, a parameter value, a header value or the body. Give it a numbered token to hand GPAL one of the token positions. [{page} (default)]")]
1377 [Settings(Description =
"Handler called after each row of tokens is fetched, with that row's pages. Return -1 to stop")]
1379 [Settings(Description =
"Name of request (used in messages and errors)")]
1380 IAllowToGPALObject<GPALRequest> WithName(
string name);
1382 #endregion <Request Settings>
1383 public interface IAllowToGPALObject<TResult>
1385 [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() ]")]
1386 TResult ToGPALObject();
1397 IGPALYouTube WithPrivacy(Enums.YouTubePrivacy privacy);
1398 IGPALYouTube WithCategory(Enums.YouTubeCategory category);
1402 IGPALYouTube WithVideos(IEnumerable<Browser.YouTubeUploadResult> results);
1403 IGPALYouTube WaitForProcessing(
int pollIntervalSeconds = 60);
1404 IGPALYouTube WithOutputTo(System.Windows.Forms.TextBoxBase control);
1406 void WaitForCompletion();
Application object that contains the fluent methods to create your Application workflow....
delegate CallIfStatus CallIfDelegate(Application application, List< IGPALAutomationElement > foundElements, List< IGPALAutomationElement > matchedElements, Selector selector, bool matchedAll)
Delegate callback for the CallIfFound/CallIfNotFound EventHandlers which will be invoked when a selec...
Browser object that contains the fluent methods to create your Browser workflow. Instatiated using G...
delegate CallIfStatus CallOnFailDelegate(IBrowser browser, GPALFailure failure, string detail)
Delegate for the CallOnFail handler, invoked when something fails that the workflow,...
delegate CallIfStatus CallAfterFetchDelegate(IBrowser browser, List< string > results, IGPALGrid< string > tokens, int tokenIdx)
Delegate callback for the CallAfterFetch handler declared on a GPALRequest, invoked after each row of...
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....
Result returned by GPALYouTube.CreatePlaylist containing the playlist ID and public URL.
Result returned by GPALYouTube.Upload containing the assigned video ID, public URL,...
Video metadata returned by GPALYouTube.GetResults. Tags are populated for direct video lookups; searc...
Represents a client-side bounding rectangle (similar to DOMRect) with additional convenience properti...
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].
A GPAL multiline textare instantiated with GPAL.TextArea for use on GPAL forms. Callback EventHandle...
Everything starts here, all the GPAL controls and global settings using fluent syntax are here....
Deserialized contents of a Google Cloud service account JSON key file, used by GoogleHandler....
Fluent REST client for making API calls with a chained interface. Supports defining workflows,...
GPAL Selector used to locate Application and Browser elements. Instantiated with GPAL....
delegate CallIfStatus webMatchingFunction(List< IGPALElement > foundElements, out List< IGPALElement > matchedElements, out bool matchedAll, Selector selector, bool ExactMatch=true)
Custom matching function, must return all matched elements and an indicator as to whether all element...
delegate CallIfStatus appMatchingFunction(List< GPALAutomationElement > foundElements, out List< GPALAutomationElement > matchedElements, out bool matchedAll, Selector selector, bool ExactMatch=true)
Custom matching function, must return all matched elements and an indicator as to whether all element...
Represents XPath matching information returned by advanced selector strategies.
IAllowAIOutput WithLiveInputFrom(GPALForm.GPALTextArea textArea, int debounceMilliseconds=500)
Like WithInputFrom(object), but also wires the control's TextChanged event (debounced) to call Execut...
IAllowAIOutput WithLiveInputFrom(GPALForm.GPALInput input, int debounceMilliseconds=500)
Like WithInputFrom(object), but also wires the control's TextChanged event (debounced) to call Execut...
IAllowParametersAndActions Execute(out List< int > rowCountsPerStatement)
Per-statement breakdown (via SqlCommand.StatementCompleted) instead of the single aggregate count.
SaveTo(...) already ran the read (an out parameter forces that), so chaining .Execute() afterward wou...
IAllowDatabaseSettings GetRowCount(out List< int > rowCountsPerTable)
Only SaveTo(out IGPALGrid<string>) returns this - meaningless for SaveTo(DataTable)/SaveTo(DataSet),...
IAllowRESTExecution SendString(string text, int delayMs=0)
Simulates typing in OttoMagic: dispatches key events character-by-character. Honors GPAL....
Represents a premiere schedule time. Presets (In5Minutes, In1Hour, etc.) store a relative offset and ...