Exemple #1
0
        public void Do(QuyTrinh qt, object parent)
        {
            foreach (var next in qt.quy_trinh.OrderBy(x => x.thu_tu))
            {
                switch (next.hanh_dong)
                {
                case HanhDong.LIST:
                    if (parent == null)
                    {
                        var eles = wait.Until(w => w.FindElements(By.XPath(next.xpath)));
                        Do(next, eles);
                    }
                    break;

                case HanhDong.CLICK:
                    if (parent == null)
                    {
                        try
                        {
                            var ele = wait.Until(w => w.FindElement(By.XPath(next.xpath)));
                            if (ele != null)
                            {
                                ele.Click();
                            }
                        }
                        catch (Exception)
                        {
                        }

                        Do(next, null);
                    }
                    else
                    {
                        if (typeof(System.Collections.ObjectModel.ReadOnlyCollection <IWebElement>) == parent.GetType())
                        {
                            foreach (var item in (IEnumerable <IWebElement>)parent)
                            {
                                if (browser.WindowHandles.Count > 1)
                                {
                                    foreach (var tab in browser.WindowHandles.Skip(1))
                                    {
                                        browser.SwitchTo().Window(tab);
                                        browser.Close();
                                    }
                                    browser.SwitchTo().Window(browser.WindowHandles[0]);
                                }

                                if (item.Displayed)
                                {
                                    item.Click();
                                }
                                else
                                {
                                    IJavaScriptExecutor js = (IJavaScriptExecutor)browser;
                                    js.ExecuteScript("arguments[0].click();", item);
                                }
                                Do(next, null);
                            }
                        }
                    }
                    break;

                case HanhDong.WAIT:
                    System.Threading.Thread.Sleep(next.time_out);
                    break;

                case HanhDong.GO_TO:
                    if (typeof(System.Collections.ObjectModel.ReadOnlyCollection <IWebElement>) == parent.GetType())
                    {
                        List <string> lst_url = new List <string>();
                        foreach (var item in (IEnumerable <IWebElement>)parent)
                        {
                            lst_url.Add(item.GetAttribute(next.xpath.TrimStart('@')));
                        }

                        foreach (var url in lst_url)
                        {
                            browser.Url = url;
                            Do(next, null);
                        }
                    }

                    break;
                }
            }
        }
Exemple #2
0
        public void DoWorkFlow()
        {
            List <QuyTrinh> lst = new List <QuyTrinh>();
            var             qt1 = new QuyTrinh()
            {
                thu_tu = 1, ten = "Tìm link", hanh_dong = HanhDong.LIST, xpath = "//tbody[@class='tbody-job']//td[3]/a", time_out = 2000
            };
            var qt2 = new QuyTrinh()
            {
                thu_tu = 2, ten = "Click link", hanh_dong = HanhDong.GO_TO, xpath = "@href", time_out = 2000
            };

            qt2.quy_trinh.Add(new QuyTrinh()
            {
                thu_tu = 1, ten = "Đợi", hanh_dong = HanhDong.WAIT, xpath = "", time_out = 2000
            });
            var qt3 = new QuyTrinh()
            {
                thu_tu = 2, ten = "Tim", hanh_dong = HanhDong.LIST, xpath = "//div[@class='table-responsive']/table//td[2]/a", time_out = 2000
            };

            qt3.quy_trinh.Add(new QuyTrinh()
            {
                thu_tu    = 1,
                ten       = "Xem CV",
                hanh_dong = HanhDong.CLICK,
                xpath     = ".",
                time_out  = 2000,
                quy_trinh = new List <QuyTrinh>()
                {
                    new QuyTrinh()
                    {
                        ten       = "Tải CV",
                        thu_tu    = 1,
                        hanh_dong = HanhDong.CLICK,
                        xpath     = "//a[@id='btn-download-candidate']"
                    },
                    new QuyTrinh()
                    {
                        ten       = "Đóng CV",
                        thu_tu    = 2,
                        hanh_dong = HanhDong.CLICK,
                        xpath     = "//div[@title='Đóng lại']"
                    }
                }
            });
            qt2.quy_trinh.Add(qt3);
            qt1.quy_trinh.Add(qt2);
            lst.Add(qt1);

            foreach (var qt in lst.OrderBy(x => x.thu_tu))
            {
                switch (qt.hanh_dong)
                {
                case HanhDong.LIST:
                    var eles = wait.Until(w => w.FindElements(By.XPath(qt.xpath)));
                    Do(qt, eles);
                    break;

                case HanhDong.CLICK:
                    var ele = wait.Until(w => w.FindElement(By.XPath(qt.xpath)));
                    if (ele != null)
                    {
                        ele.Click();
                    }
                    break;

                case HanhDong.WAIT:
                    break;

                case HanhDong.GO_TO:
                    browser.Url = qt.xpath;
                    Do(qt, null);

                    break;
                }
            }
        }