コード例 #1
0
ファイル: CheckInOut.cs プロジェクト: n696395/AutoCheckInOut
 /// <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;
 }
コード例 #2
0
ファイル: CheckInOut.cs プロジェクト: n696395/AutoCheckInOut
        /// <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);
            }
        }
コード例 #3
0
        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());
            }
        }
コード例 #4
0
ファイル: CheckInOut.cs プロジェクト: n696395/AutoCheckInOut
 /// <summary>
 /// Start Check In/Out
 /// </summary>
 /// <param name="status"> Check Status</param>
 public void startcheck(checkstatus status)
 {
     _Status = status;
     startcheckInOut();
 }