/// <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}"); }
/// <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}"); }
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}"); }
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}"); }
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}"); }
/// <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}"); }
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}. "); }
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); }
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}"); }
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}"); }
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); }
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}"); }