public void Click(SeleniumEvent se) { if (!_elements.ContainsKey(se.Id)) { return; } IWebElement element = _elements[se.Id]; switch (se.Value) { case "2": ((IJavaScriptExecutor)_driver).ExecuteScript("arguments[0].click();", new object[1] { element }); break; case "3": new Actions(_driver).MoveToElement(element).Click().Perform(); break; default: element.Click(); break; } }
public void GoToFrame(SeleniumEvent se) { if (!string.IsNullOrWhiteSpace(se.Id)) { _driver.SwitchTo().Frame(_elements[se.Id]); } else { _driver.SwitchTo().Frame(int.Parse(se.Value)); } }
public void DoScroll(SeleniumEvent se) { string[] args = se.Value.GetSuValues(); int num = int.Parse(args[0]); for (int index = 1; index <= num; ++index) { ((IJavaScriptExecutor)_driver).ExecuteScript("window.scrollTo({top: document.body.scrollHeight / " + num.ToString() + " * " + index.ToString() + ", behavior: \"smooth\"});", Array.Empty <object>()); DoSleep(args[1]); } }
public void DoHMove(SeleniumEvent se) { if (!_elements.ContainsKey(se.Id)) { return; } string[] suValues = se.Value.GetSuValues(); Actions actions = new Actions(_driver); actions.ClickAndHold(_elements[se.Id]).MoveByOffset(int.Parse(suValues[0]), int.Parse(suValues[1])).Perform(); actions.Release(_elements[se.Id]); }
public void DoWin(SeleniumEvent se, int cnt = 1) { foreach (string winHandle in _driver.WindowHandles) { _driver.SwitchTo().Window(winHandle); if (_driver.Title.Contains(se.Value)) { return; } } if (cnt > 10) { throw new NoSuchElementException($"查找失败[{se.Cmd}]-[{se.Value}]"); } else { DoWin(se, cnt++); } }
//public void DoEvents(string eve, List<SeleniumEvent> events,ref string continuEvent) public void DoEvents(SeleniumScriptModel model) { foreach (SeleniumOrder item in model.Orders) { LogUtility.WriteInfo($"【Order开始】-【{item.File}-{item.Case}-{item.Sid}-{item.Back}】"); // 初期 _order = item; _elements = new Dictionary <string, IWebElement>(); _logs = new List <SeleniumEvent>(); _id = 1; string goNo = null; for (int i = 0; i < model.Events[_order.Sid][_order.Case].Count();) { if (FlgStop) { throw new Exception("Stop"); } SeleniumEvent temp = model.Events[_order.Sid][_order.Case][i]; // Skip if (string.IsNullOrWhiteSpace(temp.Cmd) && string.IsNullOrWhiteSpace(temp.Value)) { continue; } SeleniumEvent se = new SeleniumEvent() { No = temp.No, Id = temp.Id, Cmd = temp.Cmd, Value = temp.Value, Range = temp.Range, }; // Replace Args if (se.Value.Contains("$")) { model.Args.Keys.ToList().ForEach(k => se.Value = se.Value.Replace(k, model.Args[k])); } // Do Event goNo = DoCommand(model, se); // Add Range if (!string.IsNullOrWhiteSpace(se.Range)) { _logs.Add(se); } // Log LogUtility.WriteInfo($"【Event执行成功】-【{se.Id}-{se.Value}】"); // Next if (string.IsNullOrWhiteSpace(goNo)) { i++; } else { for (int j = 0; j < model.Events[_order.Sid][_order.Case].Count(); j++) { if (goNo == model.Events[_order.Sid][_order.Case][j].No) { i = j; goNo = null; break; } } } } LogUtility.WriteInfo($"【Order终了】-【{item.File}-{item.Case}-{item.Sid}-{item.Back}】"); } }
public void GoToMove(SeleniumEvent se) => new Actions(_driver).MoveToElement(_elements[se.Id]).Perform();
public void DoSleep(SeleniumEvent se) => DoSleep(se.Value);
public void DoUrl(SeleniumEvent se) => _driver.Navigate().GoToUrl(se.Value);
public void DoKeys(SeleniumEvent se) => _elements[se.Id].SendKeys(se.Value);
public string GetElement(SeleniumEvent se) { string[] arr = se.Value.GetSuValues(); WebDriverWait wait; if (arr.Length >= 2) { wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(int.Parse(arr[1]))) { PollingInterval = TimeSpan.FromMilliseconds(500.0) }; wait.IgnoreExceptionTypes(typeof(NoSuchElementException)); } else { wait = _wait; } IWebElement iwebElement = null; try { switch (se.Cmd) { case "$id": iwebElement = FindIdElement(arr[0], wait); break; case "$class": iwebElement = FindClassElement(arr[0], wait); break; case "$link": iwebElement = FindLinkElement(arr[0], wait); break; case "$linkpart": iwebElement = FindLinkPartElement(arr[0], wait); break; case "$xpath": iwebElement = FindXPathElement(arr[0], wait); break; case "$name": iwebElement = FindNameElement(arr[0], wait); break; case "$cssselect": iwebElement = FindCsElement(arr[0], wait); break; case "$tag": iwebElement = FindTagElement(arr[0], wait); break; default: break; } } catch (WebDriverTimeoutException) { } // Add Element if (iwebElement != null) { if (_elements.ContainsKey(se.Id)) { _elements[se.Id] = iwebElement; } else { _elements.Add(se.Id, iwebElement); } } else if (wait == _wait) { throw new NoSuchElementException($"查找失败[{se.Cmd}]-[{se.Value}]"); } // value;outtime;find go to;not find go to if (arr.Length >= 3 && iwebElement != null) { return(arr[2]); } if (arr.Length >= 4 && iwebElement == null) { return(arr[3]); } else { return(null); } }
public void GoToDown(SeleniumScriptModel model, SeleniumEvent se) => SeleniumHelper.SuDown(model.OutPath + @"\down", _elements[se.Id].GetAttribute(se.Value));
public string DoCommand(SeleniumScriptModel model, SeleniumEvent se) { if (se.Cmd.StartsWith("$")) { switch (se.Cmd) { case "$pic": GetPic(model.OutPath); break; case "$class": case "$id": case "$link": case "$linkpart": case "$xpath": case "$name": case "$cssselect": case "$tag": return(GetElement(se)); case "$goto": DoUrl(se); break; case "$win": DoWin(se); break; case "$sleep": DoSleep(se); break; case "$click": Click(se); break; case "$hmove": DoHMove(se); break; case "$scroll": DoScroll(se); break; case "$frame": GoToFrame(se); break; case "$frameout": GoOutFrame(); break; case "$back": GoToBack(); break; case "$forward": GoToForward(); break; case "$refresh": GoToRefresh(); break; case "$move": GoToMove(se); break; case "$down": GoToDown(model, se); break; case "$maxscreen": WinMax(); break; default: break; } } else { DoKeys(se); return(null); } return(null); }