protected override void Execute(NativeActivityContext context) { var selector = Selector.Get(context); var sel = new NMSelector(selector); var timeout = TimeSpan.FromSeconds(3); var from = From.Get(context); var maxresults = MaxResults.Get(context); NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); do { elements = NMSelector.GetElementsWithuiSelector(sel, from); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } context.SetValue(Elements, elements); IEnumerator <NMElement> _enum = elements.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } else { throw new Interfaces.ElementNotFoundException("Failed locating item"); } }
public IElement[] GetElementsWithSelector(Selector selector, IElement fromElement = null, int maxresults = 1) { if (!(selector is NMSelector nmselector)) { nmselector = new NMSelector(selector.ToString()); } var result = NMSelector.GetElementsWithuiSelector(nmselector, fromElement, maxresults); return(result); }
private async void Highlight_Click(object sender, RoutedEventArgs e) { string SelectorString = ModelItem.GetValue <string>("Selector"); int maxresults = ModelItem.GetValue <int>("MaxResults"); var selector = new NMSelector(SelectorString); var elements = NMSelector.GetElementsWithuiSelector(selector, null, maxresults); foreach (var ele in elements) { await ele.Highlight(false, System.Drawing.Color.Red, TimeSpan.FromSeconds(1)); } }
private async void Highlight_Click(object sender, RoutedEventArgs e) { ModelItem loadFrom = ModelItem.Parent; string loadFromSelectorString = ""; NMSelector anchor = null; int parentmaxresults = 1; while (loadFrom.Parent != null) { var p = loadFrom.Properties.Where(x => x.Name == "Selector").FirstOrDefault(); if (p != null) { loadFromSelectorString = loadFrom.GetValue <string>("Selector"); anchor = new NMSelector(loadFromSelectorString); parentmaxresults = loadFrom.GetValue <int>("MaxResults"); break; } loadFrom = loadFrom.Parent; } string SelectorString = ModelItem.GetValue <string>("Selector"); int maxresults = ModelItem.GetValue <int>("MaxResults"); var selector = new NMSelector(SelectorString); // var elements = NMSelector.GetElementsWithuiSelector(selector, anchor, maxresults); var elements = new List <NMElement>(); if (anchor != null) { var _base = NMSelector.GetElementsWithuiSelector(anchor, null, parentmaxresults); foreach (var _e in _base) { var res = NMSelector.GetElementsWithuiSelector(selector, _e, maxresults); elements.AddRange(res); } } else { var res = NMSelector.GetElementsWithuiSelector(selector, null, maxresults); elements.AddRange(res); } foreach (var ele in elements) { await ele.Highlight(false, System.Drawing.Color.Red, TimeSpan.FromSeconds(1)); } }
protected override void Execute(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } context.SetValue(Elements, elements); IEnumerator <NMElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); if (more) { if (elements.Count() > 1) { context.SetValue(_elements, _enum); } context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } else if (elements.Length < minresults) { throw new Interfaces.ElementNotFoundException("Failed locating " + minresults + " item"); } }
protected override void Execute(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); string browser = sel.browser; if (WaitForReady.Get(context)) { if (from != null) { browser = from.browser; } DoWaitForReady(browser); } var allelements = context.GetValue(_allelements); if (allelements == null) { allelements = new NMElement[] { } } ; var s = new NMSelectorItem(sel[0]); if (!string.IsNullOrEmpty(s.url)) { var tab = NMHook.FindTabByURL(browser, s.url); if (tab != null) { if (!tab.highlighted || !tab.selected) { var _tab = NMHook.selecttab(browser, tab.id); } } } do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); Log.Selector("BEGIN:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); // allelements = allelements.Concat(elements).ToArray(); if (allelements.Length > 0) { var newelements = new List <NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { var element = elements[i]; if (!allelements.Contains(element)) { newelements.Insert(0, element); } } elements = newelements.ToArray(); //if(elements.Count() > 20) //{ // for(var i=0; i < allelements.Length && i < elements.Length; i++) // { // if (!eq.Equals(allelements[i], elements[i]) || allelements[i].GetHashCode() != elements[i].GetHashCode()) // { // Log.Output(allelements[i].GetHashCode() + " / " + elements[i].GetHashCode()); // } // } //} } } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } if ((elements.Length + allelements.Length) < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator <NMElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); //if (lastelements.Length == elements.Length && lastelements.Length > 0) //{ // var eq = new Activities.NMEqualityComparer(); // more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); //} if (more) { allelements = allelements.Concat(elements).ToArray(); var eq = new Activities.NMEqualityComparer(); allelements = allelements.Distinct(eq).ToArray(); //var allelementslength = allelements.Length; //Array.Resize(ref allelements, allelements.Length + elements.Length); //Array.Copy(elements, 0, allelements, allelementslength, elements.Length); } context.SetValue(_allelements, allelements); context.SetValue(Elements, allelements); Log.Selector("END:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); if (more) { context.SetValue(_elements, _enum); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
protected override void Execute(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); if (WaitForReady.Get(context)) { string browser = sel.browser; if (from != null) { browser = from.browser; } if (!string.IsNullOrEmpty(browser)) { NMHook.enumtabs(); if (browser == "chrome" && NMHook.CurrentChromeTab != null) { NMHook.WaitForTab(NMHook.CurrentChromeTab.id, browser, TimeSpan.FromSeconds(10)); } if (browser == "ff" && NMHook.CurrentFFTab != null) { NMHook.WaitForTab(NMHook.CurrentFFTab.id, browser, TimeSpan.FromSeconds(10)); } } } do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } context.SetValue(Elements, elements); var lastelements = context.GetValue(_lastelements); if (lastelements == null) { lastelements = new NMElement[] { } } ; context.SetValue(_lastelements, elements); if ((elements.Length + lastelements.Length) < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator <NMElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); if (lastelements.Length == elements.Length && lastelements.Length > 0) { var eq = new Activities.NMEqualityComparer(); more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); } if (more) { context.SetValue(_elements, _enum); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
public override IElement[] GetElements(IElement fromElement = null, int maxresults = 1) { return(NMSelector.GetElementsWithuiSelector(this, fromElement, maxresults)); }
protected override async Task <object> ExecuteAsync(NativeActivityContext context) { IsCancel = false; var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From?.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } NMElement[] elements = { }; string browser = sel.browser; if (WaitForReady != null && WaitForReady.Get(context)) { if (from != null) { browser = from.browser; } DoWaitForReady(browser); } var allelements = context.GetValue(_allelements); if (allelements == null) { allelements = new NMElement[] { } } ; var s = new NMSelectorItem(sel[0]); if (!string.IsNullOrEmpty(s.url)) { var tab = NMHook.FindTabByURL(browser, s.url); if (tab != null) { if (!tab.highlighted || !tab.selected) { var _tab = NMHook.selecttab(browser, tab.id); } } } await Task.Run(() => { Stopwatch sw = new Stopwatch(); sw.Start(); do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); Log.Selector("BEGIN:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); if (allelements.Length > 0) { var newelements = new List <NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { var element = elements[i]; if (!allelements.Contains(element)) { newelements.Insert(0, element); } } elements = newelements.ToArray(); } } while (elements.Count() == 0 && sw.Elapsed < timeout && !IsCancel); if (IsCancel) { Console.WriteLine("was Canceled: true! DisplayName" + DisplayName); } //if (sw.Elapsed >= timeout) //{ // Console.WriteLine("Timeout !"); //} }); return(elements); }
protected override void StartLoop(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } if (timeout.Minutes > 5 || timeout.Hours > 1) { Activity _Activity = null; try { var strProperty = context.GetType().GetProperty("Activity", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var strGetter = strProperty.GetGetMethod(nonPublic: true); _Activity = (Activity)strGetter.Invoke(context, null); } catch (Exception) { } if (_Activity != null) { Log.Warning("Timeout for Activity " + _Activity.Id + " is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } else { Log.Warning("Timeout for on of your NM.GetElements is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } } NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); string browser = sel.browser; if (WaitForReady.Get(context)) { if (from != null) { browser = from.browser; } DoWaitForReady(browser); } var allelements = context.GetValue(_allelements); if (allelements == null) { allelements = new NMElement[] { } } ; var s = new NMSelectorItem(sel[0]); if (!string.IsNullOrEmpty(s.url)) { var tab = NMHook.FindTabByURL(browser, s.url); if (tab != null) { if (!tab.highlighted || !tab.selected) { var _tab = NMHook.selecttab(browser, tab.id); } } } do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); Log.Selector("BEGIN:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); // allelements = allelements.Concat(elements).ToArray(); if (allelements.Length > 0) { var newelements = new List <NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { var element = elements[i]; if (!allelements.Contains(element)) { newelements.Insert(0, element); } } elements = newelements.ToArray(); //if(elements.Count() > 20) //{ // for(var i=0; i < allelements.Length && i < elements.Length; i++) // { // if (!eq.Equals(allelements[i], elements[i]) || allelements[i].GetHashCode() != elements[i].GetHashCode()) // { // Log.Output(allelements[i].GetHashCode() + " / " + elements[i].GetHashCode()); // } // } //} } } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } if ((elements.Length + allelements.Length) < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator <NMElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); //if (lastelements.Length == elements.Length && lastelements.Length > 0) //{ // var eq = new Activities.NMEqualityComparer(); // more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); //} if (more) { allelements = allelements.Concat(elements).ToArray(); var eq = new Activities.NMEqualityComparer(); allelements = allelements.Distinct(eq).ToArray(); //var allelementslength = allelements.Length; //Array.Resize(ref allelements, allelements.Length + elements.Length); //Array.Copy(elements, 0, allelements, allelementslength, elements.Length); } context.SetValue(_allelements, allelements); context.SetValue(Elements, allelements); Log.Selector("END:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); if (more) { context.SetValue(_elements, _enum); IncIndex(context); SetTotal(context, allelements.Length); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
protected override void Execute(NativeActivityContext context) { var eq = new Activities.NMEqualityComparer(); var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); string browser = sel.browser; if (WaitForReady.Get(context)) { if (from != null) { browser = from.browser; } DoWaitForReady(browser); } var s = new NMSelectorItem(sel[0]); if (!string.IsNullOrEmpty(s.url)) { var tab = NMHook.tabs.Where(x => x.browser == browser && x.url.ToLower().StartsWith(s.url.ToLower())).FirstOrDefault(); if (tab != null) { if (!tab.highlighted || !tab.selected) { var _tab = NMHook.selecttab(browser, tab.id); } } } do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } var lastelements = context.GetValue(_lastelements); if (lastelements == null) { lastelements = new NMElement[] { } } ; context.SetValue(_lastelements, elements); if (lastelements.Length > 0) { var newelements = new List <NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { var element = elements[i]; bool exists = false; foreach (var ele in lastelements) { if (eq.Equals(ele, element)) { exists = true; break; } else if (element.ToString() == ele.ToString()) { var b = eq.Equals(ele, element); } } if (!exists) { newelements.Insert(0, element); } } if (elements.Length > 0) { elements = newelements.ToArray(); newelements = new List <NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { bool exists = false; foreach (var ele in lastelements) { if (eq.Equals(ele, elements[i])) { exists = true; break; } } if (!exists) { newelements.Insert(0, elements[i]); } } elements = newelements.ToArray(); } } if ((elements.Length + lastelements.Length) < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator <NMElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); //if (lastelements.Length == elements.Length && lastelements.Length > 0) //{ // var eq = new Activities.NMEqualityComparer(); // more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); //} if (more) { context.SetValue(_elements, _enum); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } var allelements = context.GetValue(_allelements); if (more) { if (allelements == null) { allelements = new NMElement[] { } } ; var allelementslength = allelements.Length; Array.Resize(ref allelements, allelements.Length + elements.Length); Array.Copy(elements, 0, allelements, allelementslength, elements.Length); } context.SetValue(Elements, allelements); context.SetValue(_allelements, allelements); }
protected override async Task <object> ExecuteAsync(NativeActivityContext context) { IsCancel = false; var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From?.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } NMElement[] elements = { }; sw.Start(); string browser = sel.browser; if (WaitForReady != null && WaitForReady.Get(context)) { if (from != null) { browser = from.browser; } DoWaitForReady(browser); } var allelements = context.GetValue(_allelements); if (allelements == null) { allelements = new NMElement[] { } } ; var s = new NMSelectorItem(sel[0]); if (!string.IsNullOrEmpty(s.url)) { var tab = NMHook.tabs.Where(x => x.browser == browser && x.url.ToLower().StartsWith(s.url.ToLower())).FirstOrDefault(); if (tab != null) { if (!tab.highlighted || !tab.selected) { var _tab = NMHook.selecttab(browser, tab.id); } } } //var id = Guid.NewGuid().ToString(); //context.CreateBookmark(id, (activityContext, bookmark, value) => //{ //}); //Task.Factory.StartNew(() => //{ // // context.RemoveBookmark(id); //}); // await Task.Delay(100); await Task.Run(() => { do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); Log.Selector("BEGIN:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); // allelements = allelements.Concat(elements).ToArray(); if (allelements.Length > 0) { var newelements = new List <NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { var element = elements[i]; if (!allelements.Contains(element)) { newelements.Insert(0, element); } } elements = newelements.ToArray(); //if(elements.Count() > 20) //{ // for(var i=0; i < allelements.Length && i < elements.Length; i++) // { // if (!eq.Equals(allelements[i], elements[i]) || allelements[i].GetHashCode() != elements[i].GetHashCode()) // { // Log.Output(allelements[i].GetHashCode() + " / " + elements[i].GetHashCode()); // } // } //} } } while (elements.Count() == 0 && sw.Elapsed < timeout && !IsCancel); if (IsCancel) { Console.WriteLine("was Canceled: true! DisplayName" + DisplayName); } }); return(elements); }
protected override async Task <object> ExecuteAsync(NativeActivityContext context) { IsCancel = false; var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From?.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } NMElement[] elements = { }; string browser = sel.browser; if (WaitForReady != null && WaitForReady.Get(context)) { if (from != null) { browser = from.browser; } DoWaitForReady(browser); } var allelements = context.GetValue(_allelements); if (allelements == null) { allelements = new NMElement[] { } } ; if (timeout.Minutes > 5 || timeout.Hours > 1) { Activity _Activity = null; try { var strProperty = context.GetType().GetProperty("Activity", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var strGetter = strProperty.GetGetMethod(nonPublic: true); _Activity = (Activity)strGetter.Invoke(context, null); } catch (Exception) { } if (_Activity != null) { Log.Warning("Timeout for Activity " + _Activity.Id + " is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } else { Log.Warning("Timeout for on of your NM.GetElementAsync is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } } var s = new NMSelectorItem(sel[0]); if (!string.IsNullOrEmpty(s.url)) { var tab = NMHook.FindTabByURL(browser, s.url); if (tab != null) { if (!tab.highlighted || !tab.selected) { var _tab = NMHook.selecttab(browser, tab.id); } } } await Task.Run(() => { Stopwatch sw = new Stopwatch(); sw.Start(); do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); Log.Selector("BEGIN:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); if (allelements.Length > 0) { var newelements = new List <NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { var element = elements[i]; if (!allelements.Contains(element)) { newelements.Insert(0, element); } } elements = newelements.ToArray(); } } while (elements.Count() == 0 && sw.Elapsed < timeout && !IsCancel); if (IsCancel) { Console.WriteLine("was Canceled: true! DisplayName" + DisplayName); } //if (sw.Elapsed >= timeout) //{ // Console.WriteLine("Timeout !"); //} }); return(elements); }