/// <summary> /// Set options for the copy job. /// </summary> protected void SetOptions(RegusKioskOptionsManager regusKioskOptionsManager) { try { UpdateStatus($"Select option activity with Color Mode {_regusKioskPrintOptions.ColorMode.GetDescription()} is being started"); regusKioskOptionsManager.SetColorMode(_regusKioskPrintOptions.ColorMode); UpdateStatus($"Select option activity with Color Mode {_regusKioskPrintOptions.ColorMode.GetDescription()} is being completed"); UpdateStatus($"Select option activity with Duplex {_regusKioskPrintOptions.Duplex.GetDescription()} is being started"); regusKioskOptionsManager.SetDuplexPrint(_regusKioskPrintOptions.Duplex); UpdateStatus($"Select option activity with Duplex {_regusKioskPrintOptions.Duplex.GetDescription()} is being completed"); UpdateStatus($"Select option activity with N-Up {_regusKioskPrintOptions.Duplex.GetDescription()} is being started"); regusKioskOptionsManager.SetPaperSource(_regusKioskPrintOptions.PaperSource); UpdateStatus($"Select option activity with N-Up {_regusKioskPrintOptions.Duplex.GetDescription()} is being completed"); UpdateStatus($"Select option activity with auto fit {_regusKioskPrintOptions.AutoFit} is being started"); regusKioskOptionsManager.SetAutoFit(_regusKioskPrintOptions.AutoFit); UpdateStatus($"Select option activity with auto fit {_regusKioskPrintOptions.AutoFit} is being completed"); UpdateStatus($"Select option activity with Copies {_regusKioskPrintOptions.PageCount} is being started"); regusKioskOptionsManager.SetPrintCopies(_regusKioskPrintOptions.PageCount); UpdateStatus($"Select option activity with Copies {_regusKioskPrintOptions.PageCount} is being completed"); } catch (DeviceWorkflowException ex) { DeviceWorkflowException e = new DeviceWorkflowException(ex.Message + $" :: {_data.JobType.GetDescription()}", ex); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SelectOptions.GetDescription()); throw e; } }
/// <summary> /// Set options for the copy job. /// </summary> protected void SetOptions(RegusKioskOptionsManager regusKioskOptionsManager) { try { UpdateStatus($"Select option activity with Original Size {_regusKioskScanOptions.OriginalSize.GetDescription()} is being started"); regusKioskOptionsManager.SetOriginalSize(_regusKioskScanOptions.OriginalSize); UpdateStatus($"Select option activity with Original Size {_regusKioskScanOptions.OriginalSize.GetDescription()} is being completed"); UpdateStatus($"Select option activity with Original Orientation {_regusKioskScanOptions.OriginalOrientation.GetDescription()} is being started"); regusKioskOptionsManager.SetOriginalOrientation(_regusKioskScanOptions.OriginalOrientation); UpdateStatus($"Select option activity with Original Orientation {_regusKioskScanOptions.OriginalOrientation.GetDescription()} is being completed"); UpdateStatus($"Select option activity with N-Up {_regusKioskScanOptions.Duplex.GetDescription()} is being started"); regusKioskOptionsManager.SetDuplexOriginal(_regusKioskScanOptions.Duplex); UpdateStatus($"Select option activity with N-Up {_regusKioskScanOptions.Duplex.GetDescription()} is being completed"); UpdateStatus($"Select option activity with ImageRotation {_regusKioskScanOptions.ImageRotation.GetDescription()} is being started"); regusKioskOptionsManager.SetImageRotation(_regusKioskScanOptions.ImageRotation); UpdateStatus($"Select option activity with ImageRotation {_regusKioskScanOptions.Duplex.GetDescription()} is being completed"); UpdateStatus($"Select option activity with Color Mode {_regusKioskScanOptions.ColorMode.GetDescription()} is being started"); regusKioskOptionsManager.SetColorMode(_regusKioskScanOptions.ColorMode); UpdateStatus($"Select option activity with Color Mode {_regusKioskScanOptions.ColorMode.GetDescription()} is being completed"); UpdateStatus($"Select option activity with File Format {_regusKioskScanOptions.FileFormat.GetDescription()} is being started"); regusKioskOptionsManager.SetFileFormat(_regusKioskScanOptions.FileFormat); UpdateStatus($"Select option activity with File Format {_regusKioskScanOptions.FileFormat.GetDescription()} is being completed"); UpdateStatus($"Select option activity with Resolution {_regusKioskScanOptions.Resolution.GetDescription()} is being started"); regusKioskOptionsManager.SetResolution(_regusKioskScanOptions.Resolution); UpdateStatus($"Select option activity with Resolution {_regusKioskScanOptions.Resolution.GetDescription()} is being completed"); UpdateStatus($"Select option activity with File Name / To Address {_regusKioskScanOptions.StringField} - {_regusKioskScanOptions.ScanDestination} is being started"); if (!String.IsNullOrEmpty(_regusKioskScanOptions.StringField)) { switch (_regusKioskScanOptions.ScanDestination) { case RegusKioskScanDestination.USB: regusKioskOptionsManager.SetFileName(_regusKioskScanOptions.StringField); break; case RegusKioskScanDestination.Email: regusKioskOptionsManager.SetToAddress(_regusKioskScanOptions.StringField); break; } } else { UpdateStatus($"There is no value for file name / To Address. It will use default value."); } UpdateStatus($"Select option activity with File Name / To Address {_regusKioskScanOptions.StringField} - {_regusKioskScanOptions.ScanDestination} is being completed"); } catch (DeviceWorkflowException ex) { DeviceWorkflowException e = new DeviceWorkflowException(ex.Message + $" :: {_data.JobType.GetDescription()}", ex); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SelectOptions.GetDescription()); throw e; } }
/// <summary> /// Move to Option Page(scan or print) after completing a navigation to the destination /// <param name="JobType">scan or print</param> /// </summary> public void SelectJobForSetOptions(ClioJobType JobType) { bool result = false; switch (JobType) { case ClioJobType.Scan: result = LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/bt_hide_options")); break; case ClioJobType.Print: IsJobOptionScreenToPrint(JobType); _printPages = GetPrintPages(); result = true; break; default: DeviceWorkflowException e = new DeviceWorkflowException($"Unrecognized Connector Job Type: {JobType.GetDescription()} :: {_appName}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.FalseAlarm.GetDescription()); throw e; } if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"Current Screen is not Job options page after navigation ({JobType.GetDescription()}):: {_appName} "); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SelectOptions.GetDescription()); throw e; } }
/// <summary> /// Search a parsed item(file/folder name) on the searchtab. /// <param name="ParsedItem">Parsed Item from FilePath</param> /// </summary> public void SearchForParsedText(string ParsedItem) { bool result = true; if (result && (result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/iv_search"), 500, 60, _inactivityTimeLimit))) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/iv_search")); } if (result && (result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/searchTextView"), 500, 60, _inactivityTimeLimit))) { result = LinkUI.Controller.SetText(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/searchTextView"), ParsedItem); } if (result && (result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/iv_icon"), 500, 60, _inactivityTimeLimit))) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/iv_icon")); } if (result && (result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/bt_dialog_left"), 500, 60, _inactivityTimeLimit))) { JetAdvantageLinkControlHelper.WaitingObjectDisappear(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/bt_dialog_left"), 500, 60, _inactivityTimeLimit); } CheckServerErrorPopup(); if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"SearchForParsedText failed ({ParsedItem}) :: {_appName}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.NavigateFilePath.GetDescription()); throw e; } }
/// <summary> /// Sets up the cloud print job. /// </summary> /// <param name="device">The device.</param> protected override void SetupJob(IDevice device) { if (device == null) { throw new ArgumentNullException("device"); } UpdateStatus($"Starting Kiosk plugin: {_data.JobType} with {_data.AuthType}"); _kioskApp.KioskInitialize(); switch (_data.AuthType) { case KioskAuthType.Login: _kioskApp.KioskLoginAuthenticate(_data.ID, _data.Password); break; case KioskAuthType.Card: _kioskApp.KioskCardAuthenticate(ExecutionData.Assets, ExecutionData.Credential); break; default: DeviceWorkflowException e = new DeviceWorkflowException($"Kiosk Auth Type is invalid: {_data.AuthType}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SignIn.GetDescription()); throw e; } _kioskApp.Launch(_data.JobType, _data.CopyOptions); SetOptions(_kioskApp.KioskOptionManager); }
/// <summary> /// Start Job after SetOptions step /// <param name="Print Job Execution">Options for running scan job</param> /// </summary> private void PrintExecution() { bool result = false; if (JetAdvantageLinkControlHelper.WaitingObjectAppear (new UiSelector().ResourceId($"{KioskPackageName}:id/start_tab_start_btn"), 500, 120)) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{KioskPackageName}:id/start_tab_start_btn")); RecordEvent(DeviceWorkflowMarker.PrintJobBegin); } if (result && (result = JetAdvantageLinkControlHelper.WaitingObjectAppear (new UiSelector().ResourceId($"{KioskPackageName}:id/billing_information_title"), 500, 120))) { SetTotalPrice(); result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{KioskPackageName}:id/popup_billing_information_ok_btn")); } CheckServerErrorPopup(); RecordEvent(DeviceWorkflowMarker.PrintJobEnd); if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"Execution Print Job failed"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.ExecutionJob.GetDescription()); throw e; } }
/// <summary> /// Move to Option Page(scan or print) after completing a navigation to the destination /// <param name="jobType">scan or print</param> /// </summary> public void SelectJobForSetOptions(iManageJobType jobType) { bool result = false; switch (jobType) { case iManageJobType.Scan: if (JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/fab"), 500, 600, _inactivityTimeLimit)) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/fab")); Thread.Sleep(5000); result = LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/bt_hide_options")); } break; case iManageJobType.Print: IsJobOptionScreenToPrint(jobType); _printPages = GetPrintPages(); result = true; break; default: DeviceWorkflowException e = new DeviceWorkflowException($"Unrecognized Connector Job Type: {jobType.GetDescription()} :: {_appName}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.FalseAlarm.GetDescription()); throw e; } if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"Current Screen is not Job options page after navigation ({jobType.GetDescription()}):: {_appName} "); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SelectOptions.GetDescription()); throw e; } }
/// <summary> /// Verify screen after Login /// <param name="authType">authType for Login</param> /// <param name="id">Navigate to destination by FilePath</param> /// </summary> private void VerifyLogin(RegusKioskAuthType authType, string id) { if (!JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{KioskPackageName}:id/homeLayout"), 500, 120)) { if (LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{RegusPackageName}:id/loading_msg_textview"))) { DeviceWorkflowException e = new DeviceWorkflowException($"The sign in Please Wait popup message did not disappear within 60 seconds."); throw e; } else { CheckServerErrorPopup(); DeviceWorkflowException e = new DeviceWorkflowException($"Home layout after login is not displayed :: {authType}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SignIn.GetDescription()); throw e; } } if (authType.Equals(RegusKioskAuthType.Login)) { if (!LinkUI.Controller.GetText(new UiSelector().ResourceId($"{KioskPackageName}:id/userName")).Contains(id)) { DeviceWorkflowException e = new DeviceWorkflowException($"Displayed ID is wrong: {LinkUI.Controller.GetText(new UiSelector().ResourceId($"{KioskPackageName}:id/userName"))}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SignIn.GetDescription()); throw e; } } RecordEvent(DeviceWorkflowMarker.AuthenticationEnd); }
/// <summary> /// SignOut /// </summary> public void SignOut() { bool result = false; UpdateStatus("SignOut Start"); RecordEvent(DeviceWorkflowMarker.DeviceSignOutBegin); if (JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{KioskPackageName}:id/logoutBtn"), 500, 60)) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{KioskPackageName}:id/logoutBtn")); } if (result == JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{KioskPackageName}:id/confirm_cancel_btn"), 500, 60)) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{KioskPackageName}:id/confirm_cancel_btn")); } if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"SignOut is failed :: Kiosk"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SignOut.GetDescription()); throw e; } RecordEvent(DeviceWorkflowMarker.DeviceSignOutEnd); UpdateStatus("SignOut Finish"); }
/// <summary> /// Launches The AutoStore solution with the given authenticator with either eager or lazy authentication. /// </summary> /// <param name="authenticator">The authenticator.</param> /// <param name="authenticationMode">The authentication mode.</param> /// <exception cref="DeviceWorkflowException"> /// Login screen not found. /// or /// Eager authentication is not allowed by the AutoStore application at this time. /// </exception> public override void Launch(IAuthenticator authenticator, AuthenticationMode authenticationMode) { if (authenticationMode.Equals(AuthenticationMode.Lazy)) { try { UpdateStatus("Launch App: Udocx Scan"); _controlPanel.ScrollPress($"div[aria-label=\"Udocx\"]"); RecordEvent(DeviceWorkflowMarker.AppButtonPress, "Udocx"); IsSignInScreen(); authenticator.LazyAuthOnly = true; authenticator.Authenticate(); } catch (Exception ex) { DeviceWorkflowException e = new DeviceWorkflowException("Fail to Signin Udocx Scan App", ex); throw e; } } else // AuthenticationMode.Eager { throw new DeviceWorkflowException("Eager authentication is not allowed by the UdocxScan application at this time."); } RecordEvent(DeviceWorkflowMarker.AppShown); }
/// <summary> /// Check that current UI is Job Option status or not. /// </summary> public void IsJobOptionScreenToPrint(ClioJobType JobType) { string reason = $"Fail to check UI screen for printing job :: {_appName}"; bool result = true; int timeOut = 0; RecordEvent(DeviceWorkflowMarker.PullingJobFromServerBegin); timeOut = LinkUI.Controller.GetTimeout(); LinkUI.Controller.SetTimeout(0); CheckServerErrorPopup(); RecordEvent(DeviceWorkflowMarker.PullingJobFromServerEnd); LinkUI.Controller.SetTimeout(60); if (result) { result = LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/btn_print")); // Check that Downloading is completed and Current UI is Job Option Screen on the print section if (!result) { reason = $"Fail to check UI screen for printing job - Print button is not displayed :: {_appName} "; } } if (!result) { DeviceWorkflowException e = new DeviceWorkflowException(reason); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.DownloadingPrintFile.GetDescription()); throw e; } }
/// <summary> /// Start Print job and check job finish /// </summary> public void ExecutionPrintJob() { int timeOut = 0; bool result = true; UpdateStatus($"Print Job started with pages documents :: {_appName}"); timeOut = LinkUI.Controller.GetTimeout(); LinkUI.Controller.SetTimeout(20); RecordEvent(DeviceWorkflowMarker.PrintJobBegin); result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/btn_print")); // Job Start RecordEvent(DeviceWorkflowMarker.ProcessingJobBegin); result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/iv_more"), 500, 120, _inactivityTimeLimit); if (result) { RecordEvent(DeviceWorkflowMarker.PrintJobEnd); } RecordEvent(DeviceWorkflowMarker.ProcessingJobEnd); LinkUI.Controller.SetTimeout(timeOut); if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"Execution Print Job failed :: {_appName}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.ExecutionJob.GetDescription()); throw e; } }
/// <summary> /// Return Error Message on the Popup after checking popup visible /// </summary> /// <returns></returns> public void CheckErrorPopup() { if (CheckRetainPopup()) { DeviceWorkflowException e = new DeviceWorkflowException($"Error Popup is visible, Error message is \"{GetPopupMessage()}\"."); throw e; } }
/// <summary> /// Sets up the Clio scan job. /// </summary> /// <param name="device">The de vice.</param> protected override void SetupJob(IDevice device) { if (device == null) { throw new ArgumentNullException("device"); } _device = device; _clio = new ClioApp(device); _clio.WorkflowLogger = WorkflowLogger; ConnectorLog.PageCount = _data.PageCount; ConnectorLog.FilePrefix = FilePrefix.ToString(); UpdateStatus($"Starting App Launch"); _clio.Launch(_data.SIO); // Login UpdateStatus($"Starting Log in"); if (!_data.SIO.Equals(SIOMethod.SIOWithoutIDPWD)) { _clio.Login(_data.ID, _data.PW); } else { UpdateStatus($"Skip Login"); } //Select storage type UpdateStatus($"Select location :: {_data.Location}"); _clio.SelectStorageLocation(_data.Location); //Matter UpdateStatus($"Select matter :: {_data.Matter}"); _clio.SelectMatter(_data.Matter); // Do Navigate to destination if (!string.IsNullOrEmpty(_data.FolderPath)) { UpdateStatus($"Navigating destination :: {_data.FolderPath}"); _clio.NavigateToDestination(_data.FolderPath, _data.JobType); } _clio.PressScanButton(); _clio.ScanDocumentOptions(FilePrefix.ToString().ToLowerInvariant()); _clio.SelectJobForSetOptions(EnumUtil.GetByDescription <ClioJobType>(LinkJobType)); // Select JobType(Scan or Print Button in the folder manager) try { SetOptions(_clio.ScanOptionManager, _data.ScanOptions); } catch (DeviceWorkflowException ex) { DeviceWorkflowException e = new DeviceWorkflowException($"Fali to set options: {ex.Message} :: Clio", ex); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SelectOptions.GetDescription()); throw e; } }
/// <summary> /// Sets up the CloudConnector scan job. /// </summary> /// <param name="device">The device.</param> protected override void SetupJob(IDevice device) { if (device == null) { throw new ArgumentNullException("device"); } _cloudApp = new CloudConnectorApp(_data.CloudAppType, device); _cloudApp.WorkflowLogger = WorkflowLogger; _cloudApp.ActivityStatusChanged += LinkAppsActivityStatusChanged; ConnectorLog.PageCount = _data.PageCount; ConnectorLog.FilePrefix = FilePrefix.ToString(); ConnectorLog.FilePath = _data.FolderPath + "/" + FilePrefix + "." + EnumUtil.GetDescription((FileType)_data.CloudScanOptions.FileType).ToLowerInvariant(); ConnectorLog.LoginID = _data.ID; UpdateStatus($"Starting App Launch :: {_data.CloudAppType.GetDescription()}"); _cloudApp.Launch(_data.SIO); UpdateStatus($"Starting Log in :: {_data.CloudAppType.GetDescription()}"); if (!_data.SIO.Equals(SIOMethod.SIOWithoutIDPWD)) { _cloudApp.Login(_data.CloudAppType, _data.ID, _data.PWD); } else { UpdateStatus($"Skip Login"); } UpdateStatus($"Starting navigate to destination :: {_data.CloudAppType.GetDescription()}"); if (_data.CloudAppType.Equals(ConnectorName.SharePoint)) { _cloudApp.SelectSharePointSite(_data.SharePointSite); } if (!String.IsNullOrEmpty(_data.FolderPath)) { _cloudApp.NavigateToDestination(_data.FolderPath); } UpdateStatus($"Starting selection options :: {_data.CloudAppType.GetDescription()}"); _cloudApp.SelectJobForSetOptions(EnumUtil.GetByDescription <ConnectorJobType>(LinkJobType)); try { SetOptions(_cloudApp.ScanOptionManager, _data.CloudScanOptions); } catch (DeviceWorkflowException ex) { DeviceWorkflowException e = new DeviceWorkflowException($"Fail to set options: {ex.Message} :: {_data.CloudAppType.GetDescription()}", ex); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SelectOptions.GetDescription()); throw e; } }
/// <summary> /// Verify screen after Launch /// <param name="jobType">JobType: Copy, Print, Scan</param> /// </summary> private void VerifyLaunch(KioskJobType jobType, string waitingObject) { if (!JetAdvantageLinkControlHelper.WaitingObjectAppear(waitingObject)) { CheckServerErrorPopup(); DeviceWorkflowException e = new DeviceWorkflowException($"Launch failed: {jobType.GetDescription()} - It has no Price per page object"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.AppLaunch.GetDescription()); throw e; } RecordEvent(DeviceWorkflowMarker.AppShown); }
/// <summary> /// Verify screen after Launch /// <param name="jobType">JobType: Copy, Print, Scan</param> /// </summary> private void VerifyLaunch(KioskJobType jobType) { if (!JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{KioskPackageName}:id/ll_price_per_page"))) { CheckServerErrorPopup(); DeviceWorkflowException e = new DeviceWorkflowException($"Launch failed: {jobType.GetDescription()} - It has no Price per page object"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.AppLaunch.GetDescription()); throw e; } RecordEvent(DeviceWorkflowMarker.AppShown); }
/// <summary> /// Search a parsed item(file/folder name) on the searchtab. /// <param name="ParsedItem">Parsed Item from FilePath</param> /// </summary> public void SearchForParsedText(string ParsedItem) { bool result = true; int timeOut = LinkUI.Controller.GetTimeout(); LinkUI.Controller.SetTimeout(0); JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/layout_docitem_row"), 200, 50); if (LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/tv_description").TextContains(ParsedItem))) { UpdateStatus($"Click the {ParsedItem} by using displayed list"); result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/tv_description").TextContains(ParsedItem)); LinkUI.Controller.SetTimeout(timeOut); } else if (LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/tv_file_column_info").TextContains(ParsedItem))) { UpdateStatus($"Click the {ParsedItem} by using displayed list"); result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/tv_file_column_info").TextContains(ParsedItem)); LinkUI.Controller.SetTimeout(timeOut); } else { UpdateStatus($"Click the {ParsedItem} by using Search text box"); LinkUI.Controller.SetTimeout(timeOut); if (result && (result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/searchImageBtn"), 500, 60, _inactivityTimeLimit))) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/searchImageBtn")); } if (result && (result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/searchTextView"), 500, 60, _inactivityTimeLimit))) { result = LinkUI.Controller.SetText(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/searchTextView"), ParsedItem); } if (result && (result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/tv_display_first"), 500, 60, _inactivityTimeLimit))) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/tv_display_first").TextContains(ParsedItem)); } } CheckServerErrorPopup(); if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"Fail to click objects for navigate to specific path ({ParsedItem}) :: {_appName}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.NavigateFilePath.GetDescription()); throw e; } }
/// <summary> /// Launches Udocx Scan App in Udocx /// </summary> /// <param name="destination">Selected App Name</param> public override void SelectApp(string destination) { UpdateStatus($"Launch Selected App: {destination}"); try { PressElementByText("apps_list_app_title", destination); } catch (Exception ex) { DeviceWorkflowException e = new DeviceWorkflowException($"Fail to Luanch Udocx Scan App : {destination}", ex); throw e; } }
/// <summary> /// Start Scan job and check job finish /// <param name="pagecount">Options of scan build job</param> /// <param name="originalsides">Options of scan build job</param> /// <param name="UseOriginalSides">Bool for using OriginalSides</param> /// </summary> public void ExecutionScanJob(int pagecount, LinkScanOriginalSides originalsides, bool UseOriginalSides = false) { bool result = true; result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{LinkScanAppsPackageName}:id/bt_send")); Thread.Sleep(TimeSpan.FromSeconds(1)); CheckServerErrorPopup(); Thread.Sleep(TimeSpan.FromSeconds(1)); HandleJediOmniPopup("#hpid-prompt-flatbed-autodetect", "#hpid-button-continue"); RecordEvent(DeviceWorkflowMarker.JobBuildBegin); if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"Fail to execution scan job - Fail to click the scan button :: {_destination}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.ExecutionJob.GetDescription()); throw e; } string flag = originalsides.GetDescription(); UpdateStatus($"{flag} Scan Job started :: {_destination}"); RecordEvent(DeviceWorkflowMarker.ScanJobBegin); if (UseOriginalSides) { switch (originalsides) { case (LinkScanOriginalSides.Onesided): ScanOption_OnesidedJob(); break; case (LinkScanOriginalSides.Twosided): case (LinkScanOriginalSides.Pagesflipup): ScanOption_TwosidedJob(pagecount); break; default: DeviceWorkflowException e = new DeviceWorkflowException($"Unrecognized Original sides on Scan job:: {_destination}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.FalseAlarm.GetDescription()); throw e; } } else { ScanOption_OnesidedJob(); } RecordEvent(DeviceWorkflowMarker.JobBuildEnd); }
/// <summary> /// Launches the LinkApps using App Name /// </summary> public void Launch() { string launchAppname = null; DateTime startTime = DateTime.Now; int timeOut = 0; try { launchAppname = GetLaunchAppId(); UpdateStatus($"Launch App: {launchAppname}"); Device.ControlPanel.ScrollPress($"{launchAppname}"); RecordEvent(DeviceWorkflowMarker.AppButtonPress, launchAppname); Thread.Sleep(300); timeOut = LinkUI.Controller.GetTimeout(); LinkUI.Controller.SetTimeout(0); CloseLicenseAgreementPopup(); if (!JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{LinkScanAppsPackageName}:id/bt_send"), 200, 300)) { DeviceWorkflowException e = new DeviceWorkflowException($"Fail to launch app - Send button is not displayed after launching :: {_destination}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.AppLaunch.GetDescription()); throw e; } RecordEvent(DeviceWorkflowMarker.AppShown); UpdateStatus($"Lauch app completed - {DateTime.Now.Subtract(startTime).TotalSeconds} sec"); } catch (Exception ex) { if (ex.Data.Contains(_exceptionCategoryData)) { throw; } DeviceWorkflowException e = new DeviceWorkflowException($"Fail to launch app :: {_destination}", ex); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.AppLaunch.GetDescription()); throw e; } finally { LinkUI.Controller.SetTimeout(timeOut); } }
/// <summary> /// Return Error Message on the Popup after checking popup visible /// </summary> /// <returns></returns> private void CheckErrorPopup() { bool retainPopup = false; string ErrorMessage = null; if (LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{KioskPackageName}:id/error_ok_btn"))) { ErrorMessage = LinkUI.Controller.GetText(new UiSelector().ResourceId($"{KioskPackageName}:id/error_popup_description")); retainPopup = true; } if (retainPopup) { DeviceWorkflowException e = new DeviceWorkflowException($"Error Popup is visible, Error message is \" {ErrorMessage}\"."); throw e; } }
/// <summary> /// Check an Error Popup(Server Error) /// </summary> private void CheckServerErrorPopup() { int timeOut = 0; timeOut = LinkUI.Controller.GetTimeout(); LinkUI.Controller.SetTimeout(0); if (LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/iv_dialog_icon")) && LinkUI.Controller.GetText(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/tv_contents")).Contains("Unable")) { DeviceWorkflowException e = new DeviceWorkflowException($"Server Error Popup {LinkUI.Controller.GetText(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/tv_contents"))}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.ServerError.GetDescription()); throw e; } LinkUI.Controller.SetTimeout(timeOut); }
/// <summary> /// Scan Job /// </summary> public void Scan(int numberOfcopies) { bool result = true; ScanOption_SidedJob(numberOfcopies); result = WaitForScanning(numberOfcopies); if (result && numberOfcopies > 1) { RecordEvent(DeviceWorkflowMarker.JobBuildEnd); } else if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"Execution Sided Scan Job failed"); throw e; } }
/// <summary> /// Initialize RegusKiosk to Home Screen /// </summary> public void RegusKioskInitialize() { if (LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"{RegusPackageName}:id/loading_msg_textview"))) { DeviceWorkflowException e = new DeviceWorkflowException($"The activity is unable to begin due to a Please Wait popup message displayed from a previous activity."); throw e; } NavigateHome(); if (!AtHomeScreen()) { DeviceWorkflowException e = new DeviceWorkflowException($"Initialize failed: Login screen is not displayed."); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SignIn.GetDescription()); throw e; } }
/// <summary> /// Search a parsed item(file/folder name) on the searchtab. /// <param name="fileName">Scan File Name</param> /// </summary> public void ScanDocumentOptions(string fileName) { try { if (!String.IsNullOrEmpty(fileName) && JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/et_filename"), 500, 30, _inactivityTimeLimit)) { LinkUI.Controller.SetText(new UiSelector().ResourceId($"{ClioAppsPackageName}:id/et_filename"), fileName); } Thread.Sleep(TimeSpan.FromSeconds(2)); } catch (Exception) { DeviceWorkflowException e = new DeviceWorkflowException($"Cannot Select Scan File name :: {fileName}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.ExecutionJob.GetDescription()); throw e; } }
/// <summary> /// Do login for using ID/Password /// </summary> /// <param name="id">The id for log in.</param> /// <param name="password">The password for log in.</param> /// <returns>IAuthenticator</returns> public void KioskInitialize() { if (!JetAdvantageLinkControlHelper.WaitingObjectDisappear(new UiSelector().ResourceId($"{KioskPackageName}:id/loading_msg_textview"), 500, 120)) { DeviceWorkflowException e = new DeviceWorkflowException($"Initialize failed: Loading object is not disappeared."); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SignIn.GetDescription()); throw e; } Device.ControlPanel.PressHome(); if (!JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{KioskPackageName}:id/qr_code_img"), 500, 120)) { DeviceWorkflowException e = new DeviceWorkflowException($"Initialize failed: Login screen is not displayed."); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SignIn.GetDescription()); throw e; } }
/// <summary> /// Search a parsed item(file/folder name) on the searchtab. /// <param name="ParsedItem">Parsed Item from FilePath</param> /// </summary> public void ClickForParsedText(string ParsedItem) { bool result = true; if (result && (result = JetAdvantageLinkControlHelper.FindOnListWithScroll(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/rv_matterList"), new UiSelector().TextContains(ParsedItem), 10))) { result = JetAdvantageLinkControlHelper.ClickOnListWithScroll(new UiSelector().ResourceId($"{iManageAppsPackageName}:id/rv_matterList"), new UiSelector().TextContains(ParsedItem), 10); } Thread.Sleep(TimeSpan.FromSeconds(3)); CheckServerErrorPopup(); if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"SearchForParsedText failed ({ParsedItem}) :: {_appName}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.NavigateFilePath.GetDescription()); throw e; } }
/// <summary> /// Do login for using ID/Password /// </summary> /// <param name="id">The id for log in.</param> /// <param name="password">The password for log in.</param> /// <returns>IAuthenticator</returns> public void RegusKioskLoginAuthenticate(string id, string password) { bool result = false; RecordEvent(DeviceWorkflowMarker.AuthenticationBegin); if (result = LinkUI.Controller.Click(new UiSelector().Text("Username & Password"))) { // Check if login page is lodded. if (result = JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId("com.hp.auth.regus:id/webviewScreen"), 500, 40)) { result = (JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ClassName("android.widget.Button"), 500, 120) && JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ClassName("android.widget.EditText"), 500, 120)); } if (result = LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"email"))) { result = LinkUI.Controller.SetText(new UiSelector().ResourceId($"email"), id); } if (result = LinkUI.Controller.DoesScreenContains(new UiSelector().ResourceId($"password"))) { result = LinkUI.Controller.SetText(new UiSelector().ResourceId($"password"), password); } if (result) { if (LinkUI.Controller.IsVirtualKeyboardShown() == true) { LinkUI.Controller.PressKey(KeyCode.KEYCODE_BACK); Wait.ForTrue(() => (LinkUI.Controller.IsVirtualKeyboardShown() == false), TimeSpan.FromSeconds(3), TimeSpan.FromMilliseconds(250)); } result = LinkUI.Controller.Click(new UiSelector().ResourceId($"LoginButton")); } } if (!result) { DeviceWorkflowException e = new DeviceWorkflowException($"Login failed"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.SignIn.GetDescription()); throw e; } VerifyLogin(RegusKioskAuthType.Login, id); }
/// <summary> /// Launch with scan /// <param name="jobType">JobType</param> /// <param name="scanDestination">Destination for scan</param> /// </summary> public void LaunchScan(RegusKioskJobType jobType, RegusKioskScanDestination scanDestination) { bool result = false; UpdateStatus($"Launch start: {jobType.GetDescription()}"); result = LinkUI.Controller.Click("//*[@resource-id=\'com.hp.kiosk:id/homeLayout\']/*[2]/*[1]/*[1]/*[3]/*[1]/*[1]"); if (result) { switch (scanDestination) { case RegusKioskScanDestination.USB: if (JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{KioskPackageName}:id/scan_main_usb_btn"), 500, 120)) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{KioskPackageName}:id/scan_main_usb_btn")); } break; case RegusKioskScanDestination.Email: if (JetAdvantageLinkControlHelper.WaitingObjectAppear(new UiSelector().ResourceId($"{KioskPackageName}:id/scan_main_email_btn"), 500, 120)) { result = LinkUI.Controller.Click(new UiSelector().ResourceId($"{KioskPackageName}:id/scan_main_email_btn")); } break; default: UpdateStatus($"Scan destination is invalid: {scanDestination.GetDescription()}"); result = false; break; } } if (result) { VerifyLaunch(jobType, new UiSelector().ResourceId($"{KioskPackageName}:id/start_tab")); } else { DeviceWorkflowException e = new DeviceWorkflowException($"Launch failed: Selecting scan destination is failed: {scanDestination.GetDescription()}"); e.Data.Add(_exceptionCategoryData, ConnectorExceptionCategory.AppLaunch.GetDescription()); throw e; } }