/// <summary> /// Constructor /// </summary> /// <param name="WebDriver">Web Driver</param> /// <param name="URL">Web address</param> /// <param name="Name">your name</param> /// <param name="status">In or out</param> public CheckInOut(IWebDriver WebDriver, string URL, string Name, checkstatus status) { _Driver = WebDriver; _URL = URL; _Name = Name; _Status = status; }
/// <summary> /// Check if already check In/Out /// </summary> /// <param name="status">In/Out</param> /// <returns>true mean already check in/out, false mean not.</returns> public bool IsChecked(string Name, checkstatus status) { try { _Driver.Navigate().GoToUrl(_URL); WebDriverWait wait = new WebDriverWait(_Driver, _timeout); //Wait page load complete IWebElement table = _Driver.FindElement(By.ClassName("right_main")).FindElement((By.ClassName("right_main_text"))); IReadOnlyList <IWebElement> tableRow = table.FindElements(By.TagName("tr")); string ChtStatus = status == checkstatus.IN ? "上班" : "下班"; var ss = from row in tableRow where row.Text.Contains(Name) && row.Text.Contains(ChtStatus) select row; if (ss?.Count() > 0) { foreach (var row in tableRow) { if (row.Text.Contains(Name) && row.Text.Contains(ChtStatus)) { Console.WriteLine($"Check In/Out OK, find=>[{row.Text}]"); return(true); } } } Console.WriteLine($"Can not find Name={Name}, CheckIn/Out={status}"); return(false); }catch (Exception ex) { Console.WriteLine(ex.ToString()); return(false); } }
public static void Main(string[] args) { try { //Read config XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(configFileNamePath); string Name = xmldoc.SelectSingleNode("/root/name").InnerText.Trim(); string URL = xmldoc.SelectSingleNode("/root/url").InnerText.Trim(); string delaytime = xmldoc.SelectSingleNode("/root/delay").InnerText.Trim(); int DelaySecond = rnd.Next(1, int.Parse(delaytime)); // minute //create Driver IWebDriver driver = new PhantomJSDriver(); checkstatus status = (checkstatus)Enum.Parse(typeof(checkstatus), args[0].ToUpper()); CheckInOut chk = new CheckInOut(driver, URL, Name, status); //Check before chcek In/Out bool before_result = chk.IsChecked(Name, status); if (before_result == true)//Already Check { chk.TakingScreenShoot("BeforeCheckInOut"); Console.WriteLine($"Already checked, Name={Name}, Status={status.ToString("g")}, Time={DateTime.Now.ToString("yyyyMMddHHmmss")}"); chk?.close(); return; } //delay Console.WriteLine($"Wait {DelaySecond} sec."); Thread.Sleep(DelaySecond * 1000); //start check chk.startcheckInOut(); bool after_result = chk.IsChecked(Name, status); chk.TakingScreenShoot("AfterCheckInOut"); if (after_result == false) { Console.WriteLine($"Check Failed, Name={Name}, Status={status.ToString("g")}, Time={DateTime.Now.ToString("yyyyMMddHHmmss")}"); } else { Console.WriteLine($"Check OK, Name={Name}, Status={status.ToString("g")}, Time={DateTime.Now.ToString("yyyyMMddHHmmss")}"); } chk.close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
/// <summary> /// Start Check In/Out /// </summary> /// <param name="status"> Check Status</param> public void startcheck(checkstatus status) { _Status = status; startcheckInOut(); }