Exemple #1
0
        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;
            }
        }
Exemple #2
0
 public void GoToFrame(SeleniumEvent se)
 {
     if (!string.IsNullOrWhiteSpace(se.Id))
     {
         _driver.SwitchTo().Frame(_elements[se.Id]);
     }
     else
     {
         _driver.SwitchTo().Frame(int.Parse(se.Value));
     }
 }
Exemple #3
0
        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]);
            }
        }
Exemple #4
0
        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]);
        }
Exemple #5
0
        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++);
            }
        }
Exemple #6
0
        //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}】");
            }
        }
Exemple #7
0
 public void GoToMove(SeleniumEvent se)
 => new Actions(_driver).MoveToElement(_elements[se.Id]).Perform();
Exemple #8
0
 public void DoSleep(SeleniumEvent se)
 => DoSleep(se.Value);
Exemple #9
0
 public void DoUrl(SeleniumEvent se)
 => _driver.Navigate().GoToUrl(se.Value);
Exemple #10
0
 public void DoKeys(SeleniumEvent se)
 => _elements[se.Id].SendKeys(se.Value);
Exemple #11
0
        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);
            }
        }
Exemple #12
0
 public void GoToDown(SeleniumScriptModel model, SeleniumEvent se)
 => SeleniumHelper.SuDown(model.OutPath + @"\down", _elements[se.Id].GetAttribute(se.Value));
Exemple #13
0
        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);
        }