Ejemplo n.º 1
0
        /// <summary>
        ///     Select visa Type and check for date
        /// </summary>
        /// <returns>False - if data was to hight or not available, True - data is good for using and Capthca is needed</returns>
        public void SelectVisaType(
            VisaDataSet.ClientDataRow dataRow)
        {
            _logger.Trace($"Start SelectVisaType. Error = {Error}. ReEnterCaptcha = {ReEnterCaptcha}");
            ReEnterCaptcha = false;
            var visaCat = FindElementWithChecking(By.Id(VisaCategory))
                          .FindElement(
                By.CssSelector($"option[value=\"{dataRow.VisaType}\"]"));

            if (visaCat.Selected)
            {
                ReEnterCaptcha = true;
                //-Оберіть візову категорію-
                FindElementWithChecking(By.Id(VisaCategory))
                .FindElement(
                    By.CssSelector($"option[value=\"-1\"]"))
                .Click();
                _logger.Info("SelectVisaType. visaCategory " +
                             $"option[value=-1]  Click");
            }
            else
            {
                visaCat.Click();
                _logger.Info("SelectVisaType. visaCategory " +
                             $"option[value={dataRow.VisaType}]  Click");
            }

            _logger.Trace($"End SelectVisaType. Error = {Error}. ReEnterCaptcha = {ReEnterCaptcha}");
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Require Captcha after it
        /// </summary>
        public void ProvidePeopleCount(VisaDataSet.ClientDataRow dataRow)
        {
            _logger.Info($"Start ProvidePeopleCount. Error = {Error}. ");
            var query = FindElementWithChecking(By.Id(NumOfApplicants));

            _logger.Info(
                $"ProvidePeopleCount. numOfApplicants Clear and set {dataRow.PeopleCount}");

            if (dataRow.PeopleCount != "1")
            {
                query.Clear();
                query.SendKeys(dataRow.PeopleCount);
            }

            query = FindElementWithChecking(By.Id(NumOfChildrens));
            _logger.Info(
                $"ProvidePeopleCount. numOfChildrens Clear and set {dataRow.ChildsCount}");

            if (dataRow.ChildsCount != "0")
            {
                query.Clear();
                query.SendKeys(dataRow.ChildsCount);
            }
            _logger.Info($"End ProvidePeopleCount. Error = {Error}");
        }
Ejemplo n.º 3
0
        public void ClientData(VisaDataSet.ClientDataRow dataRow)
        {
            _logger.Trace($"Start ClientData. Error = {Error}");
            var txtBox = FindElementWithChecking(By.Id(EndPassportDate));

            txtBox.Clear();
            txtBox.SendKeys(
                dataRow.EndPassportDate.ToShortDateString().Replace(".",
                                                                    "/"));
            _logger.Info(
                $"ClientData. endPassportDate set text {dataRow.EndPassportDate.ToShortDateString().Replace(".", "/")}");

            FindElementWithChecking(By.Id(StatusField))
            .FindElement(
                By.CssSelector($"option[value=\"{dataRow.Status}\"]"))
            .Click();
            _logger.Info(
                $"ClientData. statusField option[value={dataRow.Status}] Click");

            txtBox = FindElementWithChecking(By.Id(PersonName));
            txtBox.Clear();
            txtBox.SendKeys(dataRow.Name);
            _logger.Info($"ClientData. personName set text {dataRow.Name}");

            txtBox = FindElementWithChecking(By.Id(PersonLastName));
            txtBox.Clear();
            txtBox.SendKeys(dataRow.LastName);
            _logger.Info(
                $"ClientData. personLastName set text {dataRow.LastName}");

            txtBox = FindElementWithChecking(By.Id(PersonBirthday));
            txtBox.Clear();
            txtBox.SendKeys(dataRow.Birthday.ToShortDateString().Replace(".",
                                                                         "/"));
            _logger.Info(
                $"ClientData. personBirthday set text {dataRow.Birthday.ToShortDateString().Replace(".", "/")}");

            txtBox = FindElementWithChecking(By.Id(ReturnDate));
            txtBox.Clear();
            txtBox.SendKeys(dataRow.ReturnData.ToShortDateString()
                            .Replace(".",
                                     "/"));
            _logger.Info(
                $"ClientData. returnDate set text {dataRow.ReturnData.ToShortDateString().Replace(".", "/")}");

            FindElementWithChecking(By.Id(Nationality))
            .FindElement(
                By.CssSelector(
                    $"option[value=\"{dataRow.Nationality}\"]"))
            .Click();
            _logger.Info(
                $"ClientData. nationality option[value=\"{dataRow.Nationality}\"] Click");
            _logger.Trace($"End ClientData. Error = {Error}");
        }
Ejemplo n.º 4
0
        public void Receipt(VisaDataSet.ClientDataRow dataRow)
        {
            _logger.Info($"Start Receipt. Error = {Error}.");
            var txtBox = FindElementWithChecking(By.Id(ReceiptNumber));

            txtBox.Clear();
            txtBox.SendKeys(dataRow.NumberOfReceipt);
            _logger.Info(
                $"Receipt. receiptNumber set text {dataRow.NumberOfReceipt}");
            _logger.Info($"End Receipt. Error = {Error}");
        }
Ejemplo n.º 5
0
        public void SelectRegistrationTime(VisaDataSet.ClientDataRow dataRow) // state 16
        {
            _logger.Trace($"Start SelectRegistrationTime. Error = {Error}.");

            OutData = string.Empty;
            FindElementWithChecking(By.Id(RegistryTime)).Click();
            var scr      = _driver.GetScreenshot();
            var fileName = $"{dataRow.Name}_{dataRow.LastName}.jpg";

            scr.SaveAsFile(fileName, ImageFormat.Jpeg);
            EmailManager.SendEmailWithMoneyRequest(dataRow.Email, dataRow.Password);
            EmailManager.SendEmailWithPhoto(fileName, dataRow.Email, dataRow.Password);
            _logger.Trace($"End SelectRegistrationTime. Error = {Error}");
        }
Ejemplo n.º 6
0
        /// <summary>
        ///     Require Captcha after it, also we need to share additional message for user
        /// </summary>
        public void EmailAndPassword(VisaDataSet.ClientDataRow dataRow)
        {
            _logger.Trace($"Start EmailAndPassword. Error = {Error}");
            var txtBox = FindElementWithChecking(By.Id(Email));

            txtBox.Clear();
            txtBox.SendKeys(dataRow.Email);
            _logger.Info($"ClientData. email set text {dataRow.Email}");

            txtBox = FindElementWithChecking(By.Id(PassForMail));
            txtBox.Clear();
            txtBox.SendKeys(dataRow.Password);
            _logger.Info(
                $"ClientData. passForMail set text {dataRow.Password}");
            _logger.Trace($"End EmailAndPassword. Error = {Error}");
        }
Ejemplo n.º 7
0
 public void SelectCityAndReason(VisaDataSet.ClientDataRow dataRow)
 {
     _logger.Info($"Start SelectCityAndReason. Error = {Error}. ");
     FindElementWithChecking(By.Id(VisaCity))
     .FindElement(
         By.CssSelector($"option[value=\"{dataRow.VisaCity}\"]"))
     .Click();
     _logger.Info(
         $"SelectCityAndReason. visaCity option[value={dataRow.VisaCity}]  Click");
     //always be 1 - Подача документів
     FindElementWithChecking(By.Id(Reason))
     .FindElement(By.CssSelector("option[value='1']"))
     .Click();
     _logger.Info(
         "SelectCityAndReason. reason option[value='1'] Click");
     _logger.Info($"End SelectCityAndReason. Error = {Error}. ");
 }
Ejemplo n.º 8
0
        public static VisaDataSet.ClientDataRow[] ImportRowsFromExcel()
        {
            _logger.Trace("Start ImportRowsFromExcel");
            VisaDataSet.ClientDataRow[] resRow = null;
            var visaDataSet = new VisaDataSet();
            int rowsCount   = 0;

            if (OpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                _logger.Info(
                    $"ImportRowsFromExcel _openFileDialog.ShowDialog() == DialogResult.OK  _openFileDialog.FileName = {OpenFileDialog.FileName}");
                var stream = File.Open(OpenFileDialog.FileName,
                                       FileMode.Open,
                                       FileAccess.Read);

                var excelReader = OpenFileDialog.FileName.EndsWith("xls")
                    ? ExcelReaderFactory.CreateBinaryReader(stream)
                                  //1. Reading from a binary Excel file ('97-2003 format; *.xls)
                    : ExcelReaderFactory.CreateOpenXmlReader(stream);
                //4. DataSet - Create column names from first row
                excelReader.IsFirstRowAsColumnNames = true;
                var result   = excelReader.AsDataSet();
                var sheetOne = result?.Tables[0];
                for (int i = 0; i < sheetOne?.Rows.Count; i++)
                {
                    if (sheetOne?.Rows[i][0].ConvertToStringOrNull() != null)
                    {
                        rowsCount = i + 1;
                    }
                    else
                    {
                        break;
                    }
                }
                if (rowsCount == 0)
                {
                    _logger.Trace($"End ImportRowsFromExcel. no one row imported");
                    return(null);
                }
                else
                {
                    resRow = new VisaDataSet.ClientDataRow[rowsCount];
                }
                for (int i = 0; i < rowsCount; i++)
                {
                    var resDataRow = sheetOne?.Rows[i];

                    if (resDataRow == null)
                    {
                        _logger.Error(
                            $"ImportRowsFromExcel resDataRow == null. _openFileDialog.FileName = {OpenFileDialog.FileName}");
                    }
                    else
                    {
                        resRow[i]                 = visaDataSet.ClientData.NewClientDataRow();
                        resRow[i].Nationality     = resDataRow[0].ConvertToStringOrNull();
                        resRow[i].VisaCity        = resDataRow[1].ConvertToStringOrNull();
                        resRow[i].VisaType        = resDataRow[2].ConvertToStringOrNull();
                        resRow[i].NumberOfReceipt =
                            resDataRow[3].ConvertToStringOrNull();
                        resRow[i].EndPassportDate = Convert.ToDateTime(resDataRow[4]);
                        resRow[i].Status          = resDataRow[5].ConvertToStringOrNull();
                        resRow[i].Name            = resDataRow[6].ConvertToStringOrNull();
                        resRow[i].LastName        = resDataRow[7].ConvertToStringOrNull();
                        resRow[i].Birthday        = Convert.ToDateTime(resDataRow[8]);
                        resRow[i].RegistryFom     = Convert.ToDateTime(resDataRow[9]);
                        resRow[i].RegistryTo      = Convert.ToDateTime(resDataRow[10]);
                        if (resDataRow.Table.Columns.Count > 11)
                        {
                            resRow[i].PassportNumber = resDataRow[11].ConvertToStringOrNull();
                            resRow[i].CellNumber     = resDataRow[12].ConvertToStringOrNull();
                        }
                    }
                }
            }
            for (int i = 0; i < rowsCount; i++)
            {
                _logger.Trace(
                    $"ImportRowsFromExcel. resRow[{i}].NumberOfReceipt = {resRow[i]?.NumberOfReceipt}");
            }
            _logger.Trace(
                $"End ImportRowsFromExcel. rowsCount = {rowsCount}");
            return(resRow);
        }
Ejemplo n.º 9
0
        public void StartWork(VisaDataSet.ClientDataRow clientDataRow)
        {
            _logger.Trace(
                $"Start _crawlerWorker_DoWork. State = {_progressState}");

            if (clientDataRow != null)
            {
                CurrentClientDataRow = clientDataRow;
            }

            if (_crawlerRegistry != null)
            {
                _crawlerRegistry.Canceled = Canceled;
            }
            var bBreak = false; //_crawlerWorker_CheckSiteAvailability();

            do
            {
                CrawlerRefreshEngine();
                if (_crawlerRegistry == null)
                {
                    throw new NotImplementedException();
                    //This error instead of NullPointerException,
                    //because if _crawlerRegistry is null here we something code in wrong way
                }
                if (_crawlerRegistry.Canceled)
                {
                    _logger.Warn(
                        $" _crawlerRegistry.Canceled _state={_progressState}");
                    bBreak = true;
                    SetDefaultState();
                    CloseBrowsers(false);
                    _crawlerRegistry.Canceled = false;
                    _crawlerRegistry.Error    = false;
                }
                else if (_crawlerRegistry.Error) // if Error
                {
                    _logger.Warn(
                        $"return _crawlerWorker_DoWork. State = {_progressState}."
                        + $" OutData = {_crawlerRegistry.OutData}. _crawlerRegistry.Error = true ");
                    SetDefaultState();
                    bBreak = true;
                    SystemSounds.Beep.Play();
                    ShowAlert(_crawlerRegistry.OutData.IsNotBlank()
                        ? _crawlerRegistry.OutData
                        : ResManager.GetString(ResKeys.ServerError),
                              true);
                    CloseBrowsers(false);
                    _crawlerRegistry.OutData = string.Empty;
                    _crawlerRegistry.Error   = false;
                }
                else
                {
                    // ReSharper disable once SwitchStatementMissingSomeCases
                    switch (_progressState)
                    {
                    case ProgressState.Start:
                        XtraMessageBox.Show(
                            ResManager.GetString(
                                ResKeys.Complete_Registration),
                            ResManager.GetString(ResKeys.SearchResult),
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
                        bBreak = true;
                        SetDefaultState();
                        break;

                    case ProgressState.SelectVisaType:
                    case ProgressState.ShowMessage:
#if (!GoWithoutDates)
                    case ProgressState.GetFirstDate:
#endif
                    case ProgressState.SubmitDate:
                    case ProgressState.SubmitClientData:
                        string sss = "";
                        if (SetupManager.GetOptions().RuCaptchaKey.IsNotBlank())
                        {
                            sss = _crawlerRegistry.SendRecaptchav2Request(
                                "6Lc7lBATAAAAAG-R0DVv6sR4BJPtVLMFJf7YusKQ");
                        }
                        if (sss.StartsWith("OK"))
                        {
                            ShowAlert(
                                $"OK response: \r\n{sss.Substring(3)}",
                                true);
                        }
                        else
                        {       // captcha is not resolved, maby rucaptcha key is not entered in setupSettings
                            SystemSounds.Beep.Play();
                            ShowAlert(
                                ResManager.GetString(ResKeys.FillCaptchaAndPress),
                                false);
                            if (sss != "")
                            {
                                ShowAlert(
                                    $"Error in response: \r\n{sss}",
                                    true);
                            }
                            bBreak = true;
                        }
                        break;

#if (GoWithoutDates)
                    case ProgressState.GetFirstDate:
                        ShowAlert(
                            ResManager.GetString(ResKeys.Fill_Calendar_And_Captcha),
                            false);
                        bBreak = true;
                        break;
#else
                    case ProgressState.SelectRegistrationTime:
                        SystemSounds.Beep.Play();
                        ShowAlert(_crawlerRegistry.OutData,
                                  true);
                        ShowAlert(
                            ResManager.GetString(ResKeys.FillCaptchaAndPress),
                            false);
                        bBreak = true;
                        break;
#endif
                    case ProgressState.BreakState:
                        SetDefaultState();
                        bBreak = true;
                        break;
                    }
                }
            } while (!bBreak);

            _logger.Trace(
                $"End _crawlerWorker_DoWork. State = {_progressState}."
                + $" _crawlerRegistry.Error = {_crawlerRegistry?.Error}");
        }
Ejemplo n.º 10
0
        public void GetFirstDate(VisaDataSet.ClientDataRow dataRow) // state 13
        {
            _logger.Trace($"Start GetFirstDate. Error = {Error}. dataRow.NumberOfReceipt = {dataRow.NumberOfReceipt}");

            /*
             * #ctl00_plhMain_cldAppointment
             *  > tbody:nth-child(1)
             *      > tr:nth-child(1)
             *          > td:nth-child(1)
             *              > table:nth-child(1)
             *                  > tbody:nth-child(1)
             *                      > tr:nth-child(1)
             *                          > td:nth-child(2)"
             */
            const string format = "MMMM yyyy р.";

            ReEnterCaptcha = false;

            MonthChange monthChange;
            DateTime    monthToCheck;

            do
            {
                var dateString = GetCalendarHeader()[1].Text;
                try
                {
                    _logger.Info(
                        $"GetFirstDate Try Parse Month. element.Text = {dateString}.");
                    monthToCheck = DateTime.ParseExact(dateString,
                                                       format,
                                                       //here we use uk-UA culture instead on CurrentCulture, because in site it will always be uk-UA
                                                       CultureInfo.CreateSpecificCulture("uk-UA"));
                    _logger.Info(
                        $"GetFirstDate element.Text = {dateString} is parsed as {monthToCheck.ToString("d MMM yyyy")}");
                    monthChange = CheckMounth(monthToCheck, dataRow.RegistryFom, dataRow.RegistryTo);
                }
                catch (FormatException)
                {
                    _logger.Error($"GetFirstDate month value \"{dateString}\" is not in the correct Date format.");
                    Error = true;
                    return;
                }

                switch (monthChange)
                {
                case MonthChange.Left:
                    _logger.Info("Scroll Left");
                    ScrollMonth(true);
                    ReEnterCaptcha = true;
                    break;

                case MonthChange.None:
                    _logger.Info("Correct month");
                    //month is in range now, all OK
                    break;

                case MonthChange.Rigth:
                    _logger.Info("Scroll Right");
                    ReEnterCaptcha = true;
                    ScrollMonth(false);
                    break;

                case MonthChange.Failed:
                    //if we get this status than we do something wrong
                    throw new NotImplementedException();

                default:
                    throw new ArgumentOutOfRangeException();
                }
            } while (monthChange != MonthChange.None);

            //todo this first condition probably can not work correctly
            while (monthToCheck <= dataRow.RegistryTo &&
                   !SelectRegistrationDate(monthToCheck,
                                           dataRow.RegistryFom,
                                           dataRow.RegistryTo))
            {
                ScrollMonth(false);
            }

            //CheckForError();//todo we need to check if that sate is returned
            _logger.Trace($"End GetFirstDate. Error = {Error}. dateFrom: {dataRow.RegistryFom.ToShortDateString()}, dateTo: {dataRow.RegistryTo.ToShortDateString()}, OutData: {OutData}");
        }
Ejemplo n.º 11
0
        public bool CheckDate(VisaDataSet.ClientDataRow dataRow)
        {
            _logger.Info($"Start CheckDate. Error = {Error}. ");
            ReEnterCaptcha = false;
            var bRes = false;

            try
            {
                var infoText = FindElementWithChecking(By.Id(ErrorMessage)).Text;
                if (infoText.Contains(CapchaNotFilledMessage)) //"The image you selected not match"
                {
                    FillCapchaFailed = true;
                    return(false);
                }

                try
                {
                    var availableDate = DateTime.ParseExact(infoText,
                                                            "d.MMM.yyyy",
                                                            CultureInfo.CurrentCulture);
                    _logger.Info($"First date for Registration => {availableDate}");
                    _logger.Info($"dataRow.RegistryFom => { dataRow.RegistryFom}");
                    _logger.Info($"dataRow.RegistryTo => { dataRow.RegistryTo}");
#if GoWithoutDates
                    if (dataRow.RegistryFom <= availableDate &&
                        availableDate <= dataRow.RegistryTo)
#else
                    if (availableDate <= dataRow.RegistryTo)
#endif
                    {
                        _logger.Info("dataRow.RegistryFom <= availableDate && availableDate <= dataRow.RegistryTo");
                        bRes    = true;
                        OutData =
                            string.Format(
                                ResManager.GetString(
                                    ResKeys.DateСorrect_Message),
                                availableDate.ToShortDateString());
                    }
                    else
                    {
                        OutData =
                            string.Format(
                                ResManager.GetString(
                                    ResKeys.DateIncorrect_Message),
                                availableDate.ToShortDateString());
                    }
                }
                catch (Exception ex)
                {
                    OutData = infoText;
                    _logger.Warn(ex.Message);
                    _logger.Warn(ex.StackTrace);
                }
            }
            catch (Exception ex) //todo if Ivan add one new property to see inner detailed True/False sub-result, we should use it here and run this function from RunNextStep
                when(ex is NoSuchElementException || ex is WebDriverException)
                {
                    if (Canceled)
                    {
                        _logger.Warn($"Canceled by User. Error  = {Error}");
                    }
                    else
                    {
                        _logger.Error(
                            $"NoSuchElementException/WebDriverException with message = {ex.Message}");
                        Error = true;
                    }
                }
            _logger.Info($"End CheckDate. Error = {Error}. ");
            return(bRes);
        }
Ejemplo n.º 12
0
        public void StartWork(VisaDataSet.ClientDataRow clientDataRow)
        {
            _logger.Trace(
                $"Start _crawlerWorker_DoWork. State = {_progressState}");

            if (clientDataRow != null)
            {
                CurrentClientDataRow = clientDataRow;
            }

            if (_crawlerRegistry != null)
            {
                _crawlerRegistry.Canceled = Canceled;
            }
            var bBreak = false; //_crawlerWorker_CheckSiteAvailability();

            do
            {
                CrawlerRefreshEngine();
                if (_crawlerRegistry == null)
                {
                    throw new NotImplementedException();
                    //This error instead of NullPointerException,
                    //because if _crawlerRegistry is null here we something code in wrong way
                }
                if (_crawlerRegistry.Canceled)
                {
                    _logger.Warn(
                        $" _crawlerRegistry.Canceled _state={_progressState}");
                    bBreak = true;
                    SetDefaultState();
                    CloseBrowsers(false);
                    _crawlerRegistry.Canceled = false;
                    _crawlerRegistry.Error    = false;
                }
                else if (_crawlerRegistry.Error) // if Error
                {
                    _logger.Warn(
                        $"return _crawlerWorker_DoWork. State = {_progressState}."
                        + $" OutData = {_crawlerRegistry.OutData}. _crawlerRegistry.Error = true ");
                    SetDefaultState();
                    bBreak = true;
                    SystemSounds.Beep.Play();
                    ShowAlert(_crawlerRegistry.OutData.IsNotBlank()
                        ? _crawlerRegistry.OutData
                        : ResManager.GetString(ResKeys.ServerError),
                              true);
                    CloseBrowsers(false);
                    _crawlerRegistry.OutData = string.Empty;
                    _crawlerRegistry.Error   = false;
                }
                else
                {
                    // ReSharper disable once SwitchStatementMissingSomeCases
                    switch (_progressState)
                    {
                    case ProgressState.Start:
                        XtraMessageBox.Show(
                            ResManager.GetString(
                                ResKeys.Complete_Registration),
                            ResManager.GetString(ResKeys.SearchResult),
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
                        bBreak = true;
                        SetDefaultState();
                        break;

                    case ProgressState.ShowMessage:
#if (!GoWithoutDates)
                    case ProgressState.GetFirstDate:
                    case ProgressState.SelectRegistrationTime:
#endif
                        var ruCaptchaKey = SetupManager.GetOptions().RuCaptchaKey;
                        if (ruCaptchaKey.IsNotBlank())
                        {
                            bBreak = Resolve_reCaptcha_v1(bBreak, ruCaptchaKey);
                        }
                        else     // ruCaptchaKey IsBlank
                        {
                            SystemSounds.Beep.Play();
                            ShowAlert(
                                ResManager.GetString(ResKeys.FillCaptchaAndPress),
                                false);
                            bBreak = true;
                        }
                        break;

#if (GoWithoutDates)
                    case ProgressState.GetFirstDate:
                        ShowAlert(
                            ResManager.GetString(ResKeys.Fill_Calendar_And_Captcha),
                            false);
                        bBreak = true;
                        break;
#else
                        //case ProgressState.SelectRegistrationTime:
                        //    SystemSounds.Beep.Play();
                        //    ShowAlert(_crawlerRegistry.OutData,
                        //        true);
                        //    ShowAlert(
                        //        ResManager.GetString(ResKeys.FillCaptchaAndPress),
                        //        false);
                        //    bBreak = true;
                        //    break;
#endif
                    case ProgressState.BreakState:
                        SetDefaultState();
                        bBreak = true;
                        break;
                    }
                }
            } while (!bBreak);

            _logger.Trace(
                $"End _crawlerWorker_DoWork. State = {_progressState}."
                + $" _crawlerRegistry.Error = {_crawlerRegistry?.Error}");
        }