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; } } }
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; } } }