diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 13468e492..2c7f54394 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -1,6 +1,7 @@ name: Build Android Registration-Client on: + workflow_dispatch: push: branches: - release* @@ -37,11 +38,17 @@ jobs: # - name: Flutter test # run: flutter test + - name: Decode android/app/arc-local-keystore.jks + run: echo "${{ secrets.JKS_PRIVATE_SECRET }}" | base64 --decode > android/app/arc-local-keystore.jks + + - name: Decode android/key.properties + run: echo "${{ secrets.KEY_PROPERTIES }}" | base64 --decode > android/key.properties + - name: Build Android APK run: flutter build apk - name: Upload Artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: apk-output path: ./build/app/outputs/flutter-apk/app-release.apk diff --git a/.github/workflows/build_client.yml b/.github/workflows/build_client.yml index dd41e57c7..5284b7611 100644 --- a/.github/workflows/build_client.yml +++ b/.github/workflows/build_client.yml @@ -33,7 +33,7 @@ jobs: ls app/build/outputs/apk/debug find -name '*.apk' - name: Upload Artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: apk-output path: ./client/app/build/outputs/apk/debug/app-debug.apk diff --git a/.github/workflows/push_trigger.yml b/.github/workflows/push_trigger.yml index 16f72ce38..614ca8b37 100644 --- a/.github/workflows/push_trigger.yml +++ b/.github/workflows/push_trigger.yml @@ -31,7 +31,7 @@ jobs: ls app/build/outputs/apk/debug find -name '*.apk' - name: Upload Artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: apk-output path: ./client/app/build/outputs/apk/debug/app-debug.apk diff --git a/android/app/build.gradle b/android/app/build.gradle index 52496fca8..496a3932b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -21,6 +21,11 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } +def keystorePropertiesFile = rootProject.file('key.properties') +if (keystorePropertiesFile.exists()) { + localProperties.load(new FileInputStream(keystorePropertiesFile)) +} + apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" @@ -49,6 +54,15 @@ android { buildConfigField("String", "ACTUATOR_INFO_PATH", rootProject.ext.serverActuatorInfoPath) } + signingConfigs { + release { + keyAlias = localProperties['keyAlias'] + keyPassword = localProperties['keyPassword'] + storeFile = localProperties['storeFile'] ? file(localProperties['storeFile']) : null + storePassword = localProperties['storePassword'] + } + } + buildTypes { release { // TODO: Add your own signing config for the release build. @@ -56,6 +70,7 @@ android { minifyEnabled false shrinkResources false signingConfig signingConfigs.debug + signingConfig signingConfigs.release ndk { abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64', 'x86' // architectures: 'armeabi-v7a', 'arm64-v8a', 'armeabi', 'x86', 'x86_64' diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java index 74e86ec35..34b278bf1 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/DemographicsDetailsApi.java @@ -185,4 +185,13 @@ public void changeUpdatableFieldGroups(@NonNull DemographicsDataPigeon.Result result) { + try { + this.registrationService.getRegistrationDto().SELECTED_CODES.put(fieldId+"Code", code); + } catch (Exception e) { + Log.e(getClass().getSimpleName(), "Add selected data field failed!" + Arrays.toString(e.getStackTrace())); + } + } } diff --git a/android/app/src/main/java/io/mosip/registration_client/api_services/DynamicDetailsApi.java b/android/app/src/main/java/io/mosip/registration_client/api_services/DynamicDetailsApi.java index dd15f27ff..a3fabd25e 100644 --- a/android/app/src/main/java/io/mosip/registration_client/api_services/DynamicDetailsApi.java +++ b/android/app/src/main/java/io/mosip/registration_client/api_services/DynamicDetailsApi.java @@ -88,6 +88,7 @@ public void getFieldValues(@NonNull String fieldName, @NonNull String langCode, DynamicResponsePigeon.DynamicFieldData data = new DynamicResponsePigeon.DynamicFieldData.Builder() .setCode(dto.getCode()) .setName(dto.getName()) + .setLangCode(dto.getLangCode()) .setConcatenatedName(value) .build(); response.add(data); diff --git a/android/build.gradle b/android/build.gradle index 9b4be4ae0..94357ca5b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -39,7 +39,7 @@ ext { clientmanagerLibVersionCode = 1 clientmanagerLibVersionName = "\"1.0.0\"" - serverBaseURL = "\"https://api-internal.qa-platform1.mosip.net\"" + serverBaseURL = "\"https://api-internal.qa-plan.mosip.net\"" serverHealthCheckPath = "\"/v1/syncdata/actuator/health\"" serverActuatorInfoPath = "\"/v1/syncdata/actuator/info\"" debugPassword = "\"APTyKejHxACQyKBSRciR\"" diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java index b9781953d..f0a5014b1 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/config/AppModule.java @@ -269,8 +269,8 @@ UserOnboardService provideUserOnboardService(ObjectMapper objectMapper, AuditMan @Provides @Singleton - TemplateService TemplateService(MasterDataService masterDataService, IdentitySchemaRepository identitySchemaRepository) { - return new TemplateService(appContext, masterDataService, identitySchemaRepository); + TemplateService TemplateService(MasterDataService masterDataService, IdentitySchemaRepository identitySchemaRepository, GlobalParamRepository globalParamRepository) { + return new TemplateService(appContext, masterDataService, identitySchemaRepository, globalParamRepository); } @Provides @@ -287,8 +287,8 @@ PreRegistrationDataSyncDao PreRegistrationDataSyncDao(PreRegistrationDataSyncRep @Provides @Singleton - PreRegZipHandlingService PreRegZipHandlingService(ApplicantValidDocumentDao applicantValidDocumentDao, IdentitySchemaRepository identitySchemaService, ClientCryptoManagerService clientCryptoFacade, RegistrationService registrationService, CryptoManagerService cryptoManagerService, PacketKeeper packetKeeper, IPacketCryptoService iPacketCryptoService, MasterDataService masterDataService) { - return new PreRegZipHandlingServiceImpl(appContext, applicantValidDocumentDao, identitySchemaService, clientCryptoFacade, registrationService, cryptoManagerService, packetKeeper, iPacketCryptoService, masterDataService); + PreRegZipHandlingService PreRegZipHandlingService(ApplicantValidDocumentDao applicantValidDocumentDao, IdentitySchemaRepository identitySchemaService, ClientCryptoManagerService clientCryptoFacade, RegistrationService registrationService, CryptoManagerService cryptoManagerService, PacketKeeper packetKeeper, IPacketCryptoService iPacketCryptoService, MasterDataService masterDataService,GlobalParamRepository globalParamRepository) { + return new PreRegZipHandlingServiceImpl(appContext, applicantValidDocumentDao, identitySchemaService, clientCryptoFacade, registrationService, cryptoManagerService, packetKeeper, iPacketCryptoService, masterDataService,globalParamRepository); } @Provides diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java index 7bacc6b59..19bade065 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/constant/RegistrationConstants.java @@ -1,5 +1,8 @@ package io.mosip.registration.clientmanager.constant; +import java.sql.Array; +import java.util.ArrayList; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -84,4 +87,7 @@ public class RegistrationConstants { public static final String UI_SCHEMA_SUBTYPE_FULL_NAME = "name"; public static final String UI_SCHEMA_SUBTYPE_EMAIL = "Email"; public static final String UI_SCHEMA_SUBTYPE_PHONE = "Phone"; + public static final String SELECTED_HANDLES = "mosip.registration.default-selected-handle-fields"; + public static final String TEMPLATE_IMPORTANT_GUIDELINES = "mosip.registration.important_guidelines"; + public static final String PRE_REG_PACKET_LOCATION = "mosip.registration.registration_pre_reg_packet_location"; } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java index 6e0a3ed6c..1c5af74a0 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/dto/registration/RegistrationDto.java @@ -82,6 +82,7 @@ public class RegistrationDto extends Observable { public Map BIO_DEVICES; private OperatorDto maker; private OperatorDto reviewer; + public Map SELECTED_CODES = new HashMap<>(); public RegistrationDto(@NonNull String rid, @NonNull String flowType, @NonNull String process, @NonNull Double schemaVersion, @NonNull List languages, @@ -398,6 +399,7 @@ public void cleanup() { this.biometrics.clear(); this.AGE_GROUPS.clear(); this.EXCEPTIONS.clear(); + this.SELECTED_CODES.clear(); this.selectedLanguages.removeIf(o->true); deleteObservers(); @@ -406,6 +408,7 @@ public void cleanup() { public void changeUpdatableFieldGroups() { this.demographics.clear(); this.AGE_GROUPS.clear(); + this.SELECTED_CODES.clear(); clearAndNotifyAllObservers(); } @@ -445,6 +448,7 @@ public Map getMVELDataContext() { allIdentityDetails.putAll(this.documents); allIdentityDetails.putAll(this.biometrics); allIdentityDetails.putAll(this.AGE_GROUPS); + allIdentityDetails.putAll(this.SELECTED_CODES); allIdentityDetails.put("isBioException", this.EXCEPTIONS.size() > 0); if(!allIdentityDetails.containsKey(RegistrationConstants.AGE)) allIdentityDetails.put(RegistrationConstants.AGE, 0); diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java index 85649dda3..6c2764308 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/repository/GlobalParamRepository.java @@ -105,4 +105,17 @@ public String getCachedStringAgeGroup(){ public String getCachedStringMAVELScript(){ return globalParamMap.getOrDefault(RegistrationConstants.APPLICANT_TYPE_MVEL_SCRIPT,"applicanttype.mvel"); } + + public String getCachedStringPreRegPacketLocation(){ + return globalParamMap.get(RegistrationConstants.PRE_REG_PACKET_LOCATION); + } + + public List getSelectedHandles() { + String value = globalParamMap.getOrDefault(RegistrationConstants.SELECTED_HANDLES, ""); + return Arrays.asList(value.split(RegistrationConstants.COMMA)).stream() + .map(String::trim) + .filter(item-> !item.isEmpty()) + .distinct() + .collect(Collectors.toList()); + } } diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java index cae137021..cdc9e8ee1 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/PacketServiceImpl.java @@ -111,7 +111,7 @@ public void syncRegistration(@NonNull String packetId, AsyncPacketTaskCallBack c Registration registration = registrationRepository.getRegistration(packetId); - if(registration.getClientStatus() != null && String.valueOf(registration.getClientStatus()).equals(PacketClientStatus.CREATED.name())) { + if (registration.getClientStatus() != null && String.valueOf(registration.getClientStatus()).equals(PacketClientStatus.CREATED.name())) { Log.i(TAG, "Packet not reviewed >> " + registration.getClientStatus()); callBack.onComplete(packetId, PacketTaskStatus.SYNC_FAILED); return; @@ -243,7 +243,12 @@ public void onResponse(Call> call, Respon callBack.onComplete(packetId, PacketTaskStatus.UPLOAD_COMPLETED); // Toast.makeText(context, "Packet uploaded successfully", Toast.LENGTH_LONG).show(); } else { - callBack.onComplete(packetId, PacketTaskStatus.UPLOAD_FAILED); + if (String.valueOf(error.getErrorCode()).equals("RPR-PKR-005")) { + registrationRepository.updateStatus(packetId, null, PacketClientStatus.UPLOADED.name()); + callBack.onComplete(packetId, PacketTaskStatus.UPLOAD_ALREADY_COMPLETED); + } else { + callBack.onComplete(packetId, PacketTaskStatus.UPLOAD_FAILED); + } // Toast.makeText(context, "Packet uploaded failed : " + error.getMessage(), Toast.LENGTH_LONG).show(); } } else { diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java index c4c237a9b..804f01bf4 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/RegistrationServiceImpl.java @@ -188,6 +188,13 @@ public void submitRegistrationDto(String makerName) throws Exception { throw new ClientCheckedException(context, R.string.err_004); } + List selectedHandles = this.globalParamRepository.getSelectedHandles(); + if(selectedHandles != null) { + if (this.registrationDto.getFlowType().equals("NEW")) { + this.registrationDto.getDemographics().put("selectedHandles", selectedHandles); + } + } + // try { String individualBiometricsFieldId = this.globalParamRepository.getCachedStringGlobalParam(RegistrationConstants.INDIVIDUAL_BIOMETRICS_ID); String serverVersion = this.globalParamRepository.getCachedStringGlobalParam(RegistrationConstants.SERVER_VERSION); diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/TemplateService.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/TemplateService.java index abd3e744e..9d538443d 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/TemplateService.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/TemplateService.java @@ -37,10 +37,12 @@ import io.mosip.registration.clientmanager.R; import io.mosip.registration.clientmanager.constant.Modality; +import io.mosip.registration.clientmanager.constant.RegistrationConstants; import io.mosip.registration.clientmanager.dto.CenterMachineDto; import io.mosip.registration.clientmanager.dto.registration.BiometricsDto; import io.mosip.registration.clientmanager.dto.registration.RegistrationDto; import io.mosip.registration.clientmanager.dto.uispec.FieldSpecDto; +import io.mosip.registration.clientmanager.repository.GlobalParamRepository; import io.mosip.registration.clientmanager.repository.IdentitySchemaRepository; import io.mosip.registration.clientmanager.spi.MasterDataService; import io.mosip.registration.clientmanager.util.UserInterfaceHelperService; @@ -61,10 +63,12 @@ public class TemplateService { MasterDataService masterDataService; IdentitySchemaRepository identitySchemaRepository; + GlobalParamRepository globalParamRepository; - public TemplateService(Context appContext, MasterDataService masterDataService, IdentitySchemaRepository identitySchemaRepository) { + public TemplateService(Context appContext, MasterDataService masterDataService, IdentitySchemaRepository identitySchemaRepository, GlobalParamRepository globalParamRepository) { this.appContext = appContext; this.masterDataService = masterDataService; + this.globalParamRepository = globalParamRepository; this.identitySchemaRepository = identitySchemaRepository; sharedPreferences = this.appContext.getSharedPreferences( this.appContext.getString(R.string.app_name), @@ -396,7 +400,11 @@ private void setBasicDetails(boolean isPreview, RegistrationDto registrationDto, CenterMachineDto centerMachineDto = new CenterMachineDto(); centerMachineDto = masterDataService.getRegistrationCenterMachineDetails(); + String imp_guidelines = globalParamRepository.getCachedStringGlobalParam(RegistrationConstants.TEMPLATE_IMPORTANT_GUIDELINES + +"_"+registrationDto.getSelectedLanguages().get(0)); + velocityContext.put("isPreview", isPreview); + velocityContext.put("ImportantGuidelines", imp_guidelines); velocityContext.put("ApplicationIDLabel", appContext.getString(R.string.app_id)); velocityContext.put("ApplicationID", registrationDto.getRId()); velocityContext.put("UINLabel", appContext.getString(R.string.uin)); @@ -416,7 +424,6 @@ private void setBasicDetails(boolean isPreview, RegistrationDto registrationDto, velocityContext.put("ROName", sharedPreferences.getString(USER_NAME, "")); velocityContext.put("RegCenterLabel", appContext.getString(R.string.reg_center)); velocityContext.put("RegCenter", centerMachineDto.getCenterId()); - velocityContext.put("ImportantGuidelines", appContext.getString(R.string.imp_guidelines)); velocityContext.put("LeftEyeLabel", appContext.getString(R.string.left_iris)); velocityContext.put("RightEyeLabel", appContext.getString(R.string.right_iris)); diff --git a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/external/impl/PreRegZipHandlingServiceImpl.java b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/external/impl/PreRegZipHandlingServiceImpl.java index 0e106ff2d..12533e9c7 100644 --- a/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/external/impl/PreRegZipHandlingServiceImpl.java +++ b/android/clientmanager/src/main/java/io/mosip/registration/clientmanager/service/external/impl/PreRegZipHandlingServiceImpl.java @@ -41,6 +41,7 @@ import io.mosip.registration.clientmanager.entity.Location; import io.mosip.registration.clientmanager.exception.RegBaseCheckedException; import io.mosip.registration.clientmanager.exception.RegBaseUncheckedException; +import io.mosip.registration.clientmanager.repository.GlobalParamRepository; import io.mosip.registration.clientmanager.repository.IdentitySchemaRepository; import io.mosip.registration.clientmanager.service.external.PreRegZipHandlingService; import io.mosip.registration.clientmanager.spi.MasterDataService; @@ -85,10 +86,11 @@ public class PreRegZipHandlingServiceImpl implements PreRegZipHandlingService { private Map documents; MasterDataService masterDataService; + GlobalParamRepository globalParamRepository; Context appContext; - public PreRegZipHandlingServiceImpl(Context appContext,ApplicantValidDocumentDao applicantValidDocumentDao, IdentitySchemaRepository identitySchemaService, ClientCryptoManagerService clientCryptoFacade,RegistrationService registrationService,CryptoManagerService cryptoManagerService,PacketKeeper packetKeeper,IPacketCryptoService iPacketCryptoService,MasterDataService masterDataService) { + public PreRegZipHandlingServiceImpl(Context appContext,ApplicantValidDocumentDao applicantValidDocumentDao, IdentitySchemaRepository identitySchemaService, ClientCryptoManagerService clientCryptoFacade,RegistrationService registrationService,CryptoManagerService cryptoManagerService,PacketKeeper packetKeeper,IPacketCryptoService iPacketCryptoService,MasterDataService masterDataService,GlobalParamRepository globalParamRepository) { this.appContext = appContext; this.applicantValidDocumentDao = applicantValidDocumentDao; this.identitySchemaService = identitySchemaService; @@ -99,6 +101,7 @@ public PreRegZipHandlingServiceImpl(Context appContext,ApplicantValidDocumentDao this.iPacketCryptoService = iPacketCryptoService; this.documents = new HashMap<>(); this.masterDataService = masterDataService; + this.globalParamRepository = globalParamRepository; try { initPreRegAdapter(appContext); } catch (Exception e) { @@ -415,7 +418,8 @@ public PreRegistrationDto encryptAndSavePreRegPacket(String preRegistrationId, S public String storePreRegPacketToDisk(String preRegistrationId, byte[] encryptedPacket, CenterMachineDto centerMachineDto) throws RegBaseUncheckedException { try { - String PRE_REG_PACKET = ConfigService.getProperty("mosip.registration.registration_pre_reg_packet_location", appContext); + //String PRE_REG_PACKET = ConfigService.getProperty("mosip.registration.registration_pre_reg_packet_location", appContext); + String PRE_REG_PACKET = this.globalParamRepository.getCachedStringPreRegPacketLocation(); // Generate the file path for storing the Encrypted Packet File localFilePath = new File(this.appContext.getFilesDir() + SEPARATOR + PRE_REG_PACKET); diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index 91ebfccc1..861105e38 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -276,7 +276,7 @@ "approve": "APPROVE", "reject": "REJECT", "reject_dialog_heading": "Reject Packet?", - "reject_dialog_subheading": "Please select a reason for packet rejection. You can can change you review to approve or reset the status of review later.", + "reject_dialog_subheading": "Please select a reason for packet rejection. You can change your review to approve or reset the review status later.", "reason_rejection": "Reason for rejection", "no_reason_selected": "Please select a reason...", "supervisor_auth_heading": "Supervisor's Authentication", diff --git a/assets/l10n/app_fr.arb b/assets/l10n/app_fr.arb index ee78c77d1..c136b9b1a 100644 --- a/assets/l10n/app_fr.arb +++ b/assets/l10n/app_fr.arb @@ -275,7 +275,7 @@ "approve": "APPROUVER", "reject": "REJETER", "reject_dialog_heading": "Rejeter le paquet?", - "reject_dialog_subheading": "Veuillez sélectionner un motif de rejet du paquet. Vous pouvez modifier votre révision pour l'approuver ou réinitialiser le statut de la révision ultérieurement.", + "reject_dialog_subheading": "Veuillez sélectionner un motif de rejet du paquet. Vous pouvez modifier votre avis pour l'approuver ou réinitialiser le statut de l'avis ultérieurement.", "reason_rejection": "Raison du rejet", "no_reason_selected": "Veuillez sélectionner une raison...", "supervisor_auth_heading": "Authentification du superviseur", diff --git a/assets/l10n/app_hi.arb b/assets/l10n/app_hi.arb index f638390de..eedae2da9 100644 --- a/assets/l10n/app_hi.arb +++ b/assets/l10n/app_hi.arb @@ -275,7 +275,7 @@ "approve": "मंज़ूरी देना", "reject": "अस्वीकार करना", "reject_dialog_heading": "पैकेट अस्वीकार करें?", - "reject_dialog_subheading": "कृपया पैकेट अस्वीकृति का एक कारण चुनें। आप बाद में समीक्षा की स्थिति को स्वीकृत करने या रीसेट करने के लिए अपनी समीक्षा बदल सकते हैं।", + "reject_dialog_subheading": "कृपया पैकेट अस्वीकृति का एक कारण चुनें। आप बाद में समीक्षा स्थिति को स्वीकृत या रीसेट करने के लिए अपनी समीक्षा बदल सकते हैं।", "reason_rejection": "खारिज करने का कारण", "no_reason_selected": "कृपया कोई कारण चुनें...", "supervisor_auth_heading": "पर्यवेक्षक का प्रमाणीकरण", diff --git a/assets/l10n/app_kn.arb b/assets/l10n/app_kn.arb index 35af77c8a..512f015e3 100644 --- a/assets/l10n/app_kn.arb +++ b/assets/l10n/app_kn.arb @@ -275,7 +275,7 @@ "approve": "ಅನುಮೋದಿಸಿ", "reject": "ತಿರಸ್ಕರಿಸು", "reject_dialog_heading": "ಪ್ಯಾಕೆಟ್ ಅನ್ನು ತಿರಸ್ಕರಿಸುವುದೇ?", - "reject_dialog_subheading": "ದಯವಿಟ್ಟು ಪ್ಯಾಕೆಟ್ ನಿರಾಕರಣೆಗೆ ಕಾರಣವನ್ನು ಆಯ್ಕೆಮಾಡಿ. ನಿಮ್ಮ ವಿಮರ್ಶೆಯನ್ನು ಅನುಮೋದಿಸಲು ಅಥವಾ ನಂತರ ಪರಿಶೀಲನೆಯ ಸ್ಥಿತಿಯನ್ನು ಮರುಹೊಂದಿಸಲು ನೀವು ಬದಲಾಯಿಸಬಹುದು.", + "reject_dialog_subheading": "ದಯವಿಟ್ಟು ಪ್ಯಾಕೆಟ್ ನಿರಾಕರಣೆಗೆ ಕಾರಣವನ್ನು ಆಯ್ಕೆಮಾಡಿ. ನಂತರ ಪರಿಶೀಲನೆ ಸ್ಥಿತಿಯನ್ನು ಅನುಮೋದಿಸಲು ಅಥವಾ ಮರುಹೊಂದಿಸಲು ನಿಮ್ಮ ವಿಮರ್ಶೆಯನ್ನು ನೀವು ಬದಲಾಯಿಸಬಹುದು.", "reason_rejection": "ನಿರಾಕರಣೆಗೆ ಕಾರಣ", "no_reason_selected": "ದಯವಿಟ್ಟು ಕಾರಣವನ್ನು ಆಯ್ಕೆಮಾಡಿ...", "supervisor_auth_heading": "ಮೇಲ್ವಿಚಾರಕರ ದೃಢೀಕರಣ", diff --git a/assets/l10n/app_ta.arb b/assets/l10n/app_ta.arb index da978e7e9..048d51f60 100644 --- a/assets/l10n/app_ta.arb +++ b/assets/l10n/app_ta.arb @@ -284,7 +284,7 @@ "approve": "ஒப்புதல்", "reject": "நிராகரி", "reject_dialog-heading": "பாக்கெட்டை நிராகரிக்கவா?", - "reject_dialog_subheading": "பாக்கெட் நிராகரிப்புக்கான காரணத்தைத் தேர்ந்தெடுக்கவும். உங்கள் மதிப்பாய்வை அங்கீகரிக்க அல்லது பின்னர் மதிப்பாய்வின் நிலையை மீட்டமைக்க மாற்றலாம்.", + "reject_dialog_subheading": "பாக்கெட் நிராகரிப்புக்கான காரணத்தைத் தேர்ந்தெடுக்கவும். மதிப்பாய்வு நிலையை அங்கீகரிக்க அல்லது பின்னர் மீட்டமைக்க உங்கள் மதிப்பாய்வை மாற்றலாம்.", "reason_rejection": "நிராகரிப்புக்கான காரணம்", "no_reason_selected": "தயவுசெய்து காரணத்தைத் தேர்ந்தெடுக்கவும்...", "supervisor_auth_heading": "மேற்பார்வையாளரின் அங்கீகாரம்", diff --git a/lib/platform_android/demographic_service_impl.dart b/lib/platform_android/demographic_service_impl.dart index adddc7b71..adc2c3349 100644 --- a/lib/platform_android/demographic_service_impl.dart +++ b/lib/platform_android/demographic_service_impl.dart @@ -151,6 +151,18 @@ class DemographicServiceImpl implements DemographicService { debugPrint('Updatable fields not removed ${e.toString()}'); } } + + @override + Future addSelectedCode(String fieldId, String code) async { + try { + await DemographicsApi() + .addSelectedCode(fieldId, code); + } on PlatformException { + debugPrint('DemographicsApi call failed'); + } catch (e) { + debugPrint('Selected Code not added ${e.toString()}'); + } + } } DemographicService getDemographicServiceImpl() => DemographicServiceImpl(); diff --git a/lib/platform_spi/demographic_service.dart b/lib/platform_spi/demographic_service.dart index b9f8b52bd..7ba9a8f60 100644 --- a/lib/platform_spi/demographic_service.dart +++ b/lib/platform_spi/demographic_service.dart @@ -33,5 +33,7 @@ abstract class DemographicService { Future changeUpdatableFieldGroups(); + Future addSelectedCode(String fieldId,String code); + factory DemographicService() => getDemographicServiceImpl(); } diff --git a/lib/provider/approve_packets_provider.dart b/lib/provider/approve_packets_provider.dart index c8957fa97..55bd8d428 100644 --- a/lib/provider/approve_packets_provider.dart +++ b/lib/provider/approve_packets_provider.dart @@ -245,6 +245,11 @@ class ApprovePacketsProvider with ChangeNotifier { for (int i = 0; i < matchingPackets.length; i++) { Registration reg = matchingPackets[i]["packet"] as Registration; if (reg.packetId == packetId) { + if (matchingSelected[i]) { + matchingSelected[i] = false; + countSelected -= 1; + } + matchingPackets[i] = { "packet": reg, "review_status": ReviewStatus.NOACTIONTAKEN.name, diff --git a/lib/provider/registration_task_provider.dart b/lib/provider/registration_task_provider.dart index 40d0d6feb..c6b4fdf5d 100644 --- a/lib/provider/registration_task_provider.dart +++ b/lib/provider/registration_task_provider.dart @@ -189,6 +189,10 @@ class RegistrationTaskProvider with ChangeNotifier { await demographics.addDemographicField(fieldId, value); } + addSelectedCode(String fieldId, String code) async { + await demographics.addSelectedCode(fieldId, code); + } + getDemographicField(String fieldId) async { return await demographics.getDemographicField(fieldId); } diff --git a/lib/ui/approve_packet/approve_packet_ui.dart b/lib/ui/approve_packet/approve_packet_ui.dart index 58434f64d..bf8512b7e 100644 --- a/lib/ui/approve_packet/approve_packet_ui.dart +++ b/lib/ui/approve_packet/approve_packet_ui.dart @@ -111,7 +111,8 @@ class _ApprovePacketsPageState extends State { ), backgroundColor: backgroundColor, body: Padding( - padding: const EdgeInsets.only(left: 20, right: 20, top: 16, bottom: 0), + padding: + const EdgeInsets.only(left: 20, right: 20, top: 16, bottom: 12), child: Column( children: [ const SizedBox( @@ -119,9 +120,9 @@ class _ApprovePacketsPageState extends State { ), Row( children: [ - const Flexible( - flex: 3, - child: SearchBoxApprove(), + Flexible( + flex: isMobileSize ? 2 : 3, + child: const SearchBoxApprove(), ), const SizedBox(width: 10), Flexible( diff --git a/lib/ui/approve_packet/widget/approve_table.dart b/lib/ui/approve_packet/widget/approve_table.dart index 0c64074d7..d5b991f14 100644 --- a/lib/ui/approve_packet/widget/approve_table.dart +++ b/lib/ui/approve_packet/widget/approve_table.dart @@ -36,7 +36,8 @@ class _ApproveTableState extends State { @override Widget build(BuildContext context) { - double tableWidth = MediaQuery.of(context).size.width + 75; + double tableWidth = + isMobileSize ? 1000 : MediaQuery.of(context).size.width + 75; TextStyle? textTheme = Theme.of(context) .textTheme .bodySmall diff --git a/lib/ui/approve_packet/widget/authenticate_dialogbox.dart b/lib/ui/approve_packet/widget/authenticate_dialogbox.dart index 494c6e1d6..94425ad6f 100644 --- a/lib/ui/approve_packet/widget/authenticate_dialogbox.dart +++ b/lib/ui/approve_packet/widget/authenticate_dialogbox.dart @@ -103,6 +103,20 @@ class _AuthenticateDialogBoxState extends State { }); } + bool validateForm(){ + bool value = false; + if(username.text.trim().isNotEmpty && password.text.trim().isNotEmpty){ + setState(() { + value = true; + }); + }else{ + setState(() { + value = false; + }); + } + return value; + } + @override Widget build(BuildContext context) { const double width = 600; @@ -117,6 +131,7 @@ class _AuthenticateDialogBoxState extends State { width: width, child: Form( key: _formKey, + autovalidateMode: AutovalidateMode.always, child: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -139,6 +154,7 @@ class _AuthenticateDialogBoxState extends State { const SizedBox(height: 24.0), Text( AppLocalizations.of(context)!.supervisor_auth_heading, + textAlign: TextAlign.center, style: const TextStyle( fontSize: 28.0, fontWeight: FontWeight.bold), ), @@ -189,6 +205,9 @@ class _AuthenticateDialogBoxState extends State { return null; }, + onChanged: (String value){ + validateForm(); + }, decoration: InputDecoration( border: OutlineInputBorder( borderSide: const BorderSide( @@ -237,6 +256,9 @@ class _AuthenticateDialogBoxState extends State { } return null; }, + onChanged: (String value){ + validateForm(); + }, obscureText: true, decoration: InputDecoration( border: OutlineInputBorder( @@ -281,11 +303,11 @@ class _AuthenticateDialogBoxState extends State { width: 150, height: 65, child: ElevatedButton( - onPressed: () async { + onPressed: validateForm() ? () async { await submitReviews(); - }, + } : (){}, style: ElevatedButton.styleFrom( - backgroundColor: solidPrimary, + backgroundColor: validateForm() ? solidPrimary : Colors.grey, padding: const EdgeInsets.symmetric( vertical: 16, horizontal: 32)), child: loading diff --git a/lib/ui/approve_packet/widget/template_bottom_sheet.dart b/lib/ui/approve_packet/widget/template_bottom_sheet.dart index 4c4132d42..9988f4c36 100644 --- a/lib/ui/approve_packet/widget/template_bottom_sheet.dart +++ b/lib/ui/approve_packet/widget/template_bottom_sheet.dart @@ -27,6 +27,8 @@ class TemplateBottomSheet { } Widget bottomSheet(BuildContext context) { + bool isPortrait = true; + isPortrait = MediaQuery.of(context).orientation == Orientation.portrait; return ChangeNotifierProvider.value( value: context.watch(), builder: (context, _) { @@ -58,7 +60,7 @@ class TemplateBottomSheet { child: SingleChildScrollView( controller: ScrollController(), child: SizedBox( - height: 1400, + height: isPortrait ? 1400 : 2400, child: WebViewPlus( zoomEnabled: true, onWebViewCreated: (controller) async { @@ -119,6 +121,8 @@ class TemplateBottomSheet { children: [ ElevatedButton.icon( style: ElevatedButton.styleFrom( + disabledForegroundColor: Colors.white, + disabledBackgroundColor: Colors.grey.withOpacity(0.5), padding: const EdgeInsets.symmetric( vertical: 12, horizontal: 18), ), @@ -197,12 +201,14 @@ class TemplateBottomSheet { }); }, style: OutlinedButton.styleFrom( + disabledForegroundColor: Colors.white, + disabledBackgroundColor: Colors.grey.withOpacity(0.5), foregroundColor: Colors.red, padding: const EdgeInsets.symmetric( vertical: 12, horizontal: 18), side: BorderSide( color: reviewStatus == ReviewStatus.REJECTED.name - ? Colors.grey + ? Colors.transparent : Colors.red, width: 2), ), diff --git a/lib/ui/export_packet/widgets/client_status_dropdown.dart b/lib/ui/export_packet/widgets/client_status_dropdown.dart index 2b69ecc90..2f624dfc7 100644 --- a/lib/ui/export_packet/widgets/client_status_dropdown.dart +++ b/lib/ui/export_packet/widgets/client_status_dropdown.dart @@ -23,20 +23,27 @@ class ClientStatusDropdown extends StatelessWidget { underline: const SizedBox.shrink(), dropdownColor: Colors.white, padding: const EdgeInsets.all(16), - items: [ - DropdownMenuItem(value: null, child: Text(AppLocalizations.of(context)!.client_status)), - DropdownMenuItem(value: ClientStatus.CREATED.name, child: const Text("Created")), - DropdownMenuItem(value: ClientStatus.APPROVED.name, child: const Text("Approved")), - DropdownMenuItem(value: ClientStatus.REJECTED.name, child: const Text("Rejected")), - DropdownMenuItem(value: ClientStatus.SYNCED.name, child: const Text("Synced")), - DropdownMenuItem(value: ClientStatus.EXPORTED.name, child: const Text("Exported")), + items: [ + DropdownMenuItem( + value: null, + child: Text(AppLocalizations.of(context)!.client_status)), + DropdownMenuItem( + value: ClientStatus.APPROVED.name, + child: const Text("Approved")), + DropdownMenuItem( + value: ClientStatus.REJECTED.name, + child: const Text("Rejected")), + DropdownMenuItem( + value: ClientStatus.SYNCED.name, child: const Text("Synced")), + DropdownMenuItem( + value: ClientStatus.EXPORTED.name, + child: const Text("Exported")), // Add more items as needed ], onChanged: (String? newValue) { context.read().changeClientStatus(newValue); context.read().filterSearchList(); }, - ) - ); + )); } } diff --git a/lib/ui/machine_keys.dart b/lib/ui/machine_keys.dart index 2c7c7d488..e87d2dc7d 100644 --- a/lib/ui/machine_keys.dart +++ b/lib/ui/machine_keys.dart @@ -117,13 +117,13 @@ class _MachineKeysState extends State { }); }, ), - SizedBox( - height: 20.h, - ), - _downloadButton( - title: appLocalizations.share, - onTap: () {}, - ), + // SizedBox( + // height: 20.h, + // ), + // _downloadButton( + // title: appLocalizations.share, + // onTap: () {}, + // ), SizedBox( height: 30.h, ), diff --git a/lib/ui/onboard/home_page.dart b/lib/ui/onboard/home_page.dart index 4abba85dd..8632413ba 100644 --- a/lib/ui/onboard/home_page.dart +++ b/lib/ui/onboard/home_page.dart @@ -33,6 +33,8 @@ import 'package:registration_client/provider/registration_task_provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import '../../model/screen.dart'; + class HomePage extends StatefulWidget { static const route = "/home-page"; @@ -106,10 +108,12 @@ class _HomePageState extends State { } Widget getProcessUI(BuildContext context, Process process) { + List sortedScreens; + sortedScreens = process.screens!.toList()..sort((e1, e2) => e1!.order!.compareTo(e2!.order!)); if (process.id == "NEW" || process.id == "UPDATE") { globalProvider.clearRegistrationProcessData(); globalProvider.setPreRegistrationId(""); - for (var screen in process.screens!) { + for (var screen in sortedScreens) { for (var field in screen!.fields!) { if (field!.controlType == 'dropdown' && field.fieldType == 'default') { @@ -122,7 +126,10 @@ class _HomePageState extends State { showDialog( context: context, builder: (BuildContext context) => LanguageSelector( - newProcess: process, + newProcess: Process(label: process.label, autoSelectedGroups: process.autoSelectedGroups, + caption: process.caption, flow: process.flow, icon: process.icon, id: process.id, + isActive: process.isActive, order: process.order, screens: sortedScreens + ), ), ); } diff --git a/lib/ui/onboard/portrait/operational_tasks.dart b/lib/ui/onboard/portrait/operational_tasks.dart index cc73e3ae5..6ae66ade9 100644 --- a/lib/ui/onboard/portrait/operational_tasks.dart +++ b/lib/ui/onboard/portrait/operational_tasks.dart @@ -23,6 +23,7 @@ class OperationalTasks extends StatefulWidget { super.key, required this.operationalTasks, }); + final List> operationalTasks; @override @@ -195,6 +196,7 @@ class _OperationalTasksState extends State { ontap: () async { return widget.operationalTasks[index]["onTap"](context); }, + subtitle: widget.operationalTasks[index]["subtitle"], ), ) : TaskCard( diff --git a/lib/ui/onboard/portrait/registration_tasks.dart b/lib/ui/onboard/portrait/registration_tasks.dart index aad1eab6e..df8ae9aec 100644 --- a/lib/ui/onboard/portrait/registration_tasks.dart +++ b/lib/ui/onboard/portrait/registration_tasks.dart @@ -60,6 +60,7 @@ class _RegistrationTasksState extends State { ), title: AppLocalizations.of(context)!.synchronize_data, ontap: () => widget.syncData(context), + subtitle: null, ), ) : _getSyncDataProvider(), diff --git a/lib/ui/onboard/widgets/home_page_card.dart b/lib/ui/onboard/widgets/home_page_card.dart index 375a48567..cce18de65 100644 --- a/lib/ui/onboard/widgets/home_page_card.dart +++ b/lib/ui/onboard/widgets/home_page_card.dart @@ -21,10 +21,13 @@ class HomePageCard extends StatefulWidget { required this.title, required this.index, required this.ontap, + required this.subtitle, }); + final Widget icon; final String title; final int index; + final String? subtitle; final void Function() ontap; @override @@ -72,12 +75,21 @@ class _HomePageCardState extends State { fontSize: 15, color: const Color(0xff333333)), ), - subtitle: subtitle == null - ? null + subtitle: widget.subtitle == null + ? (subtitle == null + ? null + : Padding( + padding: const EdgeInsets.only(top: 4), + child: Text( + subtitle ?? "", + style: const TextStyle( + fontSize: 12, color: Color(0xff6F6E6E)), + ), + )) : Padding( padding: const EdgeInsets.only(top: 4), child: Text( - subtitle ?? "", + widget.subtitle ?? "", style: const TextStyle(fontSize: 12, color: Color(0xff6F6E6E)), ), diff --git a/lib/ui/onboard/widgets/operator_biometrics_capture_view.dart b/lib/ui/onboard/widgets/operator_biometrics_capture_view.dart index 010a46a5f..d6123916f 100644 --- a/lib/ui/onboard/widgets/operator_biometrics_capture_view.dart +++ b/lib/ui/onboard/widgets/operator_biometrics_capture_view.dart @@ -257,6 +257,7 @@ class _OperatorBiometricsCaptureState ? appLocalizations.onboarded_successfully : appLocalizations .operator_biometric_updated_successfully, + textAlign: TextAlign.center, style: TextStyle( fontSize: 28, fontWeight: semiBold, diff --git a/lib/ui/process_ui/new_process.dart b/lib/ui/process_ui/new_process.dart index ad5a25959..cf9f36fa3 100644 --- a/lib/ui/process_ui/new_process.dart +++ b/lib/ui/process_ui/new_process.dart @@ -216,6 +216,7 @@ class _NewProcessState extends State with WidgetsBindingObserver { } bool continueButton = false; + bool authButton = false; @override Widget build(BuildContext context) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) { @@ -599,6 +600,11 @@ class _NewProcessState extends State with WidgetsBindingObserver { } }); + //auth button validation + if(username.trim().isNotEmpty && password.trim().isNotEmpty){ + authButton = true; + } + return WillPopScope( onWillPop: onWillPop, child: SafeArea( @@ -719,7 +725,8 @@ class _NewProcessState extends State with WidgetsBindingObserver { minimumSize: MaterialStateProperty.all( const Size(209, 52)), backgroundColor: MaterialStateProperty.all( - continueButton ? solidPrimary : Colors.grey), + (continueButton && context.read().newProcessTabIndex <= + size) ? solidPrimary : authButton ? solidPrimary: Colors.grey), ), onPressed: () { continueButtonTap(size, newProcess); diff --git a/lib/ui/process_ui/update_process.dart b/lib/ui/process_ui/update_process.dart index 92e4035d2..2312656d0 100644 --- a/lib/ui/process_ui/update_process.dart +++ b/lib/ui/process_ui/update_process.dart @@ -662,44 +662,44 @@ class _UpdateProcessState extends State : Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - globalProvider.newProcessTabIndex == size + 2 - ? ElevatedButton( - onPressed: () async { - await connectivityProvider - .checkNetworkConnection(); - bool isConnected = - connectivityProvider.isConnected; - if (!isConnected) { - _showInSnackBar( - appLocalizations.network_error); - return; - } - globalProvider.syncPacket(globalProvider.regId); - }, - child: Text(appLocalizations.sync_packet), - ) - : const SizedBox.shrink(), - SizedBox( - width: 10.w, - ), - globalProvider.newProcessTabIndex == size + 2 - ? ElevatedButton( - onPressed: () async { - await connectivityProvider - .checkNetworkConnection(); - bool isConnected = - connectivityProvider.isConnected; - if (!isConnected) { - _showInSnackBar( - appLocalizations.network_error); - return; - } - globalProvider - .uploadPacket(globalProvider.regId); - }, - child: Text(appLocalizations.upload_packet), - ) - : const SizedBox.shrink(), + // globalProvider.newProcessTabIndex == size + 2 + // ? ElevatedButton( + // onPressed: () async { + // await connectivityProvider + // .checkNetworkConnection(); + // bool isConnected = + // connectivityProvider.isConnected; + // if (!isConnected) { + // _showInSnackBar( + // appLocalizations.network_error); + // return; + // } + // globalProvider.syncPacket(globalProvider.regId); + // }, + // child: Text(appLocalizations.sync_packet), + // ) + // : const SizedBox.shrink(), + // SizedBox( + // width: 10.w, + // ), + // globalProvider.newProcessTabIndex == size + 2 + // ? ElevatedButton( + // onPressed: () async { + // await connectivityProvider + // .checkNetworkConnection(); + // bool isConnected = + // connectivityProvider.isConnected; + // if (!isConnected) { + // _showInSnackBar( + // appLocalizations.network_error); + // return; + // } + // globalProvider + // .uploadPacket(globalProvider.regId); + // }, + // child: Text(appLocalizations.upload_packet), + // ) + // : const SizedBox.shrink(), const Expanded( child: SizedBox(), ), diff --git a/lib/ui/process_ui/widgets/dropdown_control.dart b/lib/ui/process_ui/widgets/dropdown_control.dart index 0894a1881..2b0095306 100644 --- a/lib/ui/process_ui/widgets/dropdown_control.dart +++ b/lib/ui/process_ui/widgets/dropdown_control.dart @@ -110,16 +110,18 @@ class _CustomDropDownState extends State { temp = await _getLocationValuesBasedOnParent( parentCode, widget.field.subType!, code); } - for (var item in temp) { - if (item!.code == value.code) { + temp.forEach((element) { + if (element!.code == value.code && element.langCode == code) { registrationTaskProvider.addSimpleTypeDemographicField( - widget.field.id ?? "", item.name, code); + widget.field.id ?? "", element.name, code); + registrationTaskProvider.addSelectedCode(widget.field.id ?? "", element.code); } - } + }); } } else { registrationTaskProvider.addDemographicField( widget.field.id ?? "", value.name); + registrationTaskProvider.addSelectedCode(widget.field.id ?? "", value.code); } } } diff --git a/lib/ui/process_ui/widgets/dynamic_dropdown_control.dart b/lib/ui/process_ui/widgets/dynamic_dropdown_control.dart index 250212767..7890a41a1 100644 --- a/lib/ui/process_ui/widgets/dynamic_dropdown_control.dart +++ b/lib/ui/process_ui/widgets/dynamic_dropdown_control.dart @@ -57,16 +57,18 @@ class _CustomDynamicDropDownState extends State { String code = globalProvider.languageToCodeMapper[element]!; List temp = await _getFieldValues(widget.field.id!, code); - for (var item in temp) { - if (item!.code == value.code) { + temp.forEach((element) { + if (element!.code == value.code && element.langCode == code) { registrationTaskProvider.addSimpleTypeDemographicField( - widget.field.id ?? "", value.code, code); + widget.field.id ?? "", element.name, code); + registrationTaskProvider.addSelectedCode(widget.field.id ?? "", element.code); } - } + }); } } else { registrationTaskProvider.addDemographicField( - widget.field.id ?? "", value.code); + widget.field.id ?? "", value.name); + registrationTaskProvider.addSelectedCode(widget.field.id ?? "", value.code); } } } diff --git a/lib/ui/process_ui/widgets/gender_control.dart b/lib/ui/process_ui/widgets/gender_control.dart index ecf929f14..bec14ba4d 100644 --- a/lib/ui/process_ui/widgets/gender_control.dart +++ b/lib/ui/process_ui/widgets/gender_control.dart @@ -29,10 +29,10 @@ class GenderControl extends StatefulWidget { } class _CustomDynamicDropDownState extends State { - late String selected; + String? selected; late GlobalProvider globalProvider; late RegistrationTaskProvider registrationTaskProvider; - late List fieldValueData; + List? fieldValueData; @override void initState() { @@ -52,9 +52,9 @@ class _CustomDynamicDropDownState extends State { .getFieldValues( widget.field.subType!, lang, globalProvider.chosenLang); setState(() { - selected = fieldValueData[0]!.name; + selected = fieldValueData![0]!.name; }); - saveData(fieldValueData[0]!.code, fieldValueData[0]!.name); + saveData(fieldValueData![0]!.name, fieldValueData![0]!.code); _saveDataToMap(selected); } }); @@ -62,16 +62,25 @@ class _CustomDynamicDropDownState extends State { super.initState(); } - void saveData(value, name) { + void saveData(value, fieldCode) async{ if (widget.field.type == 'simpleType') { for (var element in globalProvider.chosenLang) { String code = globalProvider.languageToCodeMapper[element]!; - registrationTaskProvider.addSimpleTypeDemographicField( - widget.field.id ?? "", value, code); + List result = + await registrationTaskProvider.getFieldValues( + widget.field.subType!, code, globalProvider.chosenLang); + result.forEach((element) { + if(element!.code == fieldCode && element.langCode == code){ + registrationTaskProvider.addSimpleTypeDemographicField( + widget.field.id ?? "", element.name, code); + } + }); + registrationTaskProvider.addSelectedCode(widget.field.id ?? "", fieldCode); } } else { registrationTaskProvider.addDemographicField( widget.field.id ?? "", value); + registrationTaskProvider.addSelectedCode(widget.field.id ?? "", fieldCode); } } @@ -250,11 +259,13 @@ class _CustomDynamicDropDownState extends State { setState(() { selected = e[mandatoryLang] ?? ""; }); - for (var e in fieldValueData) { + if(fieldValueData!=null) { + for (var e in fieldValueData!) { if (e!.name == selected) { - saveData(e.code, e.name); + saveData(e.name, e.code); } } + } _saveDataToMap(e[mandatoryLang]); }, child: ChoiceChip( diff --git a/lib/ui/process_ui/widgets/html_box_control.dart b/lib/ui/process_ui/widgets/html_box_control.dart index c71da7f28..a5790d520 100644 --- a/lib/ui/process_ui/widgets/html_box_control.dart +++ b/lib/ui/process_ui/widgets/html_box_control.dart @@ -164,7 +164,6 @@ class _HtmlRendererState extends State { DemographicsApi().getHashValue(unit8List).then((value) { hash = value; globalProvider.fieldInputValue[widget.field.id!] = hash; - debugPrint("ID : ${widget.field.id!}"); DemographicsApi().addSimpleTypeDemographicField( widget.field.id!, value, diff --git a/lib/ui/process_ui/widgets/language_selector.dart b/lib/ui/process_ui/widgets/language_selector.dart index a0bdbec93..2789a0911 100644 --- a/lib/ui/process_ui/widgets/language_selector.dart +++ b/lib/ui/process_ui/widgets/language_selector.dart @@ -106,7 +106,7 @@ class _LanguageSelectorState extends State { _getDataEntryLabel() { String dataEntryLanguage = ""; context.watch().chosenLang.forEach((element) { - String code = globalProvider.languageToCodeMapper[element]!; + String code = context.read().selectedLanguage; dataEntryLanguage += " / ${AppLocalizations.of(context)!.dataEntryLanguage(code)}"; }); @@ -116,7 +116,7 @@ class _LanguageSelectorState extends State { _getNotificationLabel() { String notificationLanguage = ""; context.watch().chosenLang.forEach((element) { - String code = globalProvider.languageToCodeMapper[element]!; + String code = context.read().selectedLanguage; notificationLanguage += " / ${AppLocalizations.of(context)!.notificationLanguage(code)}"; }); diff --git a/lib/ui/process_ui/widgets/new_process_screen_content.dart b/lib/ui/process_ui/widgets/new_process_screen_content.dart index 66f656659..89fe79911 100644 --- a/lib/ui/process_ui/widgets/new_process_screen_content.dart +++ b/lib/ui/process_ui/widgets/new_process_screen_content.dart @@ -128,7 +128,7 @@ class _NewProcessScreenContentState extends State { validation: regexPattern, ); default: - return Text("${e.controlType}"); + return (e.controlType!=null)? Text("${e.controlType}"): const SizedBox.shrink(); } } diff --git a/lib/ui/process_ui/widgets/pre_reg_data_control.dart b/lib/ui/process_ui/widgets/pre_reg_data_control.dart index e62b3ad8b..e006a23d2 100644 --- a/lib/ui/process_ui/widgets/pre_reg_data_control.dart +++ b/lib/ui/process_ui/widgets/pre_reg_data_control.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:provider/provider.dart'; import 'package:registration_client/model/screen.dart'; +import 'package:registration_client/pigeon/biometrics_pigeon.dart'; import 'package:registration_client/pigeon/dynamic_response_pigeon.dart'; import 'package:registration_client/provider/global_provider.dart'; import 'package:registration_client/provider/registration_task_provider.dart'; @@ -173,6 +174,10 @@ class _PreRegDataControlState extends State { values!, globalProvider.fieldInputValue, ); + //set age group + BiometricsApi().getAgeGroup().then((value) { + globalProvider.ageGroup = value; + }); if(e.id != "gender" && e.fieldType != "dynamic"){ GenericData result = GenericData(name: values.toString(), code: values.toString(), langCode: lang); globalProvider.setInputMapValue( diff --git a/lib/ui/process_ui/widgets_mobile/biometric_capture_control_portrait.dart b/lib/ui/process_ui/widgets_mobile/biometric_capture_control_portrait.dart index cc8b37061..262c37738 100644 --- a/lib/ui/process_ui/widgets_mobile/biometric_capture_control_portrait.dart +++ b/lib/ui/process_ui/widgets_mobile/biometric_capture_control_portrait.dart @@ -382,7 +382,7 @@ class _BiometricCaptureControlPortraitState 2) .ceil() * 335.h) + - 70.h), + 410.h), width: double.infinity, child: ResponsiveGridList( listViewBuilderOptions: ListViewBuilderOptions( diff --git a/lib/ui/scanner/custom_scanner.dart b/lib/ui/scanner/custom_scanner.dart index f4e3dd460..4597caa6a 100644 --- a/lib/ui/scanner/custom_scanner.dart +++ b/lib/ui/scanner/custom_scanner.dart @@ -196,11 +196,16 @@ class _CustomScannerState extends State { } Future _uploadImage() async { - final pickedFile = - await ImagePicker().pickImage(source: ImageSource.camera); - if (pickedFile != null) { - _pickedFile = await pickedFile.readAsBytes(); - setState(() {}); + try { + final pickedFile = await ImagePicker().pickImage(source: ImageSource.camera); + if (pickedFile != null) { + _pickedFile = await pickedFile.readAsBytes(); + setState(() {}); + } else { + Navigator.pop(context); + } + } catch (e) { + Navigator.pop(context); } } diff --git a/pigeon/demographics_data.dart b/pigeon/demographics_data.dart index b83ca3fb1..cb8d0a359 100644 --- a/pigeon/demographics_data.dart +++ b/pigeon/demographics_data.dart @@ -42,4 +42,7 @@ abstract class DemographicsApi { @async String changeUpdatableFieldGroups(); + + @async + void addSelectedCode(String fieldId,String code); } diff --git a/pigeon/dynamic_response.dart b/pigeon/dynamic_response.dart index 78f4ea24d..c6ba73537 100644 --- a/pigeon/dynamic_response.dart +++ b/pigeon/dynamic_response.dart @@ -32,11 +32,13 @@ class LanguageData { class DynamicFieldData{ final String code; final String name; + final String langCode; final String concatenatedName; DynamicFieldData({ required this.code, required this.name, + required this.langCode, required this.concatenatedName, }); } diff --git a/pubspec.yaml b/pubspec.yaml index 7a2ab93c0..46734cf71 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -68,7 +68,7 @@ dependencies: android_alarm_manager_plus: ^3.0.2 http: ^0.13.6 flutter_config: ^2.0.2 - native_image_cropper: ^0.4.0 + native_image_cropper: ^0.6.0 qr_code_scanner: ^1.0.1 dev_dependencies: diff --git a/uitest-regclient/pom.xml b/uitest-regclient/pom.xml index 8b98f6301..dc38bc51d 100644 --- a/uitest-regclient/pom.xml +++ b/uitest-regclient/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 io.mosip.regclient uitest-regclient @@ -8,56 +8,69 @@ Parent project of MOSIP regclient mobile automation https://github.com/mosip/android-registration-client - - - MPL 2.0 - https://www.mozilla.org/en-US/MPL/2.0/ - - - - scm:git:git://github.com/mosip/admin-ui.git - scm:git:ssh://github.com:mosip/admin-ui.git - https://github.com/mosip/android-registration-client - HEAD - - - - Mosip - mosip.emailnotifier@gmail.com - io.mosip - https://github.com/mosip/android-registration-client - - + 21 + 21 UTF-8 - 11 - 11 - - - selenium-tests - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.10 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.12.4 + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.10.1 + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + + regclient.utils.TestRunner + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.3.0 + + + package + + shade + - - testng.xml - + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + regclient.utils.TestRunner + + - - - - - - + + + + + io.appium @@ -74,12 +87,107 @@ testng 7.7.1 - + + com.fasterxml.jackson.core + jackson-databind + 2.13.3 + org.keycloak keycloak-admin-client 17.0.1 + + com.fasterxml.jackson.core + jackson-core + 2.15.2 + + + org.jboss.resteasy + resteasy-jaxrs + 3.15.0.Final + + + org.json + json + 20230227 + + + commons-io + commons-io + 2.13.0 + + + com.aventstack + extentreports + 5.1.0 + + + junit + junit + 4.13.2 + test + + + io.rest-assured + rest-assured + 5.3.0 + + + org.apache.logging.log4j + log4j-api + 2.11.1 + + + org.slf4j + slf4j-log4j12 + 1.6.2 + + + javax.ws.rs + javax.ws.rs-api + 2.1.1 + + + org.yaml + snakeyaml + 1.29 + + + commons-beanutils + commons-beanutils + 1.9.4 + + + org.apache.logging.log4j + log4j-core + 2.11.1 + + + org.jboss.resteasy + resteasy-multipart-provider + 3.15.0.Final + + + org.jboss.resteasy + resteasy-client + 3.15.0.Final + + + org.jboss.resteasy + resteasy-client-microprofile + 3.15.0.Final + + + org.jboss.resteasy + resteasy-jackson2-provider + 3.15.0.Final + + + org.jboss.resteasy + resteasy-jaxb-provider + 3.15.0.Final + + - \ No newline at end of file diff --git a/uitest-regclient/src/test/java/BaseTest/AndroidBaseTest.java b/uitest-regclient/src/main/java/regclient/BaseTest/AndroidBaseTest.java similarity index 94% rename from uitest-regclient/src/test/java/BaseTest/AndroidBaseTest.java rename to uitest-regclient/src/main/java/regclient/BaseTest/AndroidBaseTest.java index c73c3b4ff..51272ff11 100644 --- a/uitest-regclient/src/test/java/BaseTest/AndroidBaseTest.java +++ b/uitest-regclient/src/main/java/regclient/BaseTest/AndroidBaseTest.java @@ -1,4 +1,4 @@ -package BaseTest; +package regclient.BaseTest; import org.testng.ITestResult; import org.testng.annotations.AfterMethod; diff --git a/uitest-regclient/src/test/java/BaseTest/BaseTest.java b/uitest-regclient/src/main/java/regclient/BaseTest/BaseTest.java similarity index 60% rename from uitest-regclient/src/test/java/BaseTest/BaseTest.java rename to uitest-regclient/src/main/java/regclient/BaseTest/BaseTest.java index 513adabef..75b8c14a9 100644 --- a/uitest-regclient/src/test/java/BaseTest/BaseTest.java +++ b/uitest-regclient/src/main/java/regclient/BaseTest/BaseTest.java @@ -1,9 +1,8 @@ -package BaseTest; +package regclient.BaseTest; import io.appium.java_client.AppiumDriver; import regclient.driver.DriverManager; -import regclient.utils.TestDataReader; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; @@ -13,9 +12,6 @@ public class BaseTest { @BeforeSuite(alwaysRun = true) public void beforeSuite() { - System.getProperties().setProperty("testng.outpur.dir", "test-output"); - System.getProperties().setProperty("emailable.report2.name", "AndroidRegClient-"+TestDataReader.readData("env") - +"-run-" + System.currentTimeMillis() + "-report.html"); DriverManager.startAppiumServer(); } diff --git a/uitest-regclient/src/main/java/regclient/androidTestCases/AddMachineDetails.java b/uitest-regclient/src/main/java/regclient/androidTestCases/AddMachineDetails.java new file mode 100644 index 000000000..c1e157fe6 --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/AddMachineDetails.java @@ -0,0 +1,43 @@ +package regclient.androidTestCases; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; + +import org.testng.annotations.Test; + +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.AdminTestUtil; +import regclient.api.ConfigManager; +import regclient.api.KeycloakUserManager; +import regclient.page.BasePage; +import regclient.pages.english.LoginPageEnglish; + + +public class AddMachineDetails extends AndroidBaseTest{ + + @Test + public void addMachineDetails() throws UnsupportedFlavorException, IOException { + + BasePage.disableAutoRotation(); + LoginPageEnglish loginPage= new LoginPageEnglish(driver); + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), "verify if the welcome msg in selected language displayed"); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + +// assertTrue(loginPage.isMachineNotFoundMessageDisplayed(), "verify if the machine not found message displayed"); + loginPage.clickandHold(); + loginPage.clickOnCopyTextButton(); + loginPage.getMachineDetails(); + String id=AdminTestUtil.creteaMachine(BasePage.getSignPublicKey(),BasePage.getPublicKey(),BasePage.getName()); + String responce=AdminTestUtil.activateMachine(id); + assertEquals(responce, "Status updated successfully for machine","verify if machine is created or not "); + + } + +} diff --git a/uitest-regclient/src/main/java/regclient/androidTestCases/IntialLunch.java b/uitest-regclient/src/main/java/regclient/androidTestCases/IntialLunch.java new file mode 100644 index 000000000..656f77e1b --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/IntialLunch.java @@ -0,0 +1,37 @@ +package regclient.androidTestCases; + +import static org.testng.Assert.assertTrue; + +import org.testng.annotations.Test; + +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.KeycloakUserManager; +import regclient.page.BasePage; +import regclient.pages.english.LoginPageEnglish; + +public class IntialLunch extends AndroidBaseTest { + + @Test + public void initallLaunch() { + BasePage.disableAutoRotation(); + LoginPageEnglish loginPage= new LoginPageEnglish(driver); + + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), "verify if the welcome msg in selected language displayed"); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + + assertTrue(loginPage.isNextButtonEnabled(), "verify if the next button enabled"); + loginPage.clickOnNextButton(); + + assertTrue(loginPage.isBackButtonDisplayed(), "Verify if back button is displayed"); + assertTrue(loginPage.isForgetOptionDisplayed(), "Verify if forget password option is displayed"); + assertTrue(loginPage.isPasswordHeaderDisplayed(), "Verify if the password input box header displayed"); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); + + assertTrue(loginPage.isLoginButtonEnabled(), "Verify if the login button enabled"); + loginPage.clickOnloginButton(); + + assertTrue(loginPage.isSyncCompletedSuccessfullyMessageDisplayed(), "Verify if the sync is completed"); + + } +} diff --git a/uitest-regclient/src/test/java/androidTestCases/NewRegistrationAdult.java b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationAdult.java similarity index 61% rename from uitest-regclient/src/test/java/androidTestCases/NewRegistrationAdult.java rename to uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationAdult.java index 976775294..dea4db21f 100644 --- a/uitest-regclient/src/test/java/androidTestCases/NewRegistrationAdult.java +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationAdult.java @@ -1,25 +1,27 @@ -package androidTestCases; +package regclient.androidTestCases; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import org.testng.annotations.Test; -import BaseTest.AndroidBaseTest; +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; import regclient.page.AcknowledgementPage; import regclient.page.ApplicantBiometricsPage; import regclient.page.AuthenticationPage; import regclient.page.BasePage; import regclient.page.BiometricDetailsPage; -import regclient.page.CameraPage; import regclient.page.ConsentPage; import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; -import regclient.page.IdentityProofPage; import regclient.page.IntroducerBiometricPage; import regclient.page.LoginPage; import regclient.page.ManageApplicationsPage; import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; import regclient.page.PreviewPage; import regclient.page.ProfilePage; import regclient.page.RegistrationTasksPage; @@ -31,11 +33,11 @@ import regclient.pages.arabic.ConsentPageArabic; import regclient.pages.arabic.DemographicDetailsPageArabic; import regclient.pages.arabic.DocumentuploadPageArabic; -import regclient.pages.arabic.IdentityProofPageArabic; import regclient.pages.arabic.IntroducerBiometricPageArabic; import regclient.pages.arabic.LoginPageArabic; import regclient.pages.arabic.ManageApplicationsPageArabic; import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; import regclient.pages.arabic.PreviewPageArabic; import regclient.pages.arabic.ProfilePageArabic; import regclient.pages.arabic.RegistrationTasksPageArabic; @@ -47,11 +49,11 @@ import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; import regclient.pages.english.DocumentuploadPageEnglish; -import regclient.pages.english.IdentityProofPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; import regclient.pages.english.PreviewPageEnglish; import regclient.pages.english.ProfilePageEnglish; import regclient.pages.english.RegistrationTasksPageEnglish; @@ -63,11 +65,11 @@ import regclient.pages.french.ConsentPageFrench; import regclient.pages.french.DemographicDetailsPageFrench; import regclient.pages.french.DocumentUploadPageFrench; -import regclient.pages.french.IdentityProofPageFrench; import regclient.pages.french.IntroducerBiometricPageFrench; import regclient.pages.french.LoginPageFrench; import regclient.pages.french.ManageApplicationsPageFrench; import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; import regclient.pages.french.PreviewPageFrench; import regclient.pages.french.ProfilePageFrench; import regclient.pages.french.RegistrationTasksPageFrench; @@ -79,11 +81,11 @@ import regclient.pages.hindi.ConsentPageHindi; import regclient.pages.hindi.DemographicDetailsPageHindi; import regclient.pages.hindi.DocumentUploadPageHindi; -import regclient.pages.hindi.IdentityProofPageHindi; import regclient.pages.hindi.IntroducerBiometricPageHindi; import regclient.pages.hindi.LoginPageHindi; import regclient.pages.hindi.ManageApplicationsPageHindi; import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; import regclient.pages.hindi.PreviewPageHindi; import regclient.pages.hindi.ProfilePageHindi; import regclient.pages.hindi.RegistrationTasksPageHindi; @@ -95,11 +97,11 @@ import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; import regclient.pages.kannada.DocumentuploadPageKannada; -import regclient.pages.kannada.IdentityProofPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; import regclient.pages.kannada.PreviewPageKannada; import regclient.pages.kannada.ProfilePageKannada; import regclient.pages.kannada.RegistrationTasksPageKannada; @@ -111,11 +113,11 @@ import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; import regclient.pages.tamil.DocumentuploadPageTamil; -import regclient.pages.tamil.IdentityProofPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; import regclient.pages.tamil.PreviewPageTamil; import regclient.pages.tamil.ProfilePageTamil; import regclient.pages.tamil.RegistrationTasksPageTamil; @@ -127,19 +129,21 @@ public class NewRegistrationAdult extends AndroidBaseTest { @Test public void newRegistrationAdult(){ BasePage.disableAutoRotation(); + FetchUiSpec.getUiSpec("newProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage=null; SelectLanguagePage selectLanguagePage=null; ConsentPage consentPage=null; DemographicDetailsPage demographicPage=null; DocumentUploadPage documentuploadPage=null; - IdentityProofPage identityProofPage=null; BiometricDetailsPage biometricDetailsPage=null; ApplicantBiometricsPage applicantBiometricsPage=null; PreviewPage previewPage=null; AuthenticationPage authenticationPage=null; AcknowledgementPage acknowledgementPage=null; OperationalTaskPage operationalTaskPage=null; + PendingApproval pendingApproval=null; ManageApplicationsPage manageApplicationsPage=null; ProfilePage profilePage=null; @@ -164,10 +168,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage.selectLanguage(); assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), "verify if the welcome msg in selected language displayed"); - loginPage.enterUserName(TestDataReader.readData("username")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { @@ -266,39 +270,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ demographicPage=new DemographicDetailsPageArabic(driver); } assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); - demographicPage.enterFullName(TestDataReader.readData("fullname")); + demographicPage.fillDemographicDetailsPage("adult"); - assertTrue(demographicPage.checkFullNameSecondLanguageTextBoxNotNull(),"Verify if first name is enter in second language text box"); - demographicPage.enterAge(TestDataReader.readData("adultage")); - demographicPage.selectGender(TestDataReader.readData("gender")); - demographicPage.enterAddressLine1(TestDataReader.readData("address")); - demographicPage.enterAddressLine2(TestDataReader.readData("address")); - demographicPage.enterAddressLine3(TestDataReader.readData("address")); - demographicPage.selectMaritalStatus(); - - assertTrue(demographicPage.isResidenceStatusHeaderDisplayed(),"Verify if residence status header is displayed"); - demographicPage.selectResidenceStatus(TestDataReader.readData("residenceStatus")); - - assertTrue(demographicPage.isRegionHeaderDisplayed(),"Verify if region status header is displayed"); - demographicPage.selectRegionStatus(TestDataReader.readData("region")); - - assertTrue(demographicPage.isProvinceHeaderDisplayed(),"Verify if province status header is displayed"); - demographicPage.selectProvinceStatus(TestDataReader.readData("province")); - - assertTrue(demographicPage.isCityHeaderDisplayed(),"Verify if city header is displayed"); - demographicPage.selectCityStatus(TestDataReader.readData("city")); - - assertTrue(demographicPage.isZoneHeaderDisplayed(),"Verify if zone header is displayed"); - demographicPage.selectZoneStatus(); - - assertTrue(demographicPage.isPostalCodeHeaderDisplayed(),"Verify if postal code header is displayed"); - demographicPage.selectPostalStatus(); - - assertTrue(demographicPage.isMobileNumberHeaderDisplayed(),"Verify if mobile number header is displayed"); - demographicPage.enterMobileNumber(TestDataReader.readData("mobileNumber")); - - assertTrue(demographicPage.isEmailHeaderDisplayed(),"Verify if email header is displayed"); - demographicPage.enterEmailID(TestDataReader.readData("emailId")); demographicPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { documentuploadPage=new DocumentuploadPageEnglish(driver); @@ -319,72 +292,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ documentuploadPage=new DocumentuploadPageArabic(driver); } assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.enterReferenceNumberInAdressProof(); - documentuploadPage.selectAddressProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonAddressProofEnabled(),"Verify if scan button enabled"); - CameraPage cameraPage=documentuploadPage.clickOnAddressProofScanButton(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - identityProofPage=new IdentityProofPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - identityProofPage=new IdentityProofPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - identityProofPage=new IdentityProofPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - identityProofPage=new IdentityProofPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - identityProofPage=new IdentityProofPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - identityProofPage=new IdentityProofPageArabic(driver); - } - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectOnCaptureImage(); - - assertTrue(documentuploadPage.isImageDisplyed(),"Verify if capture image is displayed"); - documentuploadPage.clickOnBackButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.enterReferenceNumberInIdentityProof(); - documentuploadPage.selectIdentityProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonIdentityProofEnabled(),"Verify if scan button enabled"); - cameraPage=documentuploadPage.clickOnScanButtonIdentityProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.enterReferenceNumberInDobProof(); - documentuploadPage.selectDobProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isDobHeaderDisplayed(),"Verify if DOB header is displayed"); - cameraPage=documentuploadPage.clickOnScanButtonDobProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); + documentuploadPage.uploadDoccuments("adult","ReferenceNumber"); documentuploadPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { biometricDetailsPage=new BiometricDetailsPageEnglish(driver); @@ -404,8 +312,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ biometricDetailsPage=new BiometricDetailsPageArabic(driver); } - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIrisScan(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); } @@ -425,62 +331,74 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); } - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - - applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 2nd attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - - applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 3rd attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + + applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 2nd attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + + applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 3rd attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //righthand - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); + if(FetchUiSpec.rightHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //lefthand - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //thumb - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //face - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnFaceScanIcon(); + if(FetchUiSpec.face.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); - - assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); biometricDetailsPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { @@ -528,8 +446,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ authenticationPage=new AuthenticationPageArabic(driver); } assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); - authenticationPage.enterUserName(TestDataReader.readData("username")); - authenticationPage.enterPassword(TestDataReader.readData("password")); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); authenticationPage.clickOnAuthenticatenButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { acknowledgementPage=new AcknowledgementPageEnglish(driver); @@ -551,7 +469,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ } assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(),"Verify if acknowledgement details page is displayed"); - //assertTrue(acknowledgementPage.isQrCodeImageDisplayed(),"Verify if qr code image is displayed"); + //assertTrue(acknowledgementPage.isQrCodeImageDisplayed(),"Verify if qr code image is displayed"); acknowledgementPage.clickOnGoToHomeButton(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); @@ -576,6 +494,45 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ operationalTaskPage=new OperationalTaskPageArabic(driver); } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); operationalTaskPage.clickApplicationUploadTitle(); @@ -611,12 +568,12 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage.clickOnSearchCheckBox(); manageApplicationsPage.clickOnUploadButton(); - assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); -manageApplicationsPage.clickOnBackButton(); - + // assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); + manageApplicationsPage.clickOnBackButton(); + assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); registrationTasksPage.clickProfileButton(); - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { profilePage=new ProfilePageEnglish(driver); } @@ -635,16 +592,18 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ profilePage=new ProfilePageArabic(driver); } - assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + //assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); profilePage.clickOnLogoutButton(); - + profilePage.clickOnLogoutButton(); - + assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded in Selected language"); } @Test - public void newRegistrationAdultUploadMultipleDoccuments(){ + public void newRegistrationAdultUploadMultipleDoccuments(){ + FetchUiSpec.getUiSpec("newProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); BasePage.disableAutoRotation(); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage=null; @@ -652,12 +611,12 @@ public void newRegistrationAdultUploadMultipleDoccuments(){ ConsentPage consentPage=null; DemographicDetailsPage demographicPage=null; DocumentUploadPage documentuploadPage=null; - IdentityProofPage identityProofPage=null; BiometricDetailsPage biometricDetailsPage=null; ApplicantBiometricsPage applicantBiometricsPage=null; PreviewPage previewPage=null; AuthenticationPage authenticationPage=null; AcknowledgementPage acknowledgementPage=null; + PendingApproval pendingApproval=null; IntroducerBiometricPage introducerBiometricPage=null; OperationalTaskPage operationalTaskPage=null; @@ -683,10 +642,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ } loginPage.selectLanguage(); - loginPage.enterUserName(TestDataReader.readData("username")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); @@ -780,42 +739,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ demographicPage=new DemographicDetailsPageArabic(driver); } assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); - demographicPage.enterFullName(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.checkFullNameSecondLanguageTextBoxNotNull(),"Verify if first name is enter in second language text box"); - demographicPage.enterAge(TestDataReader.readData("adultage")); - demographicPage.selectGender(TestDataReader.readData("gender")); - demographicPage.enterAddressLine1(TestDataReader.readData("address")); - demographicPage.enterAddressLine2(TestDataReader.readData("address")); - demographicPage.enterAddressLine3(TestDataReader.readData("address")); - demographicPage.selectMaritalStatus(); - - assertTrue(demographicPage.isResidenceStatusHeaderDisplayed(),"Verify if residence status header is displayed"); - demographicPage.selectResidenceStatus(TestDataReader.readData("residenceStatus")); - - assertTrue(demographicPage.isRegionHeaderDisplayed(),"Verify if region status header is displayed"); - demographicPage.selectRegionStatus(TestDataReader.readData("region")); - - assertTrue(demographicPage.isProvinceHeaderDisplayed(),"Verify if province status header is displayed"); - demographicPage.selectProvinceStatus(TestDataReader.readData("province")); - - assertTrue(demographicPage.isCityHeaderDisplayed(),"Verify if city header is displayed"); - demographicPage.selectCityStatus(TestDataReader.readData("city")); - - assertTrue(demographicPage.isZoneHeaderDisplayed(),"Verify if zone header is displayed"); - demographicPage.selectZoneStatus(); - - assertTrue(demographicPage.isPostalCodeHeaderDisplayed(),"Verify if postal code header is displayed"); - demographicPage.selectPostalStatus(); - - assertTrue(demographicPage.isMobileNumberHeaderDisplayed(),"Verify if mobile number header is displayed"); - demographicPage.enterMobileNumber(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.isErrorMessageInvalidInputTextDisplayed(),"Verify if invalid text error message text is displayed"); - demographicPage.enterMobileNumber(TestDataReader.readData("mobileNumber")); + demographicPage.fillDemographicDetailsPage("adult"); - assertTrue(demographicPage.isEmailHeaderDisplayed(),"Verify if email header is displayed"); - demographicPage.enterEmailID(TestDataReader.readData("emailId")); demographicPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { documentuploadPage=new DocumentuploadPageEnglish(driver); @@ -836,106 +761,14 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ documentuploadPage=new DocumentuploadPageArabic(driver); } assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectAddressProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonAddressProofEnabled(),"Verify if scan button enabled"); - CameraPage cameraPage=documentuploadPage.clickOnAddressProofScanButton(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - identityProofPage=new IdentityProofPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - identityProofPage=new IdentityProofPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - identityProofPage=new IdentityProofPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - identityProofPage=new IdentityProofPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - identityProofPage=new IdentityProofPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - identityProofPage=new IdentityProofPageArabic(driver); - } - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isImageDisplyed(),"Verify if 1st capture image is displayed"); + documentuploadPage.uploadDoccuments("adult","withoutReferenceNumber"); assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectAddressProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonAddressProofEnabled(),"Verify if scan button enabled"); - documentuploadPage.clickOnAddressProofScanButton(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isSecondImageDisplyed(),"Verify if 2nd capture image is displayed"); + documentuploadPage.uploadDoccuments("adult","withoutReferenceNumber"); assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectAddressProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonAddressProofEnabled(),"Verify if scan button enabled"); - documentuploadPage.clickOnAddressProofScanButton(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isThirdImageDisplyed(),"Verify if 3nd capture image is displayed"); - - assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectOnCaptureImage(); - - assertTrue(documentuploadPage.isImageDisplyed(),"Verify if capture image is displayed"); - documentuploadPage.clickOnBackButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.clickOnDeleteButton(); - - assertFalse(documentuploadPage.isThirdImageDisplyed(),"Verify if 3nd capture image is deleted"); - documentuploadPage.selectIdentityProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonIdentityProofEnabled(),"Verify if scan button enabled"); - documentuploadPage.clickOnScanButtonIdentityProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); + documentuploadPage.uploadDoccuments("adult","withoutReferenceNumber"); - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectDobProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isDobHeaderDisplayed(),"Verify if DOB header is displayed"); - documentuploadPage.clickOnScanButtonDobProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); documentuploadPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { biometricDetailsPage=new BiometricDetailsPageEnglish(driver); @@ -957,7 +790,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if Reference id field an optional in document upload page."); assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIrisScan(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); } @@ -977,52 +809,64 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); } - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //righthand - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); + if(FetchUiSpec.rightHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //lefthand - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //thumb - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //face - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnFaceScanIcon(); + if(FetchUiSpec.face.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); biometricDetailsPage.clickOnContinueButton(); @@ -1053,164 +897,84 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ previewPage.clickOnDemographicDetailsTitle(); assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); - demographicPage.enterFullName(TestDataReader.readData("editData")); - demographicPage.enterAge(TestDataReader.readData("minorAge")); - demographicPage.enterAddressLine1(TestDataReader.readData("editData")); - demographicPage.enterAddressLine2(TestDataReader.readData("editData")); - demographicPage.enterAddressLine3(TestDataReader.readData("editData")); - - assertTrue(demographicPage.isIntroducerNameHeaderDisplayed(),"Verify if introducer name header is displayed"); - demographicPage.enterIntroducerName(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.checkIntroducerNameTextBoxSecondLangaugeTextBoxNotNull(),"Verify if introduceR name is enter in second language text box"); - - assertTrue(demographicPage.isIntroducerRidHeaderDisplayed(),"Verify if introducer rid header is displayed"); - demographicPage.enterIntroducerRid(TestDataReader.readData("RID")); - - + demographicPage.fillDemographicDetailsPage("minor"); demographicPage.clickOnContinueButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - documentuploadPage=new DocumentuploadPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - documentuploadPage=new DocumentUploadPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - documentuploadPage=new DocumentUploadPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - documentuploadPage=new DocumentuploadPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - documentuploadPage=new DocumentuploadPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - documentuploadPage=new DocumentuploadPageArabic(driver); - } - assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectAddressProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonAddressProofEnabled(),"Verify if scan button enabled"); - documentuploadPage.clickOnAddressProofScanButton(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - identityProofPage=new IdentityProofPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - identityProofPage=new IdentityProofPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - identityProofPage=new IdentityProofPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - identityProofPage=new IdentityProofPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - identityProofPage=new IdentityProofPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - identityProofPage=new IdentityProofPageArabic(driver); - } - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectIdentityProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonIdentityProofEnabled(),"Verify if scan button enabled"); - cameraPage=documentuploadPage.clickOnScanButtonIdentityProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); + documentuploadPage.uploadDoccuments("minor","withoutReferenceNumber"); - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectRelationshipProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonRelationshipProoffEnabled(),"Verify if scan button enabled"); - cameraPage=documentuploadPage.clickOnScanButtonRelationshipProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectDobProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isDobHeaderDisplayed(),"Verify if DOB header is displayed"); - cameraPage=documentuploadPage.clickOnScanButtonDobProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); documentuploadPage.clickOnContinueButton(); assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); - biometricDetailsPage.clickOnIrisScan(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnMarkExceptionButton(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.markOneEyeException(); + // applicantBiometricsPage.clickOnExceptionTypeTemporaryButton(); + // + // assertTrue(applicantBiometricsPage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); + //applicantBiometricsPage.enterCommentsInTextBox(TestDataReader.readData("comments")); - assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - applicantBiometricsPage.markOneEyeException(); - applicantBiometricsPage.clickOnExceptionTypeTemporaryButton(); + applicantBiometricsPage.clickOnIrisScanTitle(); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); - //applicantBiometricsPage.enterCommentsInTextBox(TestDataReader.readData("comments")); + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnIrisScanTitle(); - applicantBiometricsPage.clickOnScanButton(); + applicantBiometricsPage.clickOnBackButton(); + } + //righthand + if(FetchUiSpec.rightHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - - applicantBiometricsPage.clickOnNextButton(); - assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); - applicantBiometricsPage.clickOnScanButton(); - + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //lefthand - assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); - applicantBiometricsPage.clickOnScanButton(); + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); - assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //thumb - assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); - assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //face - assertTrue(applicantBiometricsPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + if(FetchUiSpec.face.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); - assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); biometricDetailsPage.clickOnContinueButton(); @@ -1227,9 +991,9 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); biometricDetailsPage.clickOnContinueButton(); - + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIntroducerIrisScan(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { introducerBiometricPage=new IntroducerBiometricPageEnglish(driver); } @@ -1249,44 +1013,67 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ introducerBiometricPage=new IntroducerBiometricPageArabic(driver); } - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - introducerBiometricPage.clickOnScanButton(); + FetchUiSpec.getBiometricDetails("introducerBiometrics"); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerIrisScan(); + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //righthand - assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.rightHand.equals("yes")) { + if(!FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerRightHandScan(); + } + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + + assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //lefthand - assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + + assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //thumb - assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + + assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //face - assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.face.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + + assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + biometricDetailsPage=introducerBiometricPage.clickOnNextButton(); + } - assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - biometricDetailsPage=introducerBiometricPage.clickOnNextButton(); - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnContinueButton(); - + biometricDetailsPage.clickOnContinueButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { previewPage=new PreviewPageEnglish(driver); } @@ -1334,8 +1121,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ authenticationPage=new AuthenticationPageArabic(driver); } assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); - authenticationPage.enterUserName(TestDataReader.readData("username")); - authenticationPage.enterPassword(TestDataReader.readData("password")); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); authenticationPage.clickOnAuthenticatenButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { acknowledgementPage=new AcknowledgementPageEnglish(driver); @@ -1356,12 +1143,11 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ acknowledgementPage=new AcknowledgementPageArabic(driver); } assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(),"Verify if acknowledgement details page is displayed"); - //assertTrue(acknowledgementPage.isQrCodeImageDisplayed(),"Verify if qr code image is displayed"); acknowledgementPage.clickOnGoToHomeButton(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); registrationTasksPage.clickOnNewRegistrationButton(); - + assertTrue(selectLanguagePage.isSelectLanguagePageLoaded(),"Verify if select language page is loaded"); selectLanguagePage.selectAllSecondLanguage(); @@ -1369,10 +1155,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ selectLanguagePage.selectNotificationlanguage(TestDataReader.readData("notificationLanguage")); selectLanguagePage.clickOnSubmitButton(); - assertFalse(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded"); + assertFalse(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded after selecting all languages"); consentPage.clickOnCancelButton(); - assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded after click on cancel button"); registrationTasksPage.clickOnOperationalTasksTitle(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { operationalTaskPage=new OperationalTaskPageEnglish(driver); @@ -1394,6 +1180,45 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ operationalTaskPage=new OperationalTaskPageArabic(driver); } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); operationalTaskPage.clickApplicationUploadTitle(); @@ -1422,8 +1247,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage.clickOnSearchCheckBox(); manageApplicationsPage.clickOnUploadButton(); - manageApplicationsPage.selectUploadedOptionDropdown(); - assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); } - + } diff --git a/uitest-regclient/src/test/java/androidTestCases/UpdateMyUinUpdateBiometrics.java b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationAdultException.java similarity index 67% rename from uitest-regclient/src/test/java/androidTestCases/UpdateMyUinUpdateBiometrics.java rename to uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationAdultException.java index e25c89dc4..6fcf1cc81 100644 --- a/uitest-regclient/src/test/java/androidTestCases/UpdateMyUinUpdateBiometrics.java +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationAdultException.java @@ -1,10 +1,13 @@ -package androidTestCases; +package regclient.androidTestCases; import static org.testng.Assert.assertTrue; import org.testng.annotations.Test; -import BaseTest.AndroidBaseTest; +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; import regclient.page.AcknowledgementPage; import regclient.page.ApplicantBiometricsPage; import regclient.page.AuthenticationPage; @@ -16,11 +19,11 @@ import regclient.page.LoginPage; import regclient.page.ManageApplicationsPage; import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; import regclient.page.PreviewPage; import regclient.page.ProfilePage; import regclient.page.RegistrationTasksPage; import regclient.page.SelectLanguagePage; -import regclient.page.UpdateUINPage; import regclient.pages.arabic.AcknowledgementPageArabic; import regclient.pages.arabic.ApplicantBiometricsPageArabic; import regclient.pages.arabic.AuthenticationPageArabic; @@ -31,11 +34,11 @@ import regclient.pages.arabic.LoginPageArabic; import regclient.pages.arabic.ManageApplicationsPageArabic; import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; import regclient.pages.arabic.PreviewPageArabic; import regclient.pages.arabic.ProfilePageArabic; import regclient.pages.arabic.RegistrationTasksPageArabic; import regclient.pages.arabic.SelectLanguagePageArabic; -import regclient.pages.arabic.UpdateUINPageArabic; import regclient.pages.english.AcknowledgementPageEnglish; import regclient.pages.english.ApplicantBiometricsPageEnglish; import regclient.pages.english.AuthenticationPageEnglish; @@ -46,11 +49,11 @@ import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; import regclient.pages.english.PreviewPageEnglish; import regclient.pages.english.ProfilePageEnglish; import regclient.pages.english.RegistrationTasksPageEnglish; import regclient.pages.english.SelectLanguagePageEnglish; -import regclient.pages.english.UpdateUINPageEnglish; import regclient.pages.french.AcknowledgementPageFrench; import regclient.pages.french.ApplicantBiometricsPageFrench; import regclient.pages.french.AuthenticationPageFrench; @@ -61,11 +64,11 @@ import regclient.pages.french.LoginPageFrench; import regclient.pages.french.ManageApplicationsPageFrench; import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; import regclient.pages.french.PreviewPageFrench; import regclient.pages.french.ProfilePageFrench; import regclient.pages.french.RegistrationTasksPageFrench; import regclient.pages.french.SelectLanguagePageFrench; -import regclient.pages.french.UpdateUINPageFrench; import regclient.pages.hindi.AcknowledgementPageHindi; import regclient.pages.hindi.ApplicantBiometricsPageHindi; import regclient.pages.hindi.AuthenticationPageHindi; @@ -76,11 +79,11 @@ import regclient.pages.hindi.LoginPageHindi; import regclient.pages.hindi.ManageApplicationsPageHindi; import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; import regclient.pages.hindi.PreviewPageHindi; import regclient.pages.hindi.ProfilePageHindi; import regclient.pages.hindi.RegistrationTasksPageHindi; import regclient.pages.hindi.SelectLanguagePageHindi; -import regclient.pages.hindi.UpdateUINPageHindi; import regclient.pages.kannada.AcknowledgementPageKannada; import regclient.pages.kannada.ApplicantBiometricsPageKannada; import regclient.pages.kannada.AuthenticationPageKannada; @@ -91,11 +94,11 @@ import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; import regclient.pages.kannada.PreviewPageKannada; import regclient.pages.kannada.ProfilePageKannada; import regclient.pages.kannada.RegistrationTasksPageKannada; import regclient.pages.kannada.SelectLanguagePageKannada; -import regclient.pages.kannada.UpdateUINPageKannada; import regclient.pages.tamil.AcknowledgementPageTamil; import regclient.pages.tamil.ApplicantBiometricsPageTamil; import regclient.pages.tamil.AuthenticationPageTamil; @@ -106,17 +109,19 @@ import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; import regclient.pages.tamil.PreviewPageTamil; import regclient.pages.tamil.ProfilePageTamil; import regclient.pages.tamil.RegistrationTasksPageTamil; import regclient.pages.tamil.SelectLanguagePageTamil; -import regclient.pages.tamil.UpdateUINPageTamil; import regclient.utils.TestDataReader; -public class UpdateMyUinUpdateBiometrics extends AndroidBaseTest { +public class NewRegistrationAdultException extends AndroidBaseTest { @Test - public void updateMyUINUpdatebiometrics(){ + public void newRegistrationAdultException(){ + FetchUiSpec.getUiSpec("newProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); BasePage.disableAutoRotation(); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage=null; @@ -130,9 +135,9 @@ public void updateMyUINUpdatebiometrics(){ AuthenticationPage authenticationPage=null; AcknowledgementPage acknowledgementPage=null; OperationalTaskPage operationalTaskPage=null; + PendingApproval pendingApproval=null; ManageApplicationsPage manageApplicationsPage=null; ProfilePage profilePage=null; - UpdateUINPage updateUINPage=null; if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { @@ -154,10 +159,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage = new LoginPageArabic(driver); } loginPage.selectLanguage(); - loginPage.enterUserName(TestDataReader.readData("username")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); @@ -179,8 +184,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ registrationTasksPage=new RegistrationTasksPageArabic(driver); } assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); - registrationTasksPage.clickUpdateMyUINButton(); - + registrationTasksPage.clickOnNewRegistrationButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { selectLanguagePage=new SelectLanguagePageEnglish(driver); } @@ -200,9 +204,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ selectLanguagePage=new SelectLanguagePageArabic(driver); } assertTrue(selectLanguagePage.isSelectLanguagePageLoaded(),"Verify if select language page is loaded"); - selectLanguagePage.clickOnSubmitButtonWithoutSelectingLanguage(); - - assertTrue(selectLanguagePage.isSelectLanguagePageLoaded(),"Verify if user should not be allow to navigate to next screen."); selectLanguagePage.selectSecondLanguage(); assertTrue(selectLanguagePage.isNotificationLanguageEnglishDisplayed(),"verify if the notification language display in english"); @@ -210,36 +211,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(selectLanguagePage.isSubmitButtonEnabled(),"verify if the submit button enabled"); selectLanguagePage.clickOnSubmitButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - updateUINPage =new UpdateUINPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - updateUINPage =new UpdateUINPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - updateUINPage =new UpdateUINPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - updateUINPage =new UpdateUINPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - updateUINPage =new UpdateUINPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - updateUINPage =new UpdateUINPageArabic(driver); - } - - assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is displayed"); - updateUINPage.clickOnContinueButton(); - - assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is still displayed after clicking continue button "); - updateUINPage.enterUIN(TestDataReader.readData("UIN")); - - assertTrue(updateUINPage.isnBiometricsTitleDisplayed(),"verify if the biometrics title is displayed"); - updateUINPage.clickOnBiometricsButton(); - - updateUINPage.clickOnContinueButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { consentPage =new ConsentPageEnglish(driver); } @@ -260,6 +231,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ } assertTrue(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded"); + assertTrue(consentPage.isInformedButtonEnabled(),"Verify if informed button enabled"); + consentPage.clickOnInformedButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { demographicPage=new DemographicDetailsPageEnglish(driver); } @@ -279,11 +252,32 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ demographicPage=new DemographicDetailsPageArabic(driver); } - - consentPage.clickOnInformedButton(); + assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); + assertTrue(demographicPage.isContinueButtonEnable(),"Verify if continue button is enabled with filling demographic details"); + demographicPage.fillDemographicDetailsPage("adult"); demographicPage.clickOnContinueButton(); - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + documentuploadPage=new DocumentuploadPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + documentuploadPage=new DocumentUploadPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + documentuploadPage=new DocumentUploadPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + documentuploadPage=new DocumentuploadPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + documentuploadPage=new DocumentuploadPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + documentuploadPage=new DocumentuploadPageArabic(driver); + } + assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); + documentuploadPage.uploadDoccuments("adult","withoutReferenceNumber"); + documentuploadPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { biometricDetailsPage=new BiometricDetailsPageEnglish(driver); } @@ -303,8 +297,9 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ biometricDetailsPage=new BiometricDetailsPageArabic(driver); } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIrisScan(); + biometricDetailsPage.clickOnContinueButton(); + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if user is not navigated to the next page without biometric scan"); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); } @@ -324,80 +319,133 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); } - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); - //righthand - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnContinueButton(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.markOneEyeException(); - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if user is able to continue with just one biometrics"); - biometricDetailsPage.clickOnRightHandScanIcon(); + assertTrue(applicantBiometricsPage.isExceptionCountDisplyed(),"Verify if exception count is displayed"); + // applicantBiometricsPage.clickOnExceptionTypeTemporaryButton(); + // + // assertTrue(applicantBiometricsPage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); + // applicantBiometricsPage.enterCommentsInTextBox(TestDataReader.readData("comments")); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + applicantBiometricsPage.clickOnIrisScanTitle(); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } + if(FetchUiSpec.rightHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); + + assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); + + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.clickOnZoomButton(); + + assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); + applicantBiometricsPage.markOneFingureException(); + applicantBiometricsPage.clickOnClosePopUp(); + + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.clickOnRightHandScanTitle(); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //lefthand - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); - assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.clickOnZoomButton(); + + assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); + applicantBiometricsPage.markOneFingureException(); + applicantBiometricsPage.clickOnClosePopUp(); + + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception type is displayed"); + assertTrue(applicantBiometricsPage.isExceptionCountDisplyed(),"Verify if exception count is displayed"); + // applicantBiometricsPage.clickOnExceptionTypeTemporaryButton(); + // + // assertTrue(applicantBiometricsPage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); + // applicantBiometricsPage.enterCommentsInTextBox(TestDataReader.readData("comments")); + + applicantBiometricsPage.clickOnleftHandScanTitle(); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //thumb - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnContinueButton(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if user is not navigated to the next page without biometric scan"); + applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); - assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); + + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.markOneFingureException(); + + assertTrue(applicantBiometricsPage.isExceptionCountDisplyed(),"Verify if exception count is displayed"); + // applicantBiometricsPage.clickOnExceptionTypeTemporaryButton(); + // + // assertTrue(applicantBiometricsPage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); + // applicantBiometricsPage.enterCommentsInTextBox(TestDataReader.readData("comments")); + + applicantBiometricsPage.clickOnThumbsScanTitle(); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } //face - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - applicantBiometricsPage=biometricDetailsPage.clickOnFaceScanIcon(); + if(FetchUiSpec.face.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); + + assertTrue(applicantBiometricsPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } + biometricDetailsPage.clickOnContinueButton(); + //Exception + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is still displayed without capture exception"); + applicantBiometricsPage=biometricDetailsPage.clickOnExceptionScanIcon(); + + assertTrue(applicantBiometricsPage.isExceptionScanTitleDisplyed(),"Verify if exception scan page is displayed"); applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + assertTrue(applicantBiometricsPage.isExceptionScan(),"Verify if exception scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnBackButton(); + biometricDetailsPage=applicantBiometricsPage.clickOnNextButton(); assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); biometricDetailsPage.clickOnContinueButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - documentuploadPage=new DocumentuploadPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - documentuploadPage=new DocumentUploadPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - documentuploadPage=new DocumentUploadPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - documentuploadPage=new DocumentuploadPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - documentuploadPage=new DocumentuploadPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - documentuploadPage=new DocumentuploadPageArabic(driver); - } - documentuploadPage.clickOnContinueButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { previewPage=new PreviewPageEnglish(driver); } @@ -416,11 +464,13 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ previewPage=new PreviewPageArabic(driver); } - assertTrue(previewPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); + assertTrue(previewPage.isNewRegistrationTitleDisplayed(),"Verify if new Registration title is displayed"); assertTrue(previewPage.isApplicationIDPreviewPagePageDisplayed(),"Verify if application ID In PreviewPage is displayed"); assertTrue(previewPage.isDemographicInformationInPreviewPageDisplayed(),"Verify if Demographic Information In PreviewPage is displayed"); assertTrue(previewPage.isDocumentsInformationInPreviewPageDisplayed(),"Verify if Documents Information In PreviewPage is displayed"); assertTrue(previewPage.isBiometricsInformationInPreviewPagePageDisplayed(),"Verify if Biometrics Information In PreviewPage is displayed"); + // assertTrue(previewPage.isSingleIrisImageDisplayed(),"Verify if single iris exception image In PreviewPage is displayed"); + // assertTrue(previewPage.isFingerExceptionText(),"Verify if finger exception In PreviewPage is displayed"); String Aid=previewPage.getAID(); previewPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { @@ -442,8 +492,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ authenticationPage=new AuthenticationPageArabic(driver); } assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); - authenticationPage.enterUserName(TestDataReader.readData("username")); - authenticationPage.enterPassword(TestDataReader.readData("password")); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); authenticationPage.clickOnAuthenticatenButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { acknowledgementPage=new AcknowledgementPageEnglish(driver); @@ -490,6 +540,47 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ operationalTaskPage=new OperationalTaskPageArabic(driver); } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); + + assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); operationalTaskPage.clickApplicationUploadTitle(); @@ -515,10 +606,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage.enterAID(Aid); assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if packet is approved after approve in pending approval"); manageApplicationsPage.clickOnSearchCheckBox(); manageApplicationsPage.clickOnUploadButton(); - assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); manageApplicationsPage.clickOnBackButton(); assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); @@ -542,7 +633,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ profilePage=new ProfilePageArabic(driver); } - assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + // assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); profilePage.clickOnLogoutButton(); profilePage.clickOnLogoutButton(); @@ -550,5 +641,4 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded in Selected language"); } - } diff --git a/uitest-regclient/src/test/java/androidTestCases/UpdateMyUinInfant.java b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationInfant.java similarity index 77% rename from uitest-regclient/src/test/java/androidTestCases/UpdateMyUinInfant.java rename to uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationInfant.java index bd998bc03..6044f6b84 100644 --- a/uitest-regclient/src/test/java/androidTestCases/UpdateMyUinInfant.java +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationInfant.java @@ -1,29 +1,30 @@ -package androidTestCases; +package regclient.androidTestCases; import static org.testng.Assert.assertTrue; import org.testng.annotations.Test; -import BaseTest.AndroidBaseTest; +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; import regclient.page.AcknowledgementPage; import regclient.page.ApplicantBiometricsPage; import regclient.page.AuthenticationPage; import regclient.page.BasePage; import regclient.page.BiometricDetailsPage; -import regclient.page.CameraPage; import regclient.page.ConsentPage; import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; -import regclient.page.IdentityProofPage; import regclient.page.IntroducerBiometricPage; import regclient.page.LoginPage; import regclient.page.ManageApplicationsPage; import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; import regclient.page.PreviewPage; import regclient.page.ProfilePage; import regclient.page.RegistrationTasksPage; import regclient.page.SelectLanguagePage; -import regclient.page.UpdateUINPage; import regclient.pages.arabic.AcknowledgementPageArabic; import regclient.pages.arabic.ApplicantBiometricsPageArabic; import regclient.pages.arabic.AuthenticationPageArabic; @@ -31,16 +32,15 @@ import regclient.pages.arabic.ConsentPageArabic; import regclient.pages.arabic.DemographicDetailsPageArabic; import regclient.pages.arabic.DocumentuploadPageArabic; -import regclient.pages.arabic.IdentityProofPageArabic; import regclient.pages.arabic.IntroducerBiometricPageArabic; import regclient.pages.arabic.LoginPageArabic; import regclient.pages.arabic.ManageApplicationsPageArabic; import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; import regclient.pages.arabic.PreviewPageArabic; import regclient.pages.arabic.ProfilePageArabic; import regclient.pages.arabic.RegistrationTasksPageArabic; import regclient.pages.arabic.SelectLanguagePageArabic; -import regclient.pages.arabic.UpdateUINPageArabic; import regclient.pages.english.AcknowledgementPageEnglish; import regclient.pages.english.ApplicantBiometricsPageEnglish; import regclient.pages.english.AuthenticationPageEnglish; @@ -48,16 +48,15 @@ import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; import regclient.pages.english.DocumentuploadPageEnglish; -import regclient.pages.english.IdentityProofPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; import regclient.pages.english.PreviewPageEnglish; import regclient.pages.english.ProfilePageEnglish; import regclient.pages.english.RegistrationTasksPageEnglish; import regclient.pages.english.SelectLanguagePageEnglish; -import regclient.pages.english.UpdateUINPageEnglish; import regclient.pages.french.AcknowledgementPageFrench; import regclient.pages.french.ApplicantBiometricsPageFrench; import regclient.pages.french.AuthenticationPageFrench; @@ -65,16 +64,15 @@ import regclient.pages.french.ConsentPageFrench; import regclient.pages.french.DemographicDetailsPageFrench; import regclient.pages.french.DocumentUploadPageFrench; -import regclient.pages.french.IdentityProofPageFrench; import regclient.pages.french.IntroducerBiometricPageFrench; import regclient.pages.french.LoginPageFrench; import regclient.pages.french.ManageApplicationsPageFrench; import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; import regclient.pages.french.PreviewPageFrench; import regclient.pages.french.ProfilePageFrench; import regclient.pages.french.RegistrationTasksPageFrench; import regclient.pages.french.SelectLanguagePageFrench; -import regclient.pages.french.UpdateUINPageFrench; import regclient.pages.hindi.AcknowledgementPageHindi; import regclient.pages.hindi.ApplicantBiometricsPageHindi; import regclient.pages.hindi.AuthenticationPageHindi; @@ -82,16 +80,15 @@ import regclient.pages.hindi.ConsentPageHindi; import regclient.pages.hindi.DemographicDetailsPageHindi; import regclient.pages.hindi.DocumentUploadPageHindi; -import regclient.pages.hindi.IdentityProofPageHindi; import regclient.pages.hindi.IntroducerBiometricPageHindi; import regclient.pages.hindi.LoginPageHindi; import regclient.pages.hindi.ManageApplicationsPageHindi; import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; import regclient.pages.hindi.PreviewPageHindi; import regclient.pages.hindi.ProfilePageHindi; import regclient.pages.hindi.RegistrationTasksPageHindi; import regclient.pages.hindi.SelectLanguagePageHindi; -import regclient.pages.hindi.UpdateUINPageHindi; import regclient.pages.kannada.AcknowledgementPageKannada; import regclient.pages.kannada.ApplicantBiometricsPageKannada; import regclient.pages.kannada.AuthenticationPageKannada; @@ -99,16 +96,15 @@ import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; import regclient.pages.kannada.DocumentuploadPageKannada; -import regclient.pages.kannada.IdentityProofPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; import regclient.pages.kannada.PreviewPageKannada; import regclient.pages.kannada.ProfilePageKannada; import regclient.pages.kannada.RegistrationTasksPageKannada; import regclient.pages.kannada.SelectLanguagePageKannada; -import regclient.pages.kannada.UpdateUINPageKannada; import regclient.pages.tamil.AcknowledgementPageTamil; import regclient.pages.tamil.ApplicantBiometricsPageTamil; import regclient.pages.tamil.AuthenticationPageTamil; @@ -116,22 +112,23 @@ import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; import regclient.pages.tamil.DocumentuploadPageTamil; -import regclient.pages.tamil.IdentityProofPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; import regclient.pages.tamil.PreviewPageTamil; import regclient.pages.tamil.ProfilePageTamil; import regclient.pages.tamil.RegistrationTasksPageTamil; import regclient.pages.tamil.SelectLanguagePageTamil; -import regclient.pages.tamil.UpdateUINPageTamil; import regclient.utils.TestDataReader; -public class UpdateMyUinInfant extends AndroidBaseTest { +public class NewRegistrationInfant extends AndroidBaseTest { @Test - public void updateMyUinInfant(){ + public void newRegistrationInfant(){ + FetchUiSpec.getUiSpec("newProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); BasePage.disableAutoRotation(); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage=null; @@ -139,18 +136,16 @@ public void updateMyUinInfant(){ ConsentPage consentPage=null; DemographicDetailsPage demographicPage=null; DocumentUploadPage documentuploadPage=null; - IdentityProofPage identityProofPage=null; BiometricDetailsPage biometricDetailsPage=null; ApplicantBiometricsPage applicantBiometricsPage=null; PreviewPage previewPage=null; AuthenticationPage authenticationPage=null; AcknowledgementPage acknowledgementPage=null; + IntroducerBiometricPage introducerBiometricPage=null; OperationalTaskPage operationalTaskPage=null; + PendingApproval pendingApproval=null; ManageApplicationsPage manageApplicationsPage=null; ProfilePage profilePage=null; - UpdateUINPage updateUINPage=null; - IntroducerBiometricPage introducerBiometricPage=null; - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { loginPage = new LoginPageEnglish(driver); @@ -171,10 +166,11 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage = new LoginPageArabic(driver); } loginPage.selectLanguage(); - loginPage.enterUserName(TestDataReader.readData("username")); + + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); @@ -196,8 +192,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ registrationTasksPage=new RegistrationTasksPageArabic(driver); } assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); - registrationTasksPage.clickUpdateMyUINButton(); - + registrationTasksPage.clickOnNewRegistrationButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { selectLanguagePage=new SelectLanguagePageEnglish(driver); } @@ -227,52 +222,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(selectLanguagePage.isSubmitButtonEnabled(),"verify if the submit button enabled"); selectLanguagePage.clickOnSubmitButton(); - - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - updateUINPage =new UpdateUINPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - updateUINPage =new UpdateUINPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - updateUINPage =new UpdateUINPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - updateUINPage =new UpdateUINPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - updateUINPage =new UpdateUINPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - updateUINPage =new UpdateUINPageArabic(driver); - } - - assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is displayed"); - updateUINPage.clickOnContinueButton(); - - assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is still displayed after clicking continue button "); - updateUINPage.enterUIN(TestDataReader.readData("UINinfant")); - - assertTrue(updateUINPage.isConsentTitleDisplayed(),"verify if the consent title diplayed displayed"); - updateUINPage.clickOnConsentButton(); - - assertTrue(updateUINPage.isFullNameTitleDisplayed(),"verify if fill name title is displayed"); - updateUINPage.clickOnFullNameButton(); - - assertTrue(updateUINPage.isDOBTitleDisplayed(),"verify if the dob title is displayed"); - updateUINPage.clickOnDOBButton(); - - assertTrue(updateUINPage.isnGenderTitleDisplayed(),"verify if the gender title is displayed"); - updateUINPage.clickOnGenderButton(); - - assertTrue(updateUINPage.isnBiometricsTitleDisplayed(),"verify if the biometrics title is displayed"); - updateUINPage.clickOnBiometricsButton(); - - assertTrue(updateUINPage.isDocumentsTitleDisplayed(),"verify if the document title is displayed"); - updateUINPage.clickOnDocumentsButton(); - - updateUINPage.clickOnContinueButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { consentPage =new ConsentPageEnglish(driver); } @@ -314,18 +263,32 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ demographicPage=new DemographicDetailsPageArabic(driver); } - assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); - demographicPage.clickOnContinueButton(); - - assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed after clicking disable continue button"); - demographicPage.enterFullName(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.checkFullNameSecondLanguageTextBoxNotNull(),"Verify if first name is enter in second language text box"); - demographicPage.enterAge(TestDataReader.readData("infantAge")); - demographicPage.selectGender(TestDataReader.readData("gender")); + demographicPage.fillDemographicDetailsPage("currentCalenderDate"); demographicPage.clickOnContinueButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + documentuploadPage=new DocumentuploadPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + documentuploadPage=new DocumentUploadPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + documentuploadPage=new DocumentUploadPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + documentuploadPage=new DocumentuploadPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + documentuploadPage=new DocumentuploadPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + documentuploadPage=new DocumentuploadPageArabic(driver); + } + assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); + documentuploadPage.uploadDoccuments("infant","withoutReferenceNumber"); + + documentuploadPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { biometricDetailsPage=new BiometricDetailsPageEnglish(driver); } @@ -372,7 +335,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ biometricDetailsPage=applicantBiometricsPage.clickOnNextButton(); assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIntroducerIrisScan(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { introducerBiometricPage=new IntroducerBiometricPageEnglish(driver); } @@ -392,97 +354,65 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ introducerBiometricPage=new IntroducerBiometricPageArabic(driver); } - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - introducerBiometricPage.clickOnScanButton(); - - assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnBackButton(); - - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnContinueButton(); - + FetchUiSpec.getBiometricDetails("introducerBiometrics"); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerIrisScan(); + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + introducerBiometricPage.clickOnScanButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - documentuploadPage=new DocumentuploadPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - documentuploadPage=new DocumentUploadPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - documentuploadPage=new DocumentUploadPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - documentuploadPage=new DocumentuploadPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - documentuploadPage=new DocumentuploadPageTamil(driver); + assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - documentuploadPage=new DocumentuploadPageArabic(driver); - } - documentuploadPage.clickOnContinueButton(); + //righthand + if(FetchUiSpec.rightHand.equals("yes")) { + if(!FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerRightHandScan(); + } + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(consentPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); - documentuploadPage.selectIdentityProof(); - documentuploadPage.closePopUpClose(); + assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(documentuploadPage.isScanButtonIdentityProofEnabled(),"Verify if scan button enabled"); - CameraPage cameraPage=documentuploadPage.clickOnScanButtonIdentityProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - identityProofPage=new IdentityProofPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - identityProofPage=new IdentityProofPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - identityProofPage=new IdentityProofPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - identityProofPage=new IdentityProofPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - identityProofPage=new IdentityProofPageTamil(driver); + assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - identityProofPage=new IdentityProofPageArabic(driver); - } - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectRelationshipProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonRelationshipProoffEnabled(),"Verify if scan button enabled"); - cameraPage=documentuploadPage.clickOnScanButtonRelationshipProof(); + //lefthand + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - cameraPage.clickimage(); - cameraPage.clickOkButton(); + assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); + assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } + //thumb + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectDobProof(); - documentuploadPage.closePopUpClose(); + assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(documentuploadPage.isDobHeaderDisplayed(),"Verify if DOB header is displayed"); - documentuploadPage.clickOnScanButtonDobProof(); + assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } + //face + if(FetchUiSpec.face.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - cameraPage.clickimage(); - cameraPage.clickOkButton(); + assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - identityProofPage.clickOnSaveButton(); - documentuploadPage.clickOnContinueButton(); + assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + biometricDetailsPage=introducerBiometricPage.clickOnNextButton(); + } + biometricDetailsPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { previewPage=new PreviewPageEnglish(driver); } @@ -501,7 +431,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ previewPage=new PreviewPageArabic(driver); } - assertTrue(previewPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); + assertTrue(previewPage.isNewRegistrationTitleDisplayed(),"Verify if new Registration title is displayed"); assertTrue(previewPage.isApplicationIDPreviewPagePageDisplayed(),"Verify if application ID In PreviewPage is displayed"); assertTrue(previewPage.isDemographicInformationInPreviewPageDisplayed(),"Verify if Demographic Information In PreviewPage is displayed"); assertTrue(previewPage.isDocumentsInformationInPreviewPageDisplayed(),"Verify if Documents Information In PreviewPage is displayed"); @@ -527,8 +457,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ authenticationPage=new AuthenticationPageArabic(driver); } assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); - authenticationPage.enterUserName(TestDataReader.readData("username")); - authenticationPage.enterPassword(TestDataReader.readData("password")); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); authenticationPage.clickOnAuthenticatenButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { acknowledgementPage=new AcknowledgementPageEnglish(driver); @@ -548,9 +478,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ acknowledgementPage=new AcknowledgementPageArabic(driver); } + assertTrue(previewPage.isNewRegistrationTitleDisplayed(),"Verify if new Registration title is displayed"); assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(),"Verify if acknowledgement details page is displayed"); - // assertTrue(acknowledgementPage.isQrCodeImageDisplayed(),"Verify if qr code image is displayed"); - acknowledgementPage.clickOnGoToHomeButton(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); @@ -560,7 +489,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ } else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ operationalTaskPage=new OperationalTaskPageHindi(driver); - } else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ operationalTaskPage=new OperationalTaskPageFrench(driver); @@ -575,6 +503,47 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ operationalTaskPage=new OperationalTaskPageArabic(driver); } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + // assertTrue(pendingApproval.isPageAttributesDisplayed(), "Verify if all attributes should be available in pending approval screen"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); + assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); operationalTaskPage.clickApplicationUploadTitle(); @@ -597,13 +566,21 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage=new ManageApplicationsPageArabic(driver); } assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), "Verify if manage Applications Page displayed"); + manageApplicationsPage.clickServerStatusDropdown(); + + assertTrue(manageApplicationsPage.isReceivedDropdownOptionDisplayed(), "Verify if Received Dropdown Option Displayed displayed"); + assertTrue(manageApplicationsPage.isProcessingDropdownOptionDisplayed(), "Verify if Processing Dropdown Option Displayed displayed"); + assertTrue(manageApplicationsPage.isAcceptedDropdownOptionDisplayed(), "Verify if Accepted Dropdown Option Displayed"); + assertTrue(manageApplicationsPage.isDeletionDropdownOptionDisplayed(), "Verify if Deletion Dropdown Option Displayed"); + manageApplicationsPage.clickDismissButton(); manageApplicationsPage.enterAID(Aid); assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if packet is approved after approve in pending approval"); + manageApplicationsPage.clickOnSearchCheckBox(); manageApplicationsPage.clickOnUploadButton(); - assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); manageApplicationsPage.clickOnBackButton(); assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); @@ -627,13 +604,13 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ profilePage=new ProfilePageArabic(driver); } - assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + // assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); profilePage.clickOnLogoutButton(); profilePage.clickOnLogoutButton(); assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded in Selected language"); - } + } diff --git a/uitest-regclient/src/test/java/androidTestCases/NewRegistrationInfant.java b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationMinor.java similarity index 70% rename from uitest-regclient/src/test/java/androidTestCases/NewRegistrationInfant.java rename to uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationMinor.java index ddbcdbb32..8fafcd53f 100644 --- a/uitest-regclient/src/test/java/androidTestCases/NewRegistrationInfant.java +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationMinor.java @@ -1,24 +1,26 @@ -package androidTestCases; +package regclient.androidTestCases; import static org.testng.Assert.assertTrue; import org.testng.annotations.Test; -import BaseTest.AndroidBaseTest; +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; import regclient.page.AcknowledgementPage; import regclient.page.ApplicantBiometricsPage; import regclient.page.AuthenticationPage; import regclient.page.BasePage; import regclient.page.BiometricDetailsPage; -import regclient.page.CameraPage; import regclient.page.ConsentPage; import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; -import regclient.page.IdentityProofPage; import regclient.page.IntroducerBiometricPage; import regclient.page.LoginPage; import regclient.page.ManageApplicationsPage; import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; import regclient.page.PreviewPage; import regclient.page.ProfilePage; import regclient.page.RegistrationTasksPage; @@ -26,35 +28,35 @@ import regclient.pages.arabic.AcknowledgementPageArabic; import regclient.pages.arabic.ApplicantBiometricsPageArabic; import regclient.pages.arabic.AuthenticationPageArabic; -import regclient.pages.arabic.BiometricDetailsPageArabic; -import regclient.pages.arabic.ConsentPageArabic; -import regclient.pages.arabic.DemographicDetailsPageArabic; -import regclient.pages.arabic.DocumentuploadPageArabic; -import regclient.pages.arabic.IdentityProofPageArabic; -import regclient.pages.arabic.IntroducerBiometricPageArabic; -import regclient.pages.arabic.LoginPageArabic; -import regclient.pages.arabic.ManageApplicationsPageArabic; -import regclient.pages.arabic.OperationalTaskPageArabic; -import regclient.pages.arabic.PreviewPageArabic; -import regclient.pages.arabic.ProfilePageArabic; -import regclient.pages.arabic.RegistrationTasksPageArabic; -import regclient.pages.arabic.SelectLanguagePageArabic; import regclient.pages.english.AcknowledgementPageEnglish; import regclient.pages.english.ApplicantBiometricsPageEnglish; import regclient.pages.english.AuthenticationPageEnglish; import regclient.pages.english.BiometricDetailsPageEnglish; +import regclient.pages.arabic.BiometricDetailsPageArabic; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; import regclient.pages.english.DocumentuploadPageEnglish; -import regclient.pages.english.IdentityProofPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; +import regclient.pages.arabic.DemographicDetailsPageArabic; +import regclient.pages.arabic.DocumentuploadPageArabic; +import regclient.pages.arabic.IntroducerBiometricPageArabic; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; import regclient.pages.english.PreviewPageEnglish; import regclient.pages.english.ProfilePageEnglish; +import regclient.pages.arabic.PreviewPageArabic; +import regclient.pages.arabic.ProfilePageArabic; import regclient.pages.english.RegistrationTasksPageEnglish; import regclient.pages.english.SelectLanguagePageEnglish; +import regclient.pages.arabic.ConsentPageArabic; +import regclient.pages.arabic.LoginPageArabic; +import regclient.pages.arabic.ManageApplicationsPageArabic; +import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; +import regclient.pages.arabic.RegistrationTasksPageArabic; +import regclient.pages.arabic.SelectLanguagePageArabic; import regclient.pages.french.AcknowledgementPageFrench; import regclient.pages.french.ApplicantBiometricsPageFrench; import regclient.pages.french.AuthenticationPageFrench; @@ -62,11 +64,11 @@ import regclient.pages.french.ConsentPageFrench; import regclient.pages.french.DemographicDetailsPageFrench; import regclient.pages.french.DocumentUploadPageFrench; -import regclient.pages.french.IdentityProofPageFrench; import regclient.pages.french.IntroducerBiometricPageFrench; import regclient.pages.french.LoginPageFrench; import regclient.pages.french.ManageApplicationsPageFrench; import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; import regclient.pages.french.PreviewPageFrench; import regclient.pages.french.ProfilePageFrench; import regclient.pages.french.RegistrationTasksPageFrench; @@ -78,11 +80,11 @@ import regclient.pages.hindi.ConsentPageHindi; import regclient.pages.hindi.DemographicDetailsPageHindi; import regclient.pages.hindi.DocumentUploadPageHindi; -import regclient.pages.hindi.IdentityProofPageHindi; import regclient.pages.hindi.IntroducerBiometricPageHindi; import regclient.pages.hindi.LoginPageHindi; import regclient.pages.hindi.ManageApplicationsPageHindi; import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; import regclient.pages.hindi.PreviewPageHindi; import regclient.pages.hindi.ProfilePageHindi; import regclient.pages.hindi.RegistrationTasksPageHindi; @@ -94,11 +96,11 @@ import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; import regclient.pages.kannada.DocumentuploadPageKannada; -import regclient.pages.kannada.IdentityProofPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; import regclient.pages.kannada.PreviewPageKannada; import regclient.pages.kannada.ProfilePageKannada; import regclient.pages.kannada.RegistrationTasksPageKannada; @@ -110,21 +112,23 @@ import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; import regclient.pages.tamil.DocumentuploadPageTamil; -import regclient.pages.tamil.IdentityProofPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; import regclient.pages.tamil.PreviewPageTamil; import regclient.pages.tamil.ProfilePageTamil; import regclient.pages.tamil.RegistrationTasksPageTamil; import regclient.pages.tamil.SelectLanguagePageTamil; import regclient.utils.TestDataReader; -public class NewRegistrationInfant extends AndroidBaseTest { +public class NewRegistrationMinor extends AndroidBaseTest { @Test - public void newRegistrationInfant(){ + public void newRegistrationMinor(){ + FetchUiSpec.getUiSpec("newProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); BasePage.disableAutoRotation(); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage=null; @@ -132,7 +136,6 @@ public void newRegistrationInfant(){ ConsentPage consentPage=null; DemographicDetailsPage demographicPage=null; DocumentUploadPage documentuploadPage=null; - IdentityProofPage identityProofPage=null; BiometricDetailsPage biometricDetailsPage=null; ApplicantBiometricsPage applicantBiometricsPage=null; PreviewPage previewPage=null; @@ -141,8 +144,9 @@ public void newRegistrationInfant(){ IntroducerBiometricPage introducerBiometricPage=null; OperationalTaskPage operationalTaskPage=null; ManageApplicationsPage manageApplicationsPage=null; + PendingApproval pendingApproval=null; ProfilePage profilePage=null; - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { loginPage = new LoginPageEnglish(driver); } @@ -162,11 +166,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage = new LoginPageArabic(driver); } loginPage.selectLanguage(); - - loginPage.enterUserName(TestDataReader.readData("username")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); @@ -260,52 +263,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ demographicPage=new DemographicDetailsPageArabic(driver); } assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); - demographicPage.enterFullName(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.checkFullNameSecondLanguageTextBoxNotNull(),"Verify if first name is enter in second language text box"); - demographicPage.selectCurrentCalenderDate(); - demographicPage.closeCalender(); - - assertTrue(demographicPage.checkDateFormatAndCurrectDate(),"Verify date format and current date and time"); - - demographicPage.selectGender(TestDataReader.readData("gender")); - demographicPage.enterAddressLine1(TestDataReader.readData("address")); - demographicPage.enterAddressLine2(TestDataReader.readData("address")); - demographicPage.enterAddressLine3(TestDataReader.readData("address")); - demographicPage.selectMaritalStatus(); - - assertTrue(demographicPage.isResidenceStatusHeaderDisplayed(),"Verify if residence status header is displayed"); - demographicPage.selectResidenceStatus(TestDataReader.readData("residenceStatus")); - - assertTrue(demographicPage.isRegionHeaderDisplayed(),"Verify if region status header is displayed"); - demographicPage.selectRegionStatus(TestDataReader.readData("region")); - - assertTrue(demographicPage.isProvinceHeaderDisplayed(),"Verify if province status header is displayed"); - demographicPage.selectProvinceStatus(TestDataReader.readData("province")); - - - assertTrue(demographicPage.isCityHeaderDisplayed(),"Verify if city header is displayed"); - demographicPage.selectCityStatus(TestDataReader.readData("city")); - - assertTrue(demographicPage.isZoneHeaderDisplayed(),"Verify if zone header is displayed"); - demographicPage.selectZoneStatus(); - - assertTrue(demographicPage.isPostalCodeHeaderDisplayed(),"Verify if postal code header is displayed"); - demographicPage.selectPostalStatus(); - - assertTrue(demographicPage.isMobileNumberHeaderDisplayed(),"Verify if mobile number header is displayed"); - demographicPage.enterMobileNumber(TestDataReader.readData("mobileNumber")); - - assertTrue(demographicPage.isEmailHeaderDisplayed(),"Verify if email header is displayed"); - demographicPage.enterEmailID(TestDataReader.readData("emailId")); - - assertTrue(demographicPage.isIntroducerNameHeaderDisplayed(),"Verify if introducer name header is displayed"); - demographicPage.enterIntroducerName(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.isIntroducerRidHeaderDisplayed(),"Verify if introducer rid header is displayed"); - demographicPage.enterIntroducerRid(TestDataReader.readData("RID")); + demographicPage.fillDemographicDetailsPage("minor"); - demographicPage.clickOnContinueButton(); demographicPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { documentuploadPage=new DocumentuploadPageEnglish(driver); @@ -326,77 +285,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ documentuploadPage=new DocumentuploadPageArabic(driver); } assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectAddressProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonAddressProofEnabled(),"Verify if scan button enabled"); - CameraPage cameraPage=documentuploadPage.clickOnAddressProofScanButton(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - identityProofPage=new IdentityProofPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - identityProofPage=new IdentityProofPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - identityProofPage=new IdentityProofPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - identityProofPage=new IdentityProofPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - identityProofPage=new IdentityProofPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - identityProofPage=new IdentityProofPageArabic(driver); - } - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectIdentityProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonIdentityProofEnabled(),"Verify if scan button enabled"); - cameraPage=documentuploadPage.clickOnScanButtonIdentityProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectRelationshipProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonRelationshipProoffEnabled(),"Verify if scan button enabled"); - cameraPage=documentuploadPage.clickOnScanButtonRelationshipProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectDobProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isDobHeaderDisplayed(),"Verify if DOB header is displayed"); - cameraPage=documentuploadPage.clickOnScanButtonDobProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); + documentuploadPage.uploadDoccuments("minor","withoutReferenceNumber"); + documentuploadPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { biometricDetailsPage=new BiometricDetailsPageEnglish(driver); @@ -417,7 +307,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ biometricDetailsPage=new BiometricDetailsPageArabic(driver); } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnFaceScanIcon(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); } @@ -437,14 +327,66 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); } - applicantBiometricsPage.clickOnScanButton(); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face captured and 2 attempts left text is displayed"); - applicantBiometricsPage.closeScanCapturePopUp();; - biometricDetailsPage=applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //righthand + if(FetchUiSpec.rightHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //lefthand + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //thumb + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //face + if(FetchUiSpec.face.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIntroducerIrisScan(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { introducerBiometricPage=new IntroducerBiometricPageEnglish(driver); } @@ -464,40 +406,63 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ introducerBiometricPage=new IntroducerBiometricPageArabic(driver); } - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - introducerBiometricPage.clickOnScanButton(); + FetchUiSpec.getBiometricDetails("introducerBiometrics"); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerIrisScan(); + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + introducerBiometricPage.clickOnScanButton(); - assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //righthand - assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.rightHand.equals("yes")) { + if(!FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerRightHandScan(); + } + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //lefthand - assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //thumb - assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //face - assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.face.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - biometricDetailsPage=introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + biometricDetailsPage=introducerBiometricPage.clickOnNextButton(); + } biometricDetailsPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { @@ -544,8 +509,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ authenticationPage=new AuthenticationPageArabic(driver); } assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); - authenticationPage.enterUserName(TestDataReader.readData("username")); - authenticationPage.enterPassword(TestDataReader.readData("password")); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); authenticationPage.clickOnAuthenticatenButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { acknowledgementPage=new AcknowledgementPageEnglish(driver); @@ -565,12 +530,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ acknowledgementPage=new AcknowledgementPageArabic(driver); } + assertTrue(previewPage.isNewRegistrationTitleDisplayed(),"Verify if new Registration title is displayed"); assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(),"Verify if acknowledgement details page is displayed"); - // assertTrue(acknowledgementPage.isQrCodeImageDisplayed(),"Verify if qr code image is displayed"); - - assertTrue(acknowledgementPage.isDemographicInformationInAcknowledgementPageDisplayed(),"Verify if Demographic Information In authenticationPage is displayed"); - assertTrue(acknowledgementPage.isDocumentsInformationInAcknowledgementPageDisplayed(),"Verify if Documents Information In authenticationPage is displayed"); - assertTrue(acknowledgementPage.isBiometricsInformationInAcknowledgementPageDisplayed(),"Verify if Biometrics Information In authenticationPage is displayed"); acknowledgementPage.clickOnGoToHomeButton(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); @@ -595,6 +556,50 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ operationalTaskPage=new OperationalTaskPageArabic(driver); } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnRejectButton(); + + assertTrue(pendingApproval.isRejectPacketTitleDisplayed(), "Verify if reject page is display after click on reject button displayed"); + pendingApproval.selectRejectionReasonDropdown(); + + pendingApproval.clickOnRejectButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); operationalTaskPage.clickApplicationUploadTitle(); @@ -602,7 +607,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage=new ManageApplicationsPageEnglish(driver); } else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - manageApplicationsPage=new ManageApplicationsPageHindi(driver); + manageApplicationsPage=new ManageApplicationsPageHindi(driver); } else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ manageApplicationsPage=new ManageApplicationsPageFrench(driver); @@ -617,25 +622,18 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage=new ManageApplicationsPageArabic(driver); } assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), "Verify if manage Applications Page displayed"); - manageApplicationsPage.clickServerStatusDropdown(); - - assertTrue(manageApplicationsPage.isReceivedDropdownOptionDisplayed(), "Verify if Received Dropdown Option Displayed displayed"); - assertTrue(manageApplicationsPage.isProcessingDropdownOptionDisplayed(), "Verify if Processing Dropdown Option Displayed displayed"); - assertTrue(manageApplicationsPage.isAcceptedDropdownOptionDisplayed(), "Verify if Accepted Dropdown Option Displayed"); - assertTrue(manageApplicationsPage.isDeletionDropdownOptionDisplayed(), "Verify if Deletion Dropdown Option Displayed"); - manageApplicationsPage.clickDismissButton(); manageApplicationsPage.enterAID(Aid); assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + assertTrue(manageApplicationsPage.isPacketRejected(Aid), "Verify if packet is rejected or not in manage application page"); manageApplicationsPage.clickOnSearchCheckBox(); manageApplicationsPage.clickOnUploadButton(); - assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); -manageApplicationsPage.clickOnBackButton(); - + manageApplicationsPage.clickOnBackButton(); + assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); registrationTasksPage.clickProfileButton(); - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { profilePage=new ProfilePageEnglish(driver); } @@ -654,13 +652,13 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ profilePage=new ProfilePageArabic(driver); } - assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + //assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); profilePage.clickOnLogoutButton(); - + profilePage.clickOnLogoutButton(); - + assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded in Selected language"); - } + } } diff --git a/uitest-regclient/src/test/java/androidTestCases/NewRegistrationMinorException.java b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationMinorException.java similarity index 67% rename from uitest-regclient/src/test/java/androidTestCases/NewRegistrationMinorException.java rename to uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationMinorException.java index 55e2d6b5b..a0c8ada6a 100644 --- a/uitest-regclient/src/test/java/androidTestCases/NewRegistrationMinorException.java +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/NewRegistrationMinorException.java @@ -1,4 +1,4 @@ -package androidTestCases; +package regclient.androidTestCases; import static org.testng.Assert.assertFalse; @@ -7,21 +7,23 @@ import org.testng.annotations.Test; -import BaseTest.AndroidBaseTest; +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; import regclient.page.AcknowledgementPage; import regclient.page.ApplicantBiometricsPage; import regclient.page.AuthenticationPage; import regclient.page.BasePage; import regclient.page.BiometricDetailsPage; -import regclient.page.CameraPage; import regclient.page.ConsentPage; import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; -import regclient.page.IdentityProofPage; import regclient.page.IntroducerBiometricPage; import regclient.page.LoginPage; import regclient.page.ManageApplicationsPage; import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; import regclient.page.PreviewPage; import regclient.page.ProfilePage; import regclient.page.RegistrationTasksPage; @@ -33,11 +35,11 @@ import regclient.pages.arabic.ConsentPageArabic; import regclient.pages.arabic.DemographicDetailsPageArabic; import regclient.pages.arabic.DocumentuploadPageArabic; -import regclient.pages.arabic.IdentityProofPageArabic; import regclient.pages.arabic.IntroducerBiometricPageArabic; import regclient.pages.arabic.LoginPageArabic; import regclient.pages.arabic.ManageApplicationsPageArabic; import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; import regclient.pages.arabic.PreviewPageArabic; import regclient.pages.arabic.ProfilePageArabic; import regclient.pages.arabic.RegistrationTasksPageArabic; @@ -49,11 +51,11 @@ import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; import regclient.pages.english.DocumentuploadPageEnglish; -import regclient.pages.english.IdentityProofPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; import regclient.pages.english.PreviewPageEnglish; import regclient.pages.english.ProfilePageEnglish; import regclient.pages.english.RegistrationTasksPageEnglish; @@ -65,11 +67,11 @@ import regclient.pages.french.ConsentPageFrench; import regclient.pages.french.DemographicDetailsPageFrench; import regclient.pages.french.DocumentUploadPageFrench; -import regclient.pages.french.IdentityProofPageFrench; import regclient.pages.french.IntroducerBiometricPageFrench; import regclient.pages.french.LoginPageFrench; import regclient.pages.french.ManageApplicationsPageFrench; import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; import regclient.pages.french.PreviewPageFrench; import regclient.pages.french.ProfilePageFrench; import regclient.pages.french.RegistrationTasksPageFrench; @@ -81,11 +83,11 @@ import regclient.pages.hindi.ConsentPageHindi; import regclient.pages.hindi.DemographicDetailsPageHindi; import regclient.pages.hindi.DocumentUploadPageHindi; -import regclient.pages.hindi.IdentityProofPageHindi; import regclient.pages.hindi.IntroducerBiometricPageHindi; import regclient.pages.hindi.LoginPageHindi; import regclient.pages.hindi.ManageApplicationsPageHindi; import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; import regclient.pages.hindi.PreviewPageHindi; import regclient.pages.hindi.ProfilePageHindi; import regclient.pages.hindi.RegistrationTasksPageHindi; @@ -97,11 +99,11 @@ import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; import regclient.pages.kannada.DocumentuploadPageKannada; -import regclient.pages.kannada.IdentityProofPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; import regclient.pages.kannada.PreviewPageKannada; import regclient.pages.kannada.ProfilePageKannada; import regclient.pages.kannada.RegistrationTasksPageKannada; @@ -113,11 +115,11 @@ import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; import regclient.pages.tamil.DocumentuploadPageTamil; -import regclient.pages.tamil.IdentityProofPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; import regclient.pages.tamil.PreviewPageTamil; import regclient.pages.tamil.ProfilePageTamil; import regclient.pages.tamil.RegistrationTasksPageTamil; @@ -128,6 +130,8 @@ public class NewRegistrationMinorException extends AndroidBaseTest { @Test public void newRegistrationMinorException(){ + FetchUiSpec.getUiSpec("newProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); BasePage.disableAutoRotation(); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage=null; @@ -135,7 +139,6 @@ public void newRegistrationMinorException(){ ConsentPage consentPage=null; DemographicDetailsPage demographicPage=null; DocumentUploadPage documentuploadPage=null; - IdentityProofPage identityProofPage=null; BiometricDetailsPage biometricDetailsPage=null; ApplicantBiometricsPage applicantBiometricsPage=null; PreviewPage previewPage=null; @@ -145,6 +148,7 @@ public void newRegistrationMinorException(){ OperationalTaskPage operationalTaskPage=null; ManageApplicationsPage manageApplicationsPage=null; ProfilePage profilePage=null; + PendingApproval pendingApproval=null; if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { loginPage = new LoginPageEnglish(driver); @@ -165,10 +169,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage = new LoginPageArabic(driver); } loginPage.selectLanguage(); - loginPage.enterUserName(TestDataReader.readData("username")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); @@ -262,46 +266,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ demographicPage=new DemographicDetailsPageArabic(driver); } assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); - demographicPage.enterFullName(TestDataReader.readData("fullname")); + demographicPage.fillDemographicDetailsPage("minor"); - assertTrue(demographicPage.checkFullNameSecondLanguageTextBoxNotNull(),"Verify if first name is enter in second language text box"); - demographicPage.enterAge(TestDataReader.readData("minorAge")); - demographicPage.selectGender(TestDataReader.readData("gender")); - demographicPage.enterAddressLine1(TestDataReader.readData("address")); - demographicPage.enterAddressLine2(TestDataReader.readData("address")); - demographicPage.enterAddressLine3(TestDataReader.readData("address")); - demographicPage.selectMaritalStatus(); - - assertTrue(demographicPage.isResidenceStatusHeaderDisplayed(),"Verify if residence status header is displayed"); - demographicPage.selectResidenceStatus(TestDataReader.readData("residenceStatus")); - - assertTrue(demographicPage.isRegionHeaderDisplayed(),"Verify if region status header is displayed"); - demographicPage.selectRegionStatus(TestDataReader.readData("region")); - - assertTrue(demographicPage.isProvinceHeaderDisplayed(),"Verify if province status header is displayed"); - demographicPage.selectProvinceStatus(TestDataReader.readData("province")); - - - assertTrue(demographicPage.isCityHeaderDisplayed(),"Verify if city header is displayed"); - demographicPage.selectCityStatus(TestDataReader.readData("city")); - - assertTrue(demographicPage.isZoneHeaderDisplayed(),"Verify if zone header is displayed"); - demographicPage.selectZoneStatus(); - - assertTrue(demographicPage.isPostalCodeHeaderDisplayed(),"Verify if postal code header is displayed"); - demographicPage.selectPostalStatus(); - - assertTrue(demographicPage.isMobileNumberHeaderDisplayed(),"Verify if mobile number header is displayed"); - demographicPage.enterMobileNumber(TestDataReader.readData("mobileNumber")); - - assertTrue(demographicPage.isEmailHeaderDisplayed(),"Verify if email header is displayed"); - demographicPage.enterEmailID(TestDataReader.readData("emailId")); - - assertTrue(demographicPage.isIntroducerNameHeaderDisplayed(),"Verify if introducer name header is displayed"); - demographicPage.enterIntroducerName(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.isIntroducerRidHeaderDisplayed(),"Verify if introducer rid header is displayed"); - demographicPage.enterIntroducerRid(TestDataReader.readData("RID")); demographicPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { documentuploadPage=new DocumentuploadPageEnglish(driver); @@ -322,77 +288,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ documentuploadPage=new DocumentuploadPageArabic(driver); } assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectAddressProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonAddressProofEnabled(),"Verify if scan button enabled"); - CameraPage cameraPage=documentuploadPage.clickOnAddressProofScanButton(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - identityProofPage=new IdentityProofPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - identityProofPage=new IdentityProofPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - identityProofPage=new IdentityProofPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - identityProofPage=new IdentityProofPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - identityProofPage=new IdentityProofPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - identityProofPage=new IdentityProofPageArabic(driver); - } - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed"); - documentuploadPage.selectIdentityProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonIdentityProofEnabled(),"Verify if scan button enabled"); - documentuploadPage.clickOnScanButtonIdentityProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectRelationshipProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonRelationshipProoffEnabled(),"Verify if scan button enabled"); - documentuploadPage.clickOnScanButtonRelationshipProof(); + documentuploadPage.uploadDoccuments("minor","withoutReferenceNumber"); - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectDobProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isDobHeaderDisplayed(),"Verify if DOB header is displayed"); - cameraPage=documentuploadPage.clickOnScanButtonDobProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); documentuploadPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { biometricDetailsPage=new BiometricDetailsPageEnglish(driver); @@ -414,7 +311,6 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ } //Iris assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIrisScan(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); } @@ -434,78 +330,95 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); } - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnMarkExceptionButton(); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); - assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - applicantBiometricsPage.markOneEyeException(); - applicantBiometricsPage.clickOnIrisScanButton(); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.markOneEyeException(); + applicantBiometricsPage.clickOnIrisScanButton(); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } //righthand - assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); - applicantBiometricsPage.clickOnMarkExceptionButton(); + if(FetchUiSpec.rightHand.equals("yes")) { + biometricDetailsPage.clickOnRightHandScanIcon(); + assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); - assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - applicantBiometricsPage.clickOnZoomButton(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.clickOnZoomButton(); - assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); - applicantBiometricsPage.markFourFingureExceptionThenRemoveOne(); - applicantBiometricsPage.clickOnClosePopUp(); + assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); + applicantBiometricsPage.markFourFingureExceptionThenRemoveOne(); + applicantBiometricsPage.clickOnClosePopUp(); - assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - applicantBiometricsPage.clickOnRightHandScanTitle(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.clickOnRightHandScanTitle(); - assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } //lefthand - assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); - applicantBiometricsPage.clickOnMarkExceptionButton(); + if(FetchUiSpec.leftHand.equals("yes")) { + biometricDetailsPage.clickOnLeftHandScanIcon(); + assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); - assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - applicantBiometricsPage.clickOnZoomButton(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.clickOnZoomButton(); - assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); - applicantBiometricsPage.markOneFingureException(); - applicantBiometricsPage.clickOnClosePopUp(); + assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); + applicantBiometricsPage.markOneFingureException(); + applicantBiometricsPage.clickOnClosePopUp(); - assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - applicantBiometricsPage.clickOnleftHandScanTitle(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.clickOnleftHandScanTitle(); - assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } //thumb - assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - applicantBiometricsPage.clickOnMarkExceptionButton(); + if(FetchUiSpec.thumb.equals("yes")) { + biometricDetailsPage.clickOnThumbsScanIcon(); + assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); - assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - applicantBiometricsPage.markOneFingureException(); - applicantBiometricsPage.clickOnThumbsScanTitle(); + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.markOneFingureException(); + applicantBiometricsPage.clickOnThumbsScanTitle(); - assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } //face - assertTrue(applicantBiometricsPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - applicantBiometricsPage.clickOnScanButton(); + if(FetchUiSpec.face.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); - assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnNextButton(); + } //Exception assertTrue(applicantBiometricsPage.isExceptionScanTitleDisplyed(),"Verify if exception scan page is displayed"); @@ -516,7 +429,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ biometricDetailsPage=applicantBiometricsPage.clickOnNextButton(); assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIntroducerIrisScan(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { introducerBiometricPage=new IntroducerBiometricPageEnglish(driver); } @@ -536,48 +449,69 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ introducerBiometricPage=new IntroducerBiometricPageArabic(driver); } - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + FetchUiSpec.getBiometricDetails("introducerBiometrics"); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerIrisScan(); + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - introducerBiometricPage.clickOnMarkExceptionButton(); + introducerBiometricPage.clickOnMarkExceptionButton(); + assertTrue(introducerBiometricPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + introducerBiometricPage.markOneEyeException(); + introducerBiometricPage.clickOnIrisScanButton(); - assertTrue(introducerBiometricPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - introducerBiometricPage.markOneEyeException(); - introducerBiometricPage.clickOnIrisScanButton(); + introducerBiometricPage.clickOnScanButton(); - introducerBiometricPage.clickOnScanButton(); - - assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //righthand - assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.rightHand.equals("yes")) { + if(!FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerRightHandScan(); + } + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //lefthand - assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //thumb - assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); + assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } //face - assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - introducerBiometricPage.clickOnScanButton(); + if(FetchUiSpec.face.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnBackButton(); + assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); + assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + biometricDetailsPage=introducerBiometricPage.clickOnBackButton(); + } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); biometricDetailsPage.clickOnContinueButton(); @@ -638,8 +572,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ authenticationPage=new AuthenticationPageArabic(driver); } assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); - authenticationPage.enterUserName(TestDataReader.readData("username")); - authenticationPage.enterPassword(TestDataReader.readData("password")); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); authenticationPage.clickOnAuthenticatenButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { acknowledgementPage=new AcknowledgementPageEnglish(driver); @@ -685,6 +619,45 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ operationalTaskPage=new OperationalTaskPageArabic(driver); } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); operationalTaskPage.clickApplicationUploadTitle(); @@ -710,25 +683,25 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage.enterAID(Aid); assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if packet is approved after approve in pending approval"); + manageApplicationsPage.clickOnSearchCheckBox(); manageApplicationsPage.clickOnUploadButton(); - assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); manageApplicationsPage.clickClientStatusDropdown(); assertTrue(manageApplicationsPage.isCreatedDropdownOptionDisplayed(), "Verify if Created Dropdown Option Displayed displayed"); assertTrue(manageApplicationsPage.isApprovedDropdownOptionDisplayed(), "Verify if Approved Dropdown Option Displayed displayed"); assertTrue(manageApplicationsPage.isRejectedDropdownOptionDisplayed(), "Verify if Rejected Dropdown Option Displayed"); assertTrue(manageApplicationsPage.isSyncedDropdownOptionDisplayed(), "Verify if Synced Dropdown Option Displayed"); - assertTrue(manageApplicationsPage.isUploadedDropdownOptionDisplayed(), "Verify if Uploaded Dropdown Option Displayed"); assertTrue(manageApplicationsPage.isExportedsDropdownOptionDisplayed(), "Verify if Exported Dropdown Option Displayed"); manageApplicationsPage.clickDismissButton(); -manageApplicationsPage.clickOnBackButton(); - + manageApplicationsPage.clickOnBackButton(); + assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); registrationTasksPage.clickProfileButton(); - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { profilePage=new ProfilePageEnglish(driver); } @@ -747,11 +720,11 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ profilePage=new ProfilePageArabic(driver); } - assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + //assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); profilePage.clickOnLogoutButton(); - + profilePage.clickOnLogoutButton(); - + assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded in Selected language"); } diff --git a/uitest-regclient/src/test/java/androidTestCases/UpdateMyUINUpdateDemographicDetails.java b/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUINUpdateDemographicDetails.java similarity index 64% rename from uitest-regclient/src/test/java/androidTestCases/UpdateMyUINUpdateDemographicDetails.java rename to uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUINUpdateDemographicDetails.java index 54988b0fc..cd6b24922 100644 --- a/uitest-regclient/src/test/java/androidTestCases/UpdateMyUINUpdateDemographicDetails.java +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUINUpdateDemographicDetails.java @@ -1,23 +1,27 @@ -package androidTestCases; +package regclient.androidTestCases; import static org.testng.Assert.assertTrue; +import java.util.List; + import org.testng.annotations.Test; -import BaseTest.AndroidBaseTest; +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; import regclient.page.AcknowledgementPage; import regclient.page.ApplicantBiometricsPage; import regclient.page.AuthenticationPage; import regclient.page.BasePage; import regclient.page.BiometricDetailsPage; -import regclient.page.CameraPage; import regclient.page.ConsentPage; import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; -import regclient.page.IdentityProofPage; import regclient.page.LoginPage; import regclient.page.ManageApplicationsPage; import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; import regclient.page.PreviewPage; import regclient.page.ProfilePage; import regclient.page.RegistrationTasksPage; @@ -30,10 +34,10 @@ import regclient.pages.arabic.ConsentPageArabic; import regclient.pages.arabic.DemographicDetailsPageArabic; import regclient.pages.arabic.DocumentuploadPageArabic; -import regclient.pages.arabic.IdentityProofPageArabic; import regclient.pages.arabic.LoginPageArabic; import regclient.pages.arabic.ManageApplicationsPageArabic; import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; import regclient.pages.arabic.PreviewPageArabic; import regclient.pages.arabic.ProfilePageArabic; import regclient.pages.arabic.RegistrationTasksPageArabic; @@ -46,10 +50,10 @@ import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; import regclient.pages.english.DocumentuploadPageEnglish; -import regclient.pages.english.IdentityProofPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; import regclient.pages.english.PreviewPageEnglish; import regclient.pages.english.ProfilePageEnglish; import regclient.pages.english.RegistrationTasksPageEnglish; @@ -62,10 +66,10 @@ import regclient.pages.french.ConsentPageFrench; import regclient.pages.french.DemographicDetailsPageFrench; import regclient.pages.french.DocumentUploadPageFrench; -import regclient.pages.french.IdentityProofPageFrench; import regclient.pages.french.LoginPageFrench; import regclient.pages.french.ManageApplicationsPageFrench; import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; import regclient.pages.french.PreviewPageFrench; import regclient.pages.french.ProfilePageFrench; import regclient.pages.french.RegistrationTasksPageFrench; @@ -78,10 +82,10 @@ import regclient.pages.hindi.ConsentPageHindi; import regclient.pages.hindi.DemographicDetailsPageHindi; import regclient.pages.hindi.DocumentUploadPageHindi; -import regclient.pages.hindi.IdentityProofPageHindi; import regclient.pages.hindi.LoginPageHindi; import regclient.pages.hindi.ManageApplicationsPageHindi; import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; import regclient.pages.hindi.PreviewPageHindi; import regclient.pages.hindi.ProfilePageHindi; import regclient.pages.hindi.RegistrationTasksPageHindi; @@ -94,10 +98,10 @@ import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; import regclient.pages.kannada.DocumentuploadPageKannada; -import regclient.pages.kannada.IdentityProofPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; import regclient.pages.kannada.PreviewPageKannada; import regclient.pages.kannada.ProfilePageKannada; import regclient.pages.kannada.RegistrationTasksPageKannada; @@ -110,10 +114,10 @@ import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; import regclient.pages.tamil.DocumentuploadPageTamil; -import regclient.pages.tamil.IdentityProofPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; import regclient.pages.tamil.PreviewPageTamil; import regclient.pages.tamil.ProfilePageTamil; import regclient.pages.tamil.RegistrationTasksPageTamil; @@ -125,6 +129,8 @@ public class UpdateMyUINUpdateDemographicDetails extends AndroidBaseTest { @Test public void updateMyUINUpdateDemographicDetails(){ + FetchUiSpec.getUiSpec("updateProcess"); + List screenOrder=FetchUiSpec.getAllScreenOrder(); BasePage.disableAutoRotation(); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage=null; @@ -132,7 +138,6 @@ public void updateMyUINUpdateDemographicDetails(){ ConsentPage consentPage=null; DemographicDetailsPage demographicPage=null; DocumentUploadPage documentuploadPage=null; - IdentityProofPage identityProofPage=null; BiometricDetailsPage biometricDetailsPage=null; ApplicantBiometricsPage applicantBiometricsPage=null; PreviewPage previewPage=null; @@ -142,6 +147,7 @@ public void updateMyUINUpdateDemographicDetails(){ ManageApplicationsPage manageApplicationsPage=null; ProfilePage profilePage=null; UpdateUINPage updateUINPage=null; + PendingApproval pendingApproval=null; if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { @@ -163,10 +169,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage = new LoginPageArabic(driver); } loginPage.selectLanguage(); - loginPage.enterUserName(TestDataReader.readData("username")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); @@ -245,215 +251,149 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is still displayed after clicking continue button "); updateUINPage.enterUIN(TestDataReader.readData("UIN")); - assertTrue(updateUINPage.isConsentTitleDisplayed(),"verify if the consent title diplayed displayed"); - updateUINPage.clickOnConsentButton(); - - assertTrue(updateUINPage.isFullNameTitleDisplayed(),"verify if fill name title is displayed"); - updateUINPage.clickOnFullNameButton(); - - assertTrue(updateUINPage.isDOBTitleDisplayed(),"verify if the dob title is displayed"); - updateUINPage.clickOnDOBButton(); - - assertTrue(updateUINPage.isnGenderTitleDisplayed(),"verify if the gender title is displayed"); - updateUINPage.clickOnGenderButton(); - - assertTrue(updateUINPage.isPhoneTitleDisplayed(),"verify if the phone title is displayed"); - updateUINPage.clickOnPhoneButton(); - - assertTrue(updateUINPage.isEmailTitleDisplayed(),"verify if the email is displayed"); - updateUINPage.clickOnEmailButton(); + updateUINPage.selectUpdateValue("consentdet"); + updateUINPage.selectUpdateValue("DemographicDetails"); updateUINPage.clickOnContinueButton(); - - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - consentPage =new ConsentPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - consentPage =new ConsentPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - consentPage =new ConsentPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - consentPage =new ConsentPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - consentPage =new ConsentPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - consentPage =new ConsentPageArabic(driver); - } - assertTrue(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded"); - - assertTrue(consentPage.isInformedButtonEnabled(),"Verify if informed button enabled"); - consentPage.clickOnInformedButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - demographicPage=new DemographicDetailsPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - demographicPage=new DemographicDetailsPageHindi(driver); - - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - demographicPage=new DemographicDetailsPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - demographicPage=new DemographicDetailsPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - demographicPage=new DemographicDetailsPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - demographicPage=new DemographicDetailsPageArabic(driver); + for(String screen :screenOrder) { + if(screen.equals("consentdet")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + consentPage =new ConsentPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + consentPage =new ConsentPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + consentPage =new ConsentPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + consentPage =new ConsentPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + consentPage =new ConsentPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + consentPage =new ConsentPageArabic(driver); + } + assertTrue(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded"); + + assertTrue(consentPage.isInformedButtonEnabled(),"Verify if informed button enabled"); + consentPage.clickOnInformedButton(); + } + else if(screen.equals("DemographicDetails")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + demographicPage=new DemographicDetailsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + demographicPage=new DemographicDetailsPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + demographicPage=new DemographicDetailsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + demographicPage=new DemographicDetailsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + demographicPage=new DemographicDetailsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + demographicPage=new DemographicDetailsPageArabic(driver); + } + + assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); + // demographicPage.clickOnContinueButton(); + + assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed after clicking disable continue button"); + demographicPage.fillDemographicDetailsPage("adult"); + + demographicPage.clickOnContinueButton(); + } + else if(screen.equals("BiometricDetails")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + biometricDetailsPage=new BiometricDetailsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + biometricDetailsPage=new BiometricDetailsPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + biometricDetailsPage=new BiometricDetailsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + biometricDetailsPage=new BiometricDetailsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + biometricDetailsPage=new BiometricDetailsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + biometricDetailsPage=new BiometricDetailsPageArabic(driver); + } + assertTrue(biometricDetailsPage.isAuthenticationBiometricTitleDisplayed(),"Verify if biometric details page is displayed without upload doccument"); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + applicantBiometricsPage=new ApplicantBiometricsPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + applicantBiometricsPage=new ApplicantBiometricsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + applicantBiometricsPage=new ApplicantBiometricsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + applicantBiometricsPage=new ApplicantBiometricsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); + } + biometricDetailsPage.clickOnRightHandScanIcon(); + + assertTrue(applicantBiometricsPage.isAuthenticationBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnMarkExceptionButton(); + + assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + applicantBiometricsPage.markOneFingureException(); + + assertTrue(applicantBiometricsPage.isExceptionCountDisplyed(),"Verify if exception count is displayed"); + applicantBiometricsPage.clickOnRightHandScanTitle(); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + + assertTrue(biometricDetailsPage.isAuthenticationBiometricTitleDisplayed(),"Verify if biometric details page is displayed without upload doccument"); + biometricDetailsPage.clickOnContinueButton(); + } + else if(screen.equals("Documents")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + documentuploadPage=new DocumentuploadPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + documentuploadPage=new DocumentUploadPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + documentuploadPage=new DocumentUploadPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + documentuploadPage=new DocumentuploadPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + documentuploadPage=new DocumentuploadPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + documentuploadPage=new DocumentuploadPageArabic(driver); + } + documentuploadPage.clickOnContinueButton(); + + assertTrue(consentPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); + documentuploadPage.uploadDoccumentsUpdate("adult","all"); + documentuploadPage.clickOnContinueButton(); + } } - - assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); - demographicPage.clickOnContinueButton(); - - assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed after clicking disable continue button"); - demographicPage.enterFullName(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.checkFullNameSecondLanguageTextBoxNotNull(),"Verify if first name is enter in second language text box"); - demographicPage.enterAge(TestDataReader.readData("adultage")); - demographicPage.selectGender(TestDataReader.readData("gender")); - - assertTrue(demographicPage.isMobileNumberHeaderDisplayed(),"Verify if mobile number header is displayed"); - demographicPage.enterMobileNumber(TestDataReader.readData("mobileNumber")); - - assertTrue(demographicPage.isEmailHeaderDisplayed(),"Verify if email header is displayed"); - demographicPage.enterEmailID(TestDataReader.readData("emailId")); - - demographicPage.clickOnContinueButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - biometricDetailsPage=new BiometricDetailsPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - biometricDetailsPage=new BiometricDetailsPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - biometricDetailsPage=new BiometricDetailsPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - biometricDetailsPage=new BiometricDetailsPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - biometricDetailsPage=new BiometricDetailsPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - biometricDetailsPage=new BiometricDetailsPageArabic(driver); - } - assertTrue(biometricDetailsPage.isAuthenticationBiometricTitleDisplayed(),"Verify if biometric details page is displayed without upload doccument"); - - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - applicantBiometricsPage=new ApplicantBiometricsPageHindi(driver); - - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - applicantBiometricsPage=new ApplicantBiometricsPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - applicantBiometricsPage=new ApplicantBiometricsPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - applicantBiometricsPage=new ApplicantBiometricsPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); - } - biometricDetailsPage.clickOnIrisScan(); - - assertTrue(applicantBiometricsPage.isAuthenticationBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnMarkExceptionButton(); - - assertTrue(applicantBiometricsPage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - applicantBiometricsPage.markOneEyeException(); - - assertTrue(applicantBiometricsPage.isExceptionCountDisplyed(),"Verify if exception count is displayed"); - applicantBiometricsPage.clickOnExceptionTypeTemporaryButton(); - - assertTrue(applicantBiometricsPage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); - // applicantBiometricsPage.enterCommentsInTextBox(TestDataReader.readData("comments")); - - applicantBiometricsPage.clickOnIrisScanTitle(); - applicantBiometricsPage.clickOnScanButton(); - - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnBackButton(); - - assertTrue(biometricDetailsPage.isAuthenticationBiometricTitleDisplayed(),"Verify if biometric details page is displayed without upload doccument"); - biometricDetailsPage.clickOnContinueButton(); - - - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - documentuploadPage=new DocumentuploadPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - documentuploadPage=new DocumentUploadPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - documentuploadPage=new DocumentUploadPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - documentuploadPage=new DocumentuploadPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - documentuploadPage=new DocumentuploadPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - documentuploadPage=new DocumentuploadPageArabic(driver); - } - documentuploadPage.clickOnContinueButton(); - - assertTrue(consentPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); - documentuploadPage.selectIdentityProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonIdentityProofEnabled(),"Verify if scan button enabled"); - CameraPage cameraPage=documentuploadPage.clickOnScanButtonIdentityProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - identityProofPage=new IdentityProofPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - identityProofPage=new IdentityProofPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - identityProofPage=new IdentityProofPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - identityProofPage=new IdentityProofPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - identityProofPage=new IdentityProofPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - identityProofPage=new IdentityProofPageArabic(driver); - } - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectDobProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isDobHeaderDisplayed(),"Verify if DOB header is displayed"); - cameraPage=documentuploadPage.clickOnScanButtonDobProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - documentuploadPage.clickOnContinueButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { previewPage=new PreviewPageEnglish(driver); } @@ -498,8 +438,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ authenticationPage=new AuthenticationPageArabic(driver); } assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); - authenticationPage.enterUserName(TestDataReader.readData("username")); - authenticationPage.enterPassword(TestDataReader.readData("password")); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); authenticationPage.clickOnAuthenticatenButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { acknowledgementPage=new AcknowledgementPageEnglish(driver); @@ -546,6 +486,45 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ operationalTaskPage=new OperationalTaskPageArabic(driver); } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); operationalTaskPage.clickApplicationUploadTitle(); @@ -571,10 +550,12 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage.enterAID(Aid); assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if packet is approved after approve in pending approval"); + manageApplicationsPage.clickOnSearchCheckBox(); manageApplicationsPage.clickOnUploadButton(); - assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); + // assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); manageApplicationsPage.clickOnBackButton(); assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); @@ -598,7 +579,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ profilePage=new ProfilePageArabic(driver); } - assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + // assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); profilePage.clickOnLogoutButton(); profilePage.clickOnLogoutButton(); diff --git a/uitest-regclient/src/test/java/androidTestCases/UpdateMyUinMinor.java b/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinInfant.java similarity index 57% rename from uitest-regclient/src/test/java/androidTestCases/UpdateMyUinMinor.java rename to uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinInfant.java index 1f7895021..8d7af90c0 100644 --- a/uitest-regclient/src/test/java/androidTestCases/UpdateMyUinMinor.java +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinInfant.java @@ -1,24 +1,28 @@ -package androidTestCases; +package regclient.androidTestCases; import static org.testng.Assert.assertTrue; +import java.util.List; + import org.testng.annotations.Test; -import BaseTest.AndroidBaseTest; +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; import regclient.page.AcknowledgementPage; import regclient.page.ApplicantBiometricsPage; import regclient.page.AuthenticationPage; import regclient.page.BasePage; import regclient.page.BiometricDetailsPage; -import regclient.page.CameraPage; import regclient.page.ConsentPage; import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; -import regclient.page.IdentityProofPage; import regclient.page.IntroducerBiometricPage; import regclient.page.LoginPage; import regclient.page.ManageApplicationsPage; import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; import regclient.page.PreviewPage; import regclient.page.ProfilePage; import regclient.page.RegistrationTasksPage; @@ -31,11 +35,11 @@ import regclient.pages.arabic.ConsentPageArabic; import regclient.pages.arabic.DemographicDetailsPageArabic; import regclient.pages.arabic.DocumentuploadPageArabic; -import regclient.pages.arabic.IdentityProofPageArabic; import regclient.pages.arabic.IntroducerBiometricPageArabic; import regclient.pages.arabic.LoginPageArabic; import regclient.pages.arabic.ManageApplicationsPageArabic; import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; import regclient.pages.arabic.PreviewPageArabic; import regclient.pages.arabic.ProfilePageArabic; import regclient.pages.arabic.RegistrationTasksPageArabic; @@ -48,11 +52,11 @@ import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; import regclient.pages.english.DocumentuploadPageEnglish; -import regclient.pages.english.IdentityProofPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; import regclient.pages.english.PreviewPageEnglish; import regclient.pages.english.ProfilePageEnglish; import regclient.pages.english.RegistrationTasksPageEnglish; @@ -65,11 +69,11 @@ import regclient.pages.french.ConsentPageFrench; import regclient.pages.french.DemographicDetailsPageFrench; import regclient.pages.french.DocumentUploadPageFrench; -import regclient.pages.french.IdentityProofPageFrench; import regclient.pages.french.IntroducerBiometricPageFrench; import regclient.pages.french.LoginPageFrench; import regclient.pages.french.ManageApplicationsPageFrench; import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; import regclient.pages.french.PreviewPageFrench; import regclient.pages.french.ProfilePageFrench; import regclient.pages.french.RegistrationTasksPageFrench; @@ -82,11 +86,11 @@ import regclient.pages.hindi.ConsentPageHindi; import regclient.pages.hindi.DemographicDetailsPageHindi; import regclient.pages.hindi.DocumentUploadPageHindi; -import regclient.pages.hindi.IdentityProofPageHindi; import regclient.pages.hindi.IntroducerBiometricPageHindi; import regclient.pages.hindi.LoginPageHindi; import regclient.pages.hindi.ManageApplicationsPageHindi; import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; import regclient.pages.hindi.PreviewPageHindi; import regclient.pages.hindi.ProfilePageHindi; import regclient.pages.hindi.RegistrationTasksPageHindi; @@ -99,11 +103,11 @@ import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; import regclient.pages.kannada.DocumentuploadPageKannada; -import regclient.pages.kannada.IdentityProofPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; import regclient.pages.kannada.PreviewPageKannada; import regclient.pages.kannada.ProfilePageKannada; import regclient.pages.kannada.RegistrationTasksPageKannada; @@ -116,11 +120,11 @@ import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; import regclient.pages.tamil.DocumentuploadPageTamil; -import regclient.pages.tamil.IdentityProofPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; import regclient.pages.tamil.PreviewPageTamil; import regclient.pages.tamil.ProfilePageTamil; import regclient.pages.tamil.RegistrationTasksPageTamil; @@ -128,18 +132,19 @@ import regclient.pages.tamil.UpdateUINPageTamil; import regclient.utils.TestDataReader; -public class UpdateMyUinMinor extends AndroidBaseTest { +public class UpdateMyUinInfant extends AndroidBaseTest { @Test public void updateMyUinInfant(){ + FetchUiSpec.getUiSpec("updateProcess"); BasePage.disableAutoRotation(); + List screenOrder=FetchUiSpec.getAllScreenOrder(); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage=null; SelectLanguagePage selectLanguagePage=null; ConsentPage consentPage=null; DemographicDetailsPage demographicPage=null; DocumentUploadPage documentuploadPage=null; - IdentityProofPage identityProofPage=null; BiometricDetailsPage biometricDetailsPage=null; ApplicantBiometricsPage applicantBiometricsPage=null; PreviewPage previewPage=null; @@ -150,6 +155,7 @@ public void updateMyUinInfant(){ ProfilePage profilePage=null; UpdateUINPage updateUINPage=null; IntroducerBiometricPage introducerBiometricPage=null; + PendingApproval pendingApproval=null; if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { @@ -171,17 +177,16 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage = new LoginPageArabic(driver); } loginPage.selectLanguage(); - loginPage.enterUserName(TestDataReader.readData("username")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); } else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ registrationTasksPage=new RegistrationTasksPageHindi(driver); - } else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ registrationTasksPage=new RegistrationTasksPageFrench(driver); @@ -251,293 +256,175 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ updateUINPage.clickOnContinueButton(); assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is still displayed after clicking continue button "); - updateUINPage.enterUIN(TestDataReader.readData("UINminor")); - - assertTrue(updateUINPage.isConsentTitleDisplayed(),"verify if the consent title diplayed displayed"); - updateUINPage.clickOnConsentButton(); - - assertTrue(updateUINPage.isFullNameTitleDisplayed(),"verify if fill name title is displayed"); - updateUINPage.clickOnFullNameButton(); - - assertTrue(updateUINPage.isDOBTitleDisplayed(),"verify if the dob title is displayed"); - updateUINPage.clickOnDOBButton(); + updateUINPage.enterUIN(TestDataReader.readData("UINinfant")); - assertTrue(updateUINPage.isnGenderTitleDisplayed(),"verify if the gender title is displayed"); - updateUINPage.clickOnGenderButton(); - - assertTrue(updateUINPage.isnBiometricsTitleDisplayed(),"verify if the biometrics title is displayed"); - updateUINPage.clickOnBiometricsButton(); - - assertTrue(updateUINPage.isDocumentsTitleDisplayed(),"verify if the document title is displayed"); - updateUINPage.clickOnDocumentsButton(); + updateUINPage.selectUpdateValue("consentdet"); + updateUINPage.selectUpdateValue("DemographicDetails"); + updateUINPage.selectUpdateIntroducerDetails(); + updateUINPage.selectUpdateValue("BiometricDetails"); + updateUINPage.selectUpdateValue("Documents"); updateUINPage.clickOnContinueButton(); - - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - consentPage =new ConsentPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - consentPage =new ConsentPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - consentPage =new ConsentPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - consentPage =new ConsentPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - consentPage =new ConsentPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - consentPage =new ConsentPageArabic(driver); - } - assertTrue(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded"); - - assertTrue(consentPage.isInformedButtonEnabled(),"Verify if informed button enabled"); - consentPage.clickOnInformedButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - demographicPage=new DemographicDetailsPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - demographicPage=new DemographicDetailsPageHindi(driver); - - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - demographicPage=new DemographicDetailsPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - demographicPage=new DemographicDetailsPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - demographicPage=new DemographicDetailsPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - demographicPage=new DemographicDetailsPageArabic(driver); - } - - assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); - demographicPage.clickOnContinueButton(); - - assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed after clicking disable continue button"); - demographicPage.enterFullName(TestDataReader.readData("fullname")); - - assertTrue(demographicPage.checkFullNameSecondLanguageTextBoxNotNull(),"Verify if first name is enter in second language text box"); - demographicPage.enterAge(TestDataReader.readData("minorAge")); - demographicPage.selectGender(TestDataReader.readData("gender")); - - demographicPage.clickOnContinueButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - biometricDetailsPage=new BiometricDetailsPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - biometricDetailsPage=new BiometricDetailsPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - biometricDetailsPage=new BiometricDetailsPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - biometricDetailsPage=new BiometricDetailsPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - biometricDetailsPage=new BiometricDetailsPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - biometricDetailsPage=new BiometricDetailsPageArabic(driver); - } - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIrisScan(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - applicantBiometricsPage=new ApplicantBiometricsPageHindi(driver); - - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - applicantBiometricsPage=new ApplicantBiometricsPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - applicantBiometricsPage=new ApplicantBiometricsPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - applicantBiometricsPage=new ApplicantBiometricsPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); - } - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); - applicantBiometricsPage.clickOnScanButton(); - - assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); - //righthand - assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); - applicantBiometricsPage.clickOnScanButton(); - - assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); - //lefthand - assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); - applicantBiometricsPage.clickOnScanButton(); - - assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); - //thumb - assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - applicantBiometricsPage.clickOnScanButton(); - - assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); - //face - assertTrue(applicantBiometricsPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - applicantBiometricsPage.clickOnScanButton(); - - assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnNextButton(); - - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); - biometricDetailsPage.clickOnIntroducerIrisScan(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - introducerBiometricPage=new IntroducerBiometricPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - introducerBiometricPage=new IntroducerBiometricPageHindi(driver); - - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - introducerBiometricPage=new IntroducerBiometricPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - introducerBiometricPage=new IntroducerBiometricPageKannada(driver); + for(String screen :screenOrder) { + if(screen.equals("consentdet")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + consentPage =new ConsentPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + consentPage =new ConsentPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + consentPage =new ConsentPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + consentPage =new ConsentPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + consentPage =new ConsentPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + consentPage =new ConsentPageArabic(driver); + } + assertTrue(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded"); + + assertTrue(consentPage.isInformedButtonEnabled(),"Verify if informed button enabled"); + consentPage.clickOnInformedButton(); + } + else if(screen.equals("DemographicDetails")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + demographicPage=new DemographicDetailsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + demographicPage=new DemographicDetailsPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + demographicPage=new DemographicDetailsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + demographicPage=new DemographicDetailsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + demographicPage=new DemographicDetailsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + demographicPage=new DemographicDetailsPageArabic(driver); + } + + assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); + demographicPage.clickOnContinueButton(); + + assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed after clicking disable continue button"); + demographicPage.fillDemographicDetailsPage("infant"); + demographicPage.fillIntroducerDetailsInDemographicDetailsPage("minor"); + + demographicPage.clickOnContinueButton(); + } + else if(screen.equals("BiometricDetails")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + biometricDetailsPage=new BiometricDetailsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + biometricDetailsPage=new BiometricDetailsPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + biometricDetailsPage=new BiometricDetailsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + biometricDetailsPage=new BiometricDetailsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + biometricDetailsPage=new BiometricDetailsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + biometricDetailsPage=new BiometricDetailsPageArabic(driver); + } + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + applicantBiometricsPage=new ApplicantBiometricsPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + applicantBiometricsPage=new ApplicantBiometricsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + applicantBiometricsPage=new ApplicantBiometricsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + applicantBiometricsPage=new ApplicantBiometricsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); + } + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face captured and 2 attempts left text is displayed"); + applicantBiometricsPage.closeScanCapturePopUp();; + biometricDetailsPage=applicantBiometricsPage.clickOnNextButton(); + + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnIntroducerIrisScan(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + introducerBiometricPage=new IntroducerBiometricPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + introducerBiometricPage=new IntroducerBiometricPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + introducerBiometricPage=new IntroducerBiometricPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + introducerBiometricPage=new IntroducerBiometricPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + introducerBiometricPage=new IntroducerBiometricPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + introducerBiometricPage=new IntroducerBiometricPageArabic(driver); + } + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnBackButton(); + + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnContinueButton(); + + } + else if(screen.equals("Documents")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + documentuploadPage=new DocumentuploadPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + documentuploadPage=new DocumentUploadPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + documentuploadPage=new DocumentUploadPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + documentuploadPage=new DocumentuploadPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + documentuploadPage=new DocumentuploadPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + documentuploadPage=new DocumentuploadPageArabic(driver); + } + documentuploadPage.clickOnContinueButton(); + + assertTrue(consentPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); + documentuploadPage.uploadDoccumentsUpdate("infant","all"); + + documentuploadPage.clickOnContinueButton(); + } } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - introducerBiometricPage=new IntroducerBiometricPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - introducerBiometricPage=new IntroducerBiometricPageArabic(driver); - } - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); - introducerBiometricPage.clickOnScanButton(); - - assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); - //righthand - assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); - introducerBiometricPage.clickOnScanButton(); - - assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); - //lefthand - assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); - introducerBiometricPage.clickOnScanButton(); - - assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); - //thumb - assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - introducerBiometricPage.clickOnScanButton(); - - assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - introducerBiometricPage.clickOnNextButton(); - //face - assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - introducerBiometricPage.clickOnScanButton(); - - assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); - introducerBiometricPage.closeScanCapturePopUp(); - biometricDetailsPage=introducerBiometricPage.clickOnNextButton(); - - biometricDetailsPage.clickOnContinueButton(); - - - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - documentuploadPage=new DocumentuploadPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - documentuploadPage=new DocumentUploadPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - documentuploadPage=new DocumentUploadPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - documentuploadPage=new DocumentuploadPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - documentuploadPage=new DocumentuploadPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - documentuploadPage=new DocumentuploadPageArabic(driver); - } - documentuploadPage.clickOnContinueButton(); - - assertTrue(consentPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); - documentuploadPage.selectIdentityProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonIdentityProofEnabled(),"Verify if scan button enabled"); - CameraPage cameraPage=documentuploadPage.clickOnScanButtonIdentityProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - identityProofPage=new IdentityProofPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - identityProofPage=new IdentityProofPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - identityProofPage=new IdentityProofPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - identityProofPage=new IdentityProofPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - identityProofPage=new IdentityProofPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - identityProofPage=new IdentityProofPageArabic(driver); - } - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectRelationshipProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isScanButtonRelationshipProoffEnabled(),"Verify if scan button enabled"); - cameraPage=documentuploadPage.clickOnScanButtonRelationshipProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - documentuploadPage=identityProofPage.clickOnSaveButton(); - - assertTrue(documentuploadPage.isDeleteButtonDisplyed(),"Verify if delete button is displayed"); - documentuploadPage.selectDobProof(); - documentuploadPage.closePopUpClose(); - - assertTrue(documentuploadPage.isDobHeaderDisplayed(),"Verify if DOB header is displayed"); - documentuploadPage.clickOnScanButtonDobProof(); - - cameraPage.clickimage(); - cameraPage.clickOkButton(); - - assertTrue(identityProofPage.isRetakeButtonDisplayed(),"Verify if retake button displayed"); - identityProofPage.cropCaptureImage(); - identityProofPage.clickOnSaveButton(); - documentuploadPage.clickOnContinueButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { previewPage=new PreviewPageEnglish(driver); @@ -583,8 +470,8 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ authenticationPage=new AuthenticationPageArabic(driver); } assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); - authenticationPage.enterUserName(TestDataReader.readData("username")); - authenticationPage.enterPassword(TestDataReader.readData("password")); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); authenticationPage.clickOnAuthenticatenButton(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { acknowledgementPage=new AcknowledgementPageEnglish(driver); @@ -631,6 +518,50 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ operationalTaskPage=new OperationalTaskPageArabic(driver); } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.enterAID(Aid); + + assertTrue(pendingApproval.isClientStatusDisplayed(), "Verify if pending approval page show client status"); + assertTrue(pendingApproval.isReviewStatusDisplayed(), "Verify if pending approval page show review status"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + + pendingApproval.clickOnBackButton(); assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); operationalTaskPage.clickApplicationUploadTitle(); @@ -656,10 +587,12 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ manageApplicationsPage.enterAID(Aid); assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if packet is approved after approve in pending approval"); + manageApplicationsPage.clickOnSearchCheckBox(); manageApplicationsPage.clickOnUploadButton(); - assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); + //assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); manageApplicationsPage.clickOnBackButton(); assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); @@ -683,7 +616,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ profilePage=new ProfilePageArabic(driver); } - assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + // assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); profilePage.clickOnLogoutButton(); profilePage.clickOnLogoutButton(); diff --git a/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinMinor.java b/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinMinor.java new file mode 100644 index 000000000..06739f22a --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinMinor.java @@ -0,0 +1,726 @@ +package regclient.androidTestCases; + +import static org.testng.Assert.assertTrue; + +import java.util.List; + +import org.testng.annotations.Test; + +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; +import regclient.page.AcknowledgementPage; +import regclient.page.ApplicantBiometricsPage; +import regclient.page.AuthenticationPage; +import regclient.page.BasePage; +import regclient.page.BiometricDetailsPage; +import regclient.page.ConsentPage; +import regclient.page.DemographicDetailsPage; +import regclient.page.DocumentUploadPage; +import regclient.page.IntroducerBiometricPage; +import regclient.page.LoginPage; +import regclient.page.ManageApplicationsPage; +import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; +import regclient.page.PreviewPage; +import regclient.page.ProfilePage; +import regclient.page.RegistrationTasksPage; +import regclient.page.SelectLanguagePage; +import regclient.page.UpdateUINPage; +import regclient.pages.arabic.AcknowledgementPageArabic; +import regclient.pages.arabic.ApplicantBiometricsPageArabic; +import regclient.pages.arabic.AuthenticationPageArabic; +import regclient.pages.arabic.BiometricDetailsPageArabic; +import regclient.pages.arabic.ConsentPageArabic; +import regclient.pages.arabic.DemographicDetailsPageArabic; +import regclient.pages.arabic.DocumentuploadPageArabic; +import regclient.pages.arabic.IntroducerBiometricPageArabic; +import regclient.pages.arabic.LoginPageArabic; +import regclient.pages.arabic.ManageApplicationsPageArabic; +import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; +import regclient.pages.arabic.PreviewPageArabic; +import regclient.pages.arabic.ProfilePageArabic; +import regclient.pages.arabic.RegistrationTasksPageArabic; +import regclient.pages.arabic.SelectLanguagePageArabic; +import regclient.pages.arabic.UpdateUINPageArabic; +import regclient.pages.english.AcknowledgementPageEnglish; +import regclient.pages.english.ApplicantBiometricsPageEnglish; +import regclient.pages.english.AuthenticationPageEnglish; +import regclient.pages.english.BiometricDetailsPageEnglish; +import regclient.pages.english.ConsentPageEnglish; +import regclient.pages.english.DemographicDetailsPageEnglish; +import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.IntroducerBiometricPageEnglish; +import regclient.pages.english.LoginPageEnglish; +import regclient.pages.english.ManageApplicationsPageEnglish; +import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; +import regclient.pages.english.PreviewPageEnglish; +import regclient.pages.english.ProfilePageEnglish; +import regclient.pages.english.RegistrationTasksPageEnglish; +import regclient.pages.english.SelectLanguagePageEnglish; +import regclient.pages.english.UpdateUINPageEnglish; +import regclient.pages.french.AcknowledgementPageFrench; +import regclient.pages.french.ApplicantBiometricsPageFrench; +import regclient.pages.french.AuthenticationPageFrench; +import regclient.pages.french.BiometricDetailsPageFrench; +import regclient.pages.french.ConsentPageFrench; +import regclient.pages.french.DemographicDetailsPageFrench; +import regclient.pages.french.DocumentUploadPageFrench; +import regclient.pages.french.IntroducerBiometricPageFrench; +import regclient.pages.french.LoginPageFrench; +import regclient.pages.french.ManageApplicationsPageFrench; +import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; +import regclient.pages.french.PreviewPageFrench; +import regclient.pages.french.ProfilePageFrench; +import regclient.pages.french.RegistrationTasksPageFrench; +import regclient.pages.french.SelectLanguagePageFrench; +import regclient.pages.french.UpdateUINPageFrench; +import regclient.pages.hindi.AcknowledgementPageHindi; +import regclient.pages.hindi.ApplicantBiometricsPageHindi; +import regclient.pages.hindi.AuthenticationPageHindi; +import regclient.pages.hindi.BiometricDetailsPageHindi; +import regclient.pages.hindi.ConsentPageHindi; +import regclient.pages.hindi.DemographicDetailsPageHindi; +import regclient.pages.hindi.DocumentUploadPageHindi; +import regclient.pages.hindi.IntroducerBiometricPageHindi; +import regclient.pages.hindi.LoginPageHindi; +import regclient.pages.hindi.ManageApplicationsPageHindi; +import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; +import regclient.pages.hindi.PreviewPageHindi; +import regclient.pages.hindi.ProfilePageHindi; +import regclient.pages.hindi.RegistrationTasksPageHindi; +import regclient.pages.hindi.SelectLanguagePageHindi; +import regclient.pages.hindi.UpdateUINPageHindi; +import regclient.pages.kannada.AcknowledgementPageKannada; +import regclient.pages.kannada.ApplicantBiometricsPageKannada; +import regclient.pages.kannada.AuthenticationPageKannada; +import regclient.pages.kannada.BiometricDetailsPageKannada; +import regclient.pages.kannada.ConsentPageKannada; +import regclient.pages.kannada.DemographicDetailsPageKannada; +import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.IntroducerBiometricPageKannada; +import regclient.pages.kannada.LoginPageKannada; +import regclient.pages.kannada.ManageApplicationsPageKannada; +import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; +import regclient.pages.kannada.PreviewPageKannada; +import regclient.pages.kannada.ProfilePageKannada; +import regclient.pages.kannada.RegistrationTasksPageKannada; +import regclient.pages.kannada.SelectLanguagePageKannada; +import regclient.pages.kannada.UpdateUINPageKannada; +import regclient.pages.tamil.AcknowledgementPageTamil; +import regclient.pages.tamil.ApplicantBiometricsPageTamil; +import regclient.pages.tamil.AuthenticationPageTamil; +import regclient.pages.tamil.BiometricDetailsPageTamil; +import regclient.pages.tamil.ConsentPageTamil; +import regclient.pages.tamil.DemographicDetailsPageTamil; +import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.IntroducerBiometricPageTamil; +import regclient.pages.tamil.LoginPageTamil; +import regclient.pages.tamil.ManageApplicationsPageTamil; +import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; +import regclient.pages.tamil.PreviewPageTamil; +import regclient.pages.tamil.ProfilePageTamil; +import regclient.pages.tamil.RegistrationTasksPageTamil; +import regclient.pages.tamil.SelectLanguagePageTamil; +import regclient.pages.tamil.UpdateUINPageTamil; +import regclient.utils.TestDataReader; + +public class UpdateMyUinMinor extends AndroidBaseTest { + + @Test + public void updateMyUinMinor(){ + FetchUiSpec.getUiSpec("updateProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); + List screenOrder=FetchUiSpec.getAllScreenOrder(); + BasePage.disableAutoRotation(); + LoginPage loginPage = null; + RegistrationTasksPage registrationTasksPage=null; + SelectLanguagePage selectLanguagePage=null; + ConsentPage consentPage=null; + DemographicDetailsPage demographicPage=null; + DocumentUploadPage documentuploadPage=null; + BiometricDetailsPage biometricDetailsPage=null; + ApplicantBiometricsPage applicantBiometricsPage=null; + PreviewPage previewPage=null; + AuthenticationPage authenticationPage=null; + AcknowledgementPage acknowledgementPage=null; + OperationalTaskPage operationalTaskPage=null; + ManageApplicationsPage manageApplicationsPage=null; + ProfilePage profilePage=null; + UpdateUINPage updateUINPage=null; + IntroducerBiometricPage introducerBiometricPage=null; + PendingApproval pendingApproval=null; + + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + loginPage = new LoginPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + loginPage = new LoginPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + loginPage = new LoginPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + loginPage = new LoginPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + loginPage = new LoginPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + loginPage = new LoginPageArabic(driver); + } + loginPage.selectLanguage(); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + registrationTasksPage=new RegistrationTasksPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + registrationTasksPage=new RegistrationTasksPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + registrationTasksPage=new RegistrationTasksPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + registrationTasksPage=new RegistrationTasksPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + registrationTasksPage=new RegistrationTasksPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + registrationTasksPage=new RegistrationTasksPageArabic(driver); + } + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); + registrationTasksPage.clickUpdateMyUINButton(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + selectLanguagePage=new SelectLanguagePageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + selectLanguagePage=new SelectLanguagePageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + selectLanguagePage=new SelectLanguagePageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + selectLanguagePage=new SelectLanguagePageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + selectLanguagePage=new SelectLanguagePageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + selectLanguagePage=new SelectLanguagePageArabic(driver); + } + assertTrue(selectLanguagePage.isSelectLanguagePageLoaded(),"Verify if select language page is loaded"); + selectLanguagePage.clickOnSubmitButtonWithoutSelectingLanguage(); + + assertTrue(selectLanguagePage.isSelectLanguagePageLoaded(),"Verify if user should not be allow to navigate to next screen."); + selectLanguagePage.selectSecondLanguage(); + + assertTrue(selectLanguagePage.isNotificationLanguageEnglishDisplayed(),"verify if the notification language display in english"); + selectLanguagePage.selectNotificationlanguage(TestDataReader.readData("notificationLanguage")); + + assertTrue(selectLanguagePage.isSubmitButtonEnabled(),"verify if the submit button enabled"); + selectLanguagePage.clickOnSubmitButton(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + updateUINPage =new UpdateUINPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + updateUINPage =new UpdateUINPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + updateUINPage =new UpdateUINPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + updateUINPage =new UpdateUINPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + updateUINPage =new UpdateUINPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + updateUINPage =new UpdateUINPageArabic(driver); + } + + assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is displayed"); + updateUINPage.clickOnContinueButton(); + + assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is still displayed after clicking continue button "); + updateUINPage.enterUIN(TestDataReader.readData("UINminor")+"123"); + + assertTrue(updateUINPage.isInvalidUINErrorMessageDisplayed(),"verify if after enter invalid uin it should give error message "); + updateUINPage.enterUIN(TestDataReader.readData("UINminor")); + + updateUINPage.selectUpdateValue("consentdet"); + updateUINPage.selectUpdateValue("DemographicDetails"); + updateUINPage.selectUpdateValue("BiometricDetails"); + updateUINPage.selectUpdateValue("Documents"); + + updateUINPage.clickOnContinueButton(); + for(String screen :screenOrder) { + if(screen.equals("consentdet")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + consentPage =new ConsentPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + consentPage =new ConsentPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + consentPage =new ConsentPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + consentPage =new ConsentPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + consentPage =new ConsentPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + consentPage =new ConsentPageArabic(driver); + } + assertTrue(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded"); + + assertTrue(consentPage.isInformedButtonEnabled(),"Verify if informed button enabled"); + consentPage.clickOnInformedButton(); + } + else if(screen.equals("DemographicDetails")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + demographicPage=new DemographicDetailsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + demographicPage=new DemographicDetailsPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + demographicPage=new DemographicDetailsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + demographicPage=new DemographicDetailsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + demographicPage=new DemographicDetailsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + demographicPage=new DemographicDetailsPageArabic(driver); + } + + assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed"); + demographicPage.clickOnContinueButton(); + + assertTrue(demographicPage.isDemographicDetailsPageDisplayed(),"Verify if demographic details page is displayed after clicking disable continue button"); + demographicPage.fillDemographicDetailsPage("minor"); + + demographicPage.clickOnContinueButton(); + } + else if(screen.equals("BiometricDetails")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + biometricDetailsPage=new BiometricDetailsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + biometricDetailsPage=new BiometricDetailsPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + biometricDetailsPage=new BiometricDetailsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + biometricDetailsPage=new BiometricDetailsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + biometricDetailsPage=new BiometricDetailsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + biometricDetailsPage=new BiometricDetailsPageArabic(driver); + } + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + applicantBiometricsPage=new ApplicantBiometricsPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + applicantBiometricsPage=new ApplicantBiometricsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + applicantBiometricsPage=new ApplicantBiometricsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + applicantBiometricsPage=new ApplicantBiometricsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); + } + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //righthand + if(FetchUiSpec.rightHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //lefthand + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //thumb + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //face + if(FetchUiSpec.face.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } + + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + introducerBiometricPage=new IntroducerBiometricPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + introducerBiometricPage=new IntroducerBiometricPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + introducerBiometricPage=new IntroducerBiometricPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + introducerBiometricPage=new IntroducerBiometricPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + introducerBiometricPage=new IntroducerBiometricPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + introducerBiometricPage=new IntroducerBiometricPageArabic(driver); + } + FetchUiSpec.getBiometricDetails("introducerBiometrics"); + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerIrisScan(); + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isIrisScan(),"Verify if iris scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } + //righthand + if(FetchUiSpec.rightHand.equals("yes")) { + if(!FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerRightHandScan(); + } + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + + assertTrue(introducerBiometricPage.isRightHandScanTitleDisplyed(),"Verify if right hand scan is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } + //lefthand + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + + assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplyed(),"Verify if applicant left hand scan title is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } + //thumb + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + + assertTrue(introducerBiometricPage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } + //face + if(FetchUiSpec.face.equals("yes")) { + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplyed(),"Verify if introducer biometric page is displayed"); + + assertTrue(introducerBiometricPage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isFaceScan(),"Verify if face scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + biometricDetailsPage=introducerBiometricPage.clickOnNextButton(); + } + + biometricDetailsPage.clickOnContinueButton(); + } + else if(screen.equals("Documents")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + documentuploadPage=new DocumentuploadPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + documentuploadPage=new DocumentUploadPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + documentuploadPage=new DocumentUploadPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + documentuploadPage=new DocumentuploadPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + documentuploadPage=new DocumentuploadPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + documentuploadPage=new DocumentuploadPageArabic(driver); + } + documentuploadPage.clickOnContinueButton(); + + assertTrue(consentPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); + documentuploadPage.uploadDoccumentsUpdate("minor","all"); + + documentuploadPage.clickOnContinueButton(); + } + } + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + previewPage=new PreviewPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + previewPage=new PreviewPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + previewPage=new PreviewPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + previewPage=new PreviewPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + previewPage=new PreviewPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + previewPage=new PreviewPageArabic(driver); + } + assertTrue(previewPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); + assertTrue(previewPage.isApplicationIDPreviewPagePageDisplayed(),"Verify if application ID In PreviewPage is displayed"); + assertTrue(previewPage.isDemographicInformationInPreviewPageDisplayed(),"Verify if Demographic Information In PreviewPage is displayed"); + assertTrue(previewPage.isDocumentsInformationInPreviewPageDisplayed(),"Verify if Documents Information In PreviewPage is displayed"); + assertTrue(previewPage.isBiometricsInformationInPreviewPagePageDisplayed(),"Verify if Biometrics Information In PreviewPage is displayed"); + String Aid=previewPage.getAID(); + previewPage.clickOnContinueButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + authenticationPage=new AuthenticationPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + authenticationPage=new AuthenticationPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + authenticationPage=new AuthenticationPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + authenticationPage=new AuthenticationPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + authenticationPage=new AuthenticationPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + authenticationPage=new AuthenticationPageArabic(driver); + } + assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); + authenticationPage.clickOnAuthenticatenButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + acknowledgementPage=new AcknowledgementPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + acknowledgementPage=new AcknowledgementPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + acknowledgementPage=new AcknowledgementPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + acknowledgementPage=new AcknowledgementPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + acknowledgementPage=new AcknowledgementPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + acknowledgementPage=new AcknowledgementPageArabic(driver); + } + assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(),"Verify if acknowledgement details page is displayed"); + // assertTrue(acknowledgementPage.isQrCodeImageDisplayed(),"Verify if qr code image is displayed"); + + acknowledgementPage.clickOnGoToHomeButton(); + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); + registrationTasksPage.clickOnOperationalTasksTitle(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + operationalTaskPage=new OperationalTaskPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + operationalTaskPage=new OperationalTaskPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + operationalTaskPage=new OperationalTaskPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + operationalTaskPage=new OperationalTaskPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + operationalTaskPage=new OperationalTaskPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + operationalTaskPage=new OperationalTaskPageArabic(driver); + } + assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + assertTrue(pendingApproval.isRejectButtonDisplayed(), "Verify if reject button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); + assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); + + operationalTaskPage.clickApplicationUploadTitle(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + manageApplicationsPage=new ManageApplicationsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + manageApplicationsPage=new ManageApplicationsPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + manageApplicationsPage=new ManageApplicationsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + manageApplicationsPage=new ManageApplicationsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + manageApplicationsPage=new ManageApplicationsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + manageApplicationsPage=new ManageApplicationsPageArabic(driver); + } + assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), "Verify if manage Applications Page displayed"); + manageApplicationsPage.enterAID(Aid); + + assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if packet is approved after approve in pending approval"); + + manageApplicationsPage.clickOnSearchCheckBox(); + manageApplicationsPage.clickOnUploadButton(); + + // assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); + manageApplicationsPage.clickOnBackButton(); + + assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); + registrationTasksPage.clickProfileButton(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + profilePage=new ProfilePageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + profilePage=new ProfilePageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + profilePage=new ProfilePageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + profilePage=new ProfilePageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + profilePage=new ProfilePageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + profilePage=new ProfilePageArabic(driver); + } + //assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + profilePage.clickOnLogoutButton(); + + profilePage.clickOnLogoutButton(); + + assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded in Selected language"); + + } + +} diff --git a/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateBiometrics.java b/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateBiometrics.java new file mode 100644 index 000000000..919ce47dc --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateBiometrics.java @@ -0,0 +1,621 @@ +package regclient.androidTestCases; + +import static org.testng.Assert.assertTrue; + +import java.util.List; + +import org.testng.annotations.Test; + +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; +import regclient.page.AcknowledgementPage; +import regclient.page.ApplicantBiometricsPage; +import regclient.page.AuthenticationPage; +import regclient.page.BasePage; +import regclient.page.BiometricDetailsPage; +import regclient.page.ConsentPage; +import regclient.page.DemographicDetailsPage; +import regclient.page.DocumentUploadPage; +import regclient.page.LoginPage; +import regclient.page.ManageApplicationsPage; +import regclient.page.OperationalTaskPage; +import regclient.page.PendingApproval; +import regclient.page.PreviewPage; +import regclient.page.ProfilePage; +import regclient.page.RegistrationTasksPage; +import regclient.page.SelectLanguagePage; +import regclient.page.UpdateUINPage; +import regclient.pages.arabic.AcknowledgementPageArabic; +import regclient.pages.arabic.ApplicantBiometricsPageArabic; +import regclient.pages.arabic.AuthenticationPageArabic; +import regclient.pages.arabic.BiometricDetailsPageArabic; +import regclient.pages.arabic.ConsentPageArabic; +import regclient.pages.arabic.DemographicDetailsPageArabic; +import regclient.pages.arabic.DocumentuploadPageArabic; +import regclient.pages.arabic.LoginPageArabic; +import regclient.pages.arabic.ManageApplicationsPageArabic; +import regclient.pages.arabic.OperationalTaskPageArabic; +import regclient.pages.arabic.PendingApprovalArabic; +import regclient.pages.arabic.PreviewPageArabic; +import regclient.pages.arabic.ProfilePageArabic; +import regclient.pages.arabic.RegistrationTasksPageArabic; +import regclient.pages.arabic.SelectLanguagePageArabic; +import regclient.pages.arabic.UpdateUINPageArabic; +import regclient.pages.english.AcknowledgementPageEnglish; +import regclient.pages.english.ApplicantBiometricsPageEnglish; +import regclient.pages.english.AuthenticationPageEnglish; +import regclient.pages.english.BiometricDetailsPageEnglish; +import regclient.pages.english.ConsentPageEnglish; +import regclient.pages.english.DemographicDetailsPageEnglish; +import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.LoginPageEnglish; +import regclient.pages.english.ManageApplicationsPageEnglish; +import regclient.pages.english.OperationalTaskPageEnglish; +import regclient.pages.english.PendingApprovalEnglish; +import regclient.pages.english.PreviewPageEnglish; +import regclient.pages.english.ProfilePageEnglish; +import regclient.pages.english.RegistrationTasksPageEnglish; +import regclient.pages.english.SelectLanguagePageEnglish; +import regclient.pages.english.UpdateUINPageEnglish; +import regclient.pages.french.AcknowledgementPageFrench; +import regclient.pages.french.ApplicantBiometricsPageFrench; +import regclient.pages.french.AuthenticationPageFrench; +import regclient.pages.french.BiometricDetailsPageFrench; +import regclient.pages.french.ConsentPageFrench; +import regclient.pages.french.DemographicDetailsPageFrench; +import regclient.pages.french.DocumentUploadPageFrench; +import regclient.pages.french.LoginPageFrench; +import regclient.pages.french.ManageApplicationsPageFrench; +import regclient.pages.french.OperationalTaskPageFrench; +import regclient.pages.french.PendingApprovalFrench; +import regclient.pages.french.PreviewPageFrench; +import regclient.pages.french.ProfilePageFrench; +import regclient.pages.french.RegistrationTasksPageFrench; +import regclient.pages.french.SelectLanguagePageFrench; +import regclient.pages.french.UpdateUINPageFrench; +import regclient.pages.hindi.AcknowledgementPageHindi; +import regclient.pages.hindi.ApplicantBiometricsPageHindi; +import regclient.pages.hindi.AuthenticationPageHindi; +import regclient.pages.hindi.BiometricDetailsPageHindi; +import regclient.pages.hindi.ConsentPageHindi; +import regclient.pages.hindi.DemographicDetailsPageHindi; +import regclient.pages.hindi.DocumentUploadPageHindi; +import regclient.pages.hindi.LoginPageHindi; +import regclient.pages.hindi.ManageApplicationsPageHindi; +import regclient.pages.hindi.OperationalTaskPageHindi; +import regclient.pages.hindi.PendingApprovalHindi; +import regclient.pages.hindi.PreviewPageHindi; +import regclient.pages.hindi.ProfilePageHindi; +import regclient.pages.hindi.RegistrationTasksPageHindi; +import regclient.pages.hindi.SelectLanguagePageHindi; +import regclient.pages.hindi.UpdateUINPageHindi; +import regclient.pages.kannada.AcknowledgementPageKannada; +import regclient.pages.kannada.ApplicantBiometricsPageKannada; +import regclient.pages.kannada.AuthenticationPageKannada; +import regclient.pages.kannada.BiometricDetailsPageKannada; +import regclient.pages.kannada.ConsentPageKannada; +import regclient.pages.kannada.DemographicDetailsPageKannada; +import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.LoginPageKannada; +import regclient.pages.kannada.ManageApplicationsPageKannada; +import regclient.pages.kannada.OperationalTaskPageKannada; +import regclient.pages.kannada.PendingApprovalKannada; +import regclient.pages.kannada.PreviewPageKannada; +import regclient.pages.kannada.ProfilePageKannada; +import regclient.pages.kannada.RegistrationTasksPageKannada; +import regclient.pages.kannada.SelectLanguagePageKannada; +import regclient.pages.kannada.UpdateUINPageKannada; +import regclient.pages.tamil.AcknowledgementPageTamil; +import regclient.pages.tamil.ApplicantBiometricsPageTamil; +import regclient.pages.tamil.AuthenticationPageTamil; +import regclient.pages.tamil.BiometricDetailsPageTamil; +import regclient.pages.tamil.ConsentPageTamil; +import regclient.pages.tamil.DemographicDetailsPageTamil; +import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.LoginPageTamil; +import regclient.pages.tamil.ManageApplicationsPageTamil; +import regclient.pages.tamil.OperationalTaskPageTamil; +import regclient.pages.tamil.PendingApprovalTamil; +import regclient.pages.tamil.PreviewPageTamil; +import regclient.pages.tamil.ProfilePageTamil; +import regclient.pages.tamil.RegistrationTasksPageTamil; +import regclient.pages.tamil.SelectLanguagePageTamil; +import regclient.pages.tamil.UpdateUINPageTamil; +import regclient.utils.TestDataReader; + +public class UpdateMyUinUpdateBiometrics extends AndroidBaseTest { + + @Test + public void updateMyUINUpdatebiometrics(){ + FetchUiSpec.getUiSpec("updateProcess"); + List screenOrder=FetchUiSpec.getAllScreenOrder(); + BasePage.disableAutoRotation(); + LoginPage loginPage = null; + RegistrationTasksPage registrationTasksPage=null; + SelectLanguagePage selectLanguagePage=null; + ConsentPage consentPage=null; + DemographicDetailsPage demographicPage=null; + DocumentUploadPage documentuploadPage=null; + BiometricDetailsPage biometricDetailsPage=null; + ApplicantBiometricsPage applicantBiometricsPage=null; + PreviewPage previewPage=null; + AuthenticationPage authenticationPage=null; + AcknowledgementPage acknowledgementPage=null; + OperationalTaskPage operationalTaskPage=null; + ManageApplicationsPage manageApplicationsPage=null; + ProfilePage profilePage=null; + UpdateUINPage updateUINPage=null; + PendingApproval pendingApproval=null; + + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + loginPage = new LoginPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + loginPage = new LoginPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + loginPage = new LoginPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + loginPage = new LoginPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + loginPage = new LoginPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + loginPage = new LoginPageArabic(driver); + } + loginPage.selectLanguage(); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + registrationTasksPage=new RegistrationTasksPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + registrationTasksPage=new RegistrationTasksPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + registrationTasksPage=new RegistrationTasksPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + registrationTasksPage=new RegistrationTasksPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + registrationTasksPage=new RegistrationTasksPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + registrationTasksPage=new RegistrationTasksPageArabic(driver); + } + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); + registrationTasksPage.clickUpdateMyUINButton(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + selectLanguagePage=new SelectLanguagePageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + selectLanguagePage=new SelectLanguagePageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + selectLanguagePage=new SelectLanguagePageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + selectLanguagePage=new SelectLanguagePageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + selectLanguagePage=new SelectLanguagePageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + selectLanguagePage=new SelectLanguagePageArabic(driver); + } + assertTrue(selectLanguagePage.isSelectLanguagePageLoaded(),"Verify if select language page is loaded"); + selectLanguagePage.clickOnSubmitButtonWithoutSelectingLanguage(); + + assertTrue(selectLanguagePage.isSelectLanguagePageLoaded(),"Verify if user should not be allow to navigate to next screen."); + selectLanguagePage.selectSecondLanguage(); + + assertTrue(selectLanguagePage.isNotificationLanguageEnglishDisplayed(),"verify if the notification language display in english"); + selectLanguagePage.selectNotificationlanguage(TestDataReader.readData("notificationLanguage")); + + assertTrue(selectLanguagePage.isSubmitButtonEnabled(),"verify if the submit button enabled"); + selectLanguagePage.clickOnSubmitButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + updateUINPage =new UpdateUINPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + updateUINPage =new UpdateUINPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + updateUINPage =new UpdateUINPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + updateUINPage =new UpdateUINPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + updateUINPage =new UpdateUINPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + updateUINPage =new UpdateUINPageArabic(driver); + } + + assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is displayed"); + updateUINPage.clickOnContinueButton(); + + assertTrue(updateUINPage.isUpdateMyUINTitleDisplayed(),"verify if the update my uin page is still displayed after clicking continue button "); + updateUINPage.enterUIN(TestDataReader.readData("UIN")); + + updateUINPage.selectUpdateValue("BiometricDetails"); + + updateUINPage.clickOnContinueButton(); + for(String screen :screenOrder) { + if(screen.equals("consentdet")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + consentPage =new ConsentPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + consentPage =new ConsentPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + consentPage =new ConsentPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + consentPage =new ConsentPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + consentPage =new ConsentPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + consentPage =new ConsentPageArabic(driver); + } + assertTrue(consentPage.isConsentPageDisplayed(),"Verify if Consent page is loaded"); + consentPage.clickOnInformedButton(); + } + else if(screen.equals("DemographicDetails")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + demographicPage=new DemographicDetailsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + demographicPage=new DemographicDetailsPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + demographicPage=new DemographicDetailsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + demographicPage=new DemographicDetailsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + demographicPage=new DemographicDetailsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + demographicPage=new DemographicDetailsPageArabic(driver); + } + + demographicPage.clickOnContinueButton(); + } + else if(screen.equals("BiometricDetails")) { + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + biometricDetailsPage=new BiometricDetailsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + biometricDetailsPage=new BiometricDetailsPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + biometricDetailsPage=new BiometricDetailsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + biometricDetailsPage=new BiometricDetailsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + biometricDetailsPage=new BiometricDetailsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + biometricDetailsPage=new BiometricDetailsPageArabic(driver); + } + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + applicantBiometricsPage=new ApplicantBiometricsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + applicantBiometricsPage=new ApplicantBiometricsPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + applicantBiometricsPage=new ApplicantBiometricsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + applicantBiometricsPage=new ApplicantBiometricsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + applicantBiometricsPage=new ApplicantBiometricsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + applicantBiometricsPage=new ApplicantBiometricsPageArabic(driver); + } + if(FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isIrisScan(),"Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //righthand + if(FetchUiSpec.rightHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnRightHandScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //lefthand + if(FetchUiSpec.leftHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnLeftHandScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //thumb + if(FetchUiSpec.thumb.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + applicantBiometricsPage=biometricDetailsPage.clickOnThumbsScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + biometricDetailsPage=applicantBiometricsPage.clickOnBackButton(); + } + //face + if(FetchUiSpec.face.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnFaceScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplyed(),"Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isFaceScan(),"Verify if face scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnBackButton(); + } + + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(),"Verify if biometric details page is displayed"); + biometricDetailsPage.clickOnContinueButton(); + } + else if(screen.equals("Documents")) { + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + documentuploadPage=new DocumentuploadPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + documentuploadPage=new DocumentUploadPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + documentuploadPage=new DocumentUploadPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + documentuploadPage=new DocumentuploadPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + documentuploadPage=new DocumentuploadPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + documentuploadPage=new DocumentuploadPageArabic(driver); + } + documentuploadPage.clickOnContinueButton(); + } + } + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + previewPage=new PreviewPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + previewPage=new PreviewPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + previewPage=new PreviewPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + previewPage=new PreviewPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + previewPage=new PreviewPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + previewPage=new PreviewPageArabic(driver); + } + assertTrue(previewPage.updateUINTitleDisplayed(),"Verify if new update uin title is displayed"); + assertTrue(previewPage.isApplicationIDPreviewPagePageDisplayed(),"Verify if application ID In PreviewPage is displayed"); + assertTrue(previewPage.isDemographicInformationInPreviewPageDisplayed(),"Verify if Demographic Information In PreviewPage is displayed"); + assertTrue(previewPage.isDocumentsInformationInPreviewPageDisplayed(),"Verify if Documents Information In PreviewPage is displayed"); + assertTrue(previewPage.isBiometricsInformationInPreviewPagePageDisplayed(),"Verify if Biometrics Information In PreviewPage is displayed"); + String Aid=previewPage.getAID(); + previewPage.clickOnContinueButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + authenticationPage=new AuthenticationPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + authenticationPage=new AuthenticationPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + authenticationPage=new AuthenticationPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + authenticationPage=new AuthenticationPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + authenticationPage=new AuthenticationPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + authenticationPage=new AuthenticationPageArabic(driver); + } + assertTrue(authenticationPage.isAuthenticationPageDisplayed(),"Verify if authentication details page is displayed"); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ConfigManager.getIAMUsersPassword()); + authenticationPage.clickOnAuthenticatenButton(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + acknowledgementPage=new AcknowledgementPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + acknowledgementPage=new AcknowledgementPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + acknowledgementPage=new AcknowledgementPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + acknowledgementPage=new AcknowledgementPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + acknowledgementPage=new AcknowledgementPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + acknowledgementPage=new AcknowledgementPageArabic(driver); + } + assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(),"Verify if acknowledgement details page is displayed"); + // assertTrue(acknowledgementPage.isQrCodeImageDisplayed(),"Verify if qr code image is displayed"); + + acknowledgementPage.clickOnGoToHomeButton(); + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(),"Verify if registration tasks page is loaded"); + registrationTasksPage.clickOnOperationalTasksTitle(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + operationalTaskPage=new OperationalTaskPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + operationalTaskPage=new OperationalTaskPageHindi(driver); + + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + operationalTaskPage=new OperationalTaskPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + operationalTaskPage=new OperationalTaskPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + operationalTaskPage=new OperationalTaskPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + operationalTaskPage=new OperationalTaskPageArabic(driver); + } + assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + pendingApproval=new PendingApprovalEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + pendingApproval=new PendingApprovalHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + pendingApproval=new PendingApprovalFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + pendingApproval=new PendingApprovalKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + pendingApproval=new PendingApprovalTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + pendingApproval=new PendingApprovalArabic(driver); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.clickOnAID(Aid); + + assertTrue(pendingApproval.isApprovalButtonDisplayed(), "Verify if approval button displayed"); + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed after approving packet"); + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + pendingApproval.clickOnSubmitButton(); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), "Verify if Supervisor Authentication page displayed"); + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); + assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), "Verify if application upload tite displayed"); + + operationalTaskPage.clickApplicationUploadTitle(); + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + manageApplicationsPage=new ManageApplicationsPageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + manageApplicationsPage=new ManageApplicationsPageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + manageApplicationsPage=new ManageApplicationsPageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + manageApplicationsPage=new ManageApplicationsPageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + manageApplicationsPage=new ManageApplicationsPageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + manageApplicationsPage=new ManageApplicationsPageArabic(driver); + } + assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), "Verify if manage Applications Page displayed"); + manageApplicationsPage.enterAID(Aid); + + assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if packet is approved after approve in pending approval"); + + manageApplicationsPage.clickOnSearchCheckBox(); + manageApplicationsPage.clickOnUploadButton(); + + //assertTrue(manageApplicationsPage.isPacketUploadDone(Aid), "Verify if packet upload is done"); + manageApplicationsPage.clickOnBackButton(); + + assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); + registrationTasksPage.clickProfileButton(); + + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { + profilePage=new ProfilePageEnglish(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + profilePage=new ProfilePageHindi(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ + profilePage=new ProfilePageFrench(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + profilePage=new ProfilePageKannada(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ + profilePage=new ProfilePageTamil(driver); + } + else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ + profilePage=new ProfilePageArabic(driver); + } + //assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + profilePage.clickOnLogoutButton(); + + profilePage.clickOnLogoutButton(); + + assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded in Selected language"); + + } + +} diff --git a/uitest-regclient/src/test/java/androidTestCases/logintest.java b/uitest-regclient/src/main/java/regclient/androidTestCases/logintest.java similarity index 58% rename from uitest-regclient/src/test/java/androidTestCases/logintest.java rename to uitest-regclient/src/main/java/regclient/androidTestCases/logintest.java index 9a4e5654d..d71e6025d 100644 --- a/uitest-regclient/src/test/java/androidTestCases/logintest.java +++ b/uitest-regclient/src/main/java/regclient/androidTestCases/logintest.java @@ -1,11 +1,14 @@ -package androidTestCases; +package regclient.androidTestCases; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import org.testng.annotations.Test; -import BaseTest.AndroidBaseTest; +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ConfigManager; +import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; import regclient.page.BasePage; import regclient.page.DashboardPage; import regclient.page.LoginPage; @@ -65,36 +68,13 @@ import regclient.pages.tamil.SupervisorBiometricVerificationpageTamil; import regclient.pages.tamil.UpdateOperatorBiometricspageTamil; import regclient.utils.TestDataReader; - +@Test public class logintest extends AndroidBaseTest { - @Test - public void initallLaunch() { - BasePage.disableAutoRotation(); - LoginPageEnglish loginPage= new LoginPageEnglish(driver); - - assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), "verify if the welcome msg in selected language displayed"); - loginPage.enterUserName(TestDataReader.readData("username")); - - assertTrue(loginPage.isNextButtonEnabled(), "verify if the next button enabled"); - loginPage.clickOnNextButton(); - - assertTrue(loginPage.isBackButtonDisplayed(), "Verify if back button is displayed"); - assertTrue(loginPage.isForgetOptionDisplayed(), "Verify if forget password option is displayed"); - assertTrue(loginPage.isPasswordHeaderDisplayed(), "Verify if the password input box header displayed"); - loginPage.enterPassword(TestDataReader.readData("password")); - - assertTrue(loginPage.isLoginButtonEnabled(), "Verify if the login button enabled"); - loginPage.clickOnloginButton(); - - assertTrue(loginPage.isSyncCompletedSuccessfullyMessageDisplayed(), "Verify if the sync is completed"); - - } - @Test - public void loginTest() { + @Test(priority=0) + public void ALoginTest() { BasePage.disableAutoRotation(); LoginPage loginPage=null; - OnBoardPage onBoardPage=null; OperationalTaskPage operationalTaskPage=null; RegistrationTasksPage registrationTasksPage=null; DashboardPage dashboardPage=null; @@ -124,15 +104,15 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded"); assertTrue(loginPage.isMosipLogoDisplayed(),"verify if mosip logo is displayeded"); assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(),"Verify if welcome note \"welcome to community registration client!\" message should be displayeded."); - assertTrue(loginPage.isHelpButtonDisplayed(),"Verify if check help button on the top right of the page"); - loginPage.enterUserName(TestDataReader.readData("nonRegisteredUsername")); + //assertTrue(loginPage.isHelpButtonDisplayed(),"Verify if check help button on the top right of the page"); + loginPage.enterUserName(KeycloakUserManager.onboardUser); assertTrue(loginPage.isNextButtonEnabled(),"verify if the next button enabled"); loginPage.clickOnNextButton(); assertTrue(loginPage.isUserNotFoundErrorMessageDisplayed(),"verify if error message should be displayeded as “user not found”"); - - loginPage.enterUserName(TestDataReader.readData("onBoardUsername")); + + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); assertTrue(loginPage.isNextButtonEnabled(),"verify if the next button enabled"); loginPage.clickOnNextButton(); @@ -143,7 +123,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(loginPage.isPasswordHeaderDisplayed(), "Verify if the password input box header displayed"); - loginPage.enterPassword(TestDataReader.readData("InvalidPassword")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()+"123"); assertTrue(loginPage.isLoginButtonEnabled(),"Verify if the login button enabled"); loginPage.clickOnloginButton(); @@ -152,34 +132,15 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage.clickOnBackButton(); assertTrue(loginPage.isUserNameHeaderDisplayed(),"Verify if the username input box header displayed"); - loginPage.enterUserName(TestDataReader.readData("onBoardUsername")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); assertTrue(loginPage.isNextButtonEnabled(),"verify if the next button enabled"); loginPage.clickOnNextButton(); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); assertTrue(loginPage.isLoginButtonEnabled(),"Verify if the login button enabled"); loginPage.clickOnloginButton(); - if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { - onBoardPage=new OnBoardPageEnglish(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - onBoardPage=new OnBoardPageHindi(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ - onBoardPage=new OnBoardPageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ - onBoardPage=new OnBoardPageKannada(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ - onBoardPage=new OnBoardPageTamil(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - onBoardPage=new OnBoardPageArabic(driver); - } - onBoardPage.clickOnSkipToHomeScreen(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); } @@ -200,6 +161,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ registrationTasksPage=new RegistrationTasksPageArabic(driver); } assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); + // assertTrue(registrationTasksPage.isUpdateUINTitleDisplayed(), "Verify if update uin title display"); + // + // assertTrue(registrationTasksPage.isLostUINTitleDisplayed(), "Verify if lost uin title display"); + // assertTrue(registrationTasksPage.isBiometricCorrectionTitleDisplayed(), "Verify if biometric correction title display "); registrationTasksPage.clickOnOperationalTasksTitle(); if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { @@ -253,10 +218,10 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(dashboardPage.isUserIDDisplayed(),"Verify if user ID displayed"); assertTrue(dashboardPage.isUserNameDisplayed(),"Verify if user name displayed"); assertTrue(dashboardPage.isStatusTitleDisplayed(),"Verify if status displayed"); - + assertTrue(registrationTasksPage.isProfileTitleDisplayed(),"Verify if profile title display on homepage"); registrationTasksPage.clickProfileButton(); - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { profilePage=new ProfilePageEnglish(driver); } @@ -275,17 +240,17 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ profilePage=new ProfilePageArabic(driver); } - assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); + // assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title display on Profilepage"); profilePage.clickOnLogoutButton(); - + profilePage.clickOnLogoutButton(); - + assertTrue(loginPage.isLoginPageLoaded(),"verify if login page is displayeded in Selected language"); } - @Test - public void getOnBoard() { + @Test(priority=1) + public void OnBoardTest() { BasePage.disableAutoRotation(); LoginPage loginPage=null; OnBoardPage onBoardPage=null; @@ -312,7 +277,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage.selectLanguage(); assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), "verify if the welcome msg in selected language displayed"); - loginPage.enterUserName(TestDataReader.readData("onBoardUsername")); + loginPage.enterUserName(KeycloakUserManager.onboardUser); assertTrue(loginPage.isNextButtonEnabled(), "verify if the next button enabled"); loginPage.clickOnNextButton(); @@ -320,7 +285,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(loginPage.isBackButtonDisplayed(), "Verify if back button is displayed"); assertTrue(loginPage.isForgetOptionDisplayed(), "Verify if forget password option is displayed"); assertTrue(loginPage.isPasswordHeaderDisplayed(), "Verify if the password input box header displayed"); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); assertTrue(loginPage.isLoginButtonEnabled(), "Verify if the login button enabled"); loginPage.clickOnloginButton(); @@ -344,7 +309,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ onBoardPage=new OnBoardPageArabic(driver); } assertTrue(onBoardPage.isGetOnBoardTitleDisplayed(), "Verify if on board page is loaded"); - assertTrue(onBoardPage.isHelpButtonDisplayed(), "Verify if help button is displayed"); + //assertTrue(onBoardPage.isHelpButtonDisplayed(), "Verify if help button is displayed"); assertTrue(onBoardPage.isOnBoardWelcomeMessageDisplayed(), "Verify if on board page hello message is loaded"); onBoardPage.clickOnGetOnBoardTitle(); @@ -367,120 +332,130 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ supervisorBiometricVerificationpage=new SupervisorBiometricVerificationpageArabic(driver); } assertTrue(supervisorBiometricVerificationpage.isSupervisorBiometricVerificationPageLoaded(), "Verify if operational tasks page is loaded"); - supervisorBiometricVerificationpage.clickOnIrisScan();; - - supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); + if(FetchUiSpec.eye.equals("yes")) { + supervisorBiometricVerificationpage.clickOnIrisScan();; - assertTrue(supervisorBiometricVerificationpage.isExceptionTypeTitleDisplyed(),"Verify if mark exception is displayed"); - supervisorBiometricVerificationpage.markOneEyeException(); + supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); - // assertFalse(supervisorBiometricVerificationpage.isZoomButtonDisplyed(),"Verify if zoom button is not displayed for iris"); - supervisorBiometricVerificationpage.clickOnExceptionTypeTemporaryButton(); + assertTrue(supervisorBiometricVerificationpage.isExceptionTypeTitleDisplyed(),"Verify if mark exception is displayed"); + supervisorBiometricVerificationpage.markOneEyeException(); - assertTrue(supervisorBiometricVerificationpage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); - // supervisorBiometricVerificationpage.enterCommentsInTextBox(TestDataReader.readData("comments")); + supervisorBiometricVerificationpage.clickOnExceptionTypeTemporaryButton(); + assertTrue(supervisorBiometricVerificationpage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); - supervisorBiometricVerificationpage.clickOnIrisScanTitle(); - supervisorBiometricVerificationpage.clickOnScanButton(); + supervisorBiometricVerificationpage.clickOnIrisScanTitle(); + supervisorBiometricVerificationpage.clickOnScanButton(); - assertTrue(supervisorBiometricVerificationpage.isIrisScan(),"Verify if iris scan 1st attempt"); - supervisorBiometricVerificationpage.closeScanCapturePopUp(); + assertTrue(supervisorBiometricVerificationpage.isIrisScan(),"Verify if iris scan 1st attempt"); + supervisorBiometricVerificationpage.closeScanCapturePopUp(); - assertTrue(supervisorBiometricVerificationpage.isIrisScanQualityDisplyed(),"Verify if iris scan threshold , Quality displayed"); - assertTrue(supervisorBiometricVerificationpage.checkThresholdValueIris(),"Verify if biometric score exceeds/meets the threshold for iris"); + assertTrue(supervisorBiometricVerificationpage.isIrisScanQualityDisplyed(),"Verify if iris scan threshold , Quality displayed"); + assertTrue(supervisorBiometricVerificationpage.checkThresholdValueIris(),"Verify if biometric score exceeds/meets the threshold for iris"); - supervisorBiometricVerificationpage.clickOnNextButton(); + supervisorBiometricVerificationpage.clickOnBackButton(); + } //righthand + if(FetchUiSpec.rightHand.equals("yes")) { + supervisorBiometricVerificationpage.clickOnRightHandScanIcon(); - assertTrue(supervisorBiometricVerificationpage.isRightHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); - supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); + assertTrue(supervisorBiometricVerificationpage.isRightHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); + supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); - assertTrue(supervisorBiometricVerificationpage.isZoomButtonDisplyed(),"Verify if zoom button is displayed"); - supervisorBiometricVerificationpage.clickOnRightHandScanTitle(); - supervisorBiometricVerificationpage.clickOnScanButton(); + assertTrue(supervisorBiometricVerificationpage.isZoomButtonDisplyed(),"Verify if zoom button is displayed"); + supervisorBiometricVerificationpage.clickOnRightHandScanTitle(); + supervisorBiometricVerificationpage.clickOnScanButton(); - assertTrue(supervisorBiometricVerificationpage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - supervisorBiometricVerificationpage.closeScanCapturePopUp(); + assertTrue(supervisorBiometricVerificationpage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + supervisorBiometricVerificationpage.closeScanCapturePopUp(); - assertTrue(supervisorBiometricVerificationpage.isRightHandScanQualityDisplyed(),"Verify if right hand scan threshold , Quality displayed"); - assertTrue(supervisorBiometricVerificationpage.checkThresholdValueRightHand(),"Verify if biometric score exceeds/meets the threshold for right hand"); + assertTrue(supervisorBiometricVerificationpage.isRightHandScanQualityDisplyed(),"Verify if right hand scan threshold , Quality displayed"); + assertTrue(supervisorBiometricVerificationpage.checkThresholdValueRightHand(),"Verify if biometric score exceeds/meets the threshold for right hand"); - supervisorBiometricVerificationpage.clickOnNextButton(); + supervisorBiometricVerificationpage.clickOnBackButton(); + } //lefthand + if(FetchUiSpec.leftHand.equals("yes")) { + supervisorBiometricVerificationpage.clickOnLeftHandScanIcon(); + assertTrue(supervisorBiometricVerificationpage.isLeftHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); + supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); - assertTrue(supervisorBiometricVerificationpage.isLeftHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); - supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); + assertTrue(supervisorBiometricVerificationpage.isZoomButtonDisplyed(),"Verify if zoom button is displayed"); + supervisorBiometricVerificationpage.clickOnleftHandScanTitle(); + supervisorBiometricVerificationpage.clickOnScanButton(); - assertTrue(supervisorBiometricVerificationpage.isZoomButtonDisplyed(),"Verify if zoom button is displayed"); - supervisorBiometricVerificationpage.clickOnleftHandScanTitle(); - supervisorBiometricVerificationpage.clickOnScanButton(); + assertTrue(supervisorBiometricVerificationpage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + supervisorBiometricVerificationpage.closeScanCapturePopUp(); - assertTrue(supervisorBiometricVerificationpage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - supervisorBiometricVerificationpage.closeScanCapturePopUp(); + assertTrue(supervisorBiometricVerificationpage.isLeftHandScanQualityDisplyed(),"Verify if left hand scan threshold , Quality displayed"); + assertTrue(supervisorBiometricVerificationpage.checkThresholdValueLeftHand(),"Verify if biometric score exceeds/meets the threshold for left hand"); - assertTrue(supervisorBiometricVerificationpage.isLeftHandScanQualityDisplyed(),"Verify if left hand scan threshold , Quality displayed"); - assertTrue(supervisorBiometricVerificationpage.checkThresholdValueLeftHand(),"Verify if biometric score exceeds/meets the threshold for left hand"); - - supervisorBiometricVerificationpage.clickOnNextButton(); + supervisorBiometricVerificationpage.clickOnBackButton(); + } //thumbs + if(FetchUiSpec.thumb.equals("yes")) { + supervisorBiometricVerificationpage.clickOnThumbsScanIcon(); + assertTrue(supervisorBiometricVerificationpage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); - assertTrue(supervisorBiometricVerificationpage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); + assertTrue(supervisorBiometricVerificationpage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + supervisorBiometricVerificationpage.markOneFingureException(); - assertTrue(supervisorBiometricVerificationpage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - supervisorBiometricVerificationpage.markOneFingureException(); + // assertFalse(supervisorBiometricVerificationpage.isZoomButtonDisplyed(),"Verify if zoom button is not displayed for thumb"); + supervisorBiometricVerificationpage.clickOnExceptionTypeTemporaryButton(); - // assertFalse(supervisorBiometricVerificationpage.isZoomButtonDisplyed(),"Verify if zoom button is not displayed for thumb"); - supervisorBiometricVerificationpage.clickOnExceptionTypeTemporaryButton(); + assertTrue(supervisorBiometricVerificationpage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); + // supervisorBiometricVerificationpage.enterCommentsInTextBox(TestDataReader.readData("comments")); - assertTrue(supervisorBiometricVerificationpage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); - // supervisorBiometricVerificationpage.enterCommentsInTextBox(TestDataReader.readData("comments")); + supervisorBiometricVerificationpage.clickOnThumbsScanTitle(); + supervisorBiometricVerificationpage.clickOnScanButton(); - supervisorBiometricVerificationpage.clickOnThumbsScanTitle(); - supervisorBiometricVerificationpage.clickOnScanButton(); + assertTrue(supervisorBiometricVerificationpage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + supervisorBiometricVerificationpage.closeScanCapturePopUp(); - assertTrue(supervisorBiometricVerificationpage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - supervisorBiometricVerificationpage.closeScanCapturePopUp(); + assertTrue(supervisorBiometricVerificationpage.isThumbsScanQualityDisplyed(),"Verify if thumbs scan threshold , Quality displayed"); + assertTrue(supervisorBiometricVerificationpage.checkThresholdValueThumbs(),"Verify if biometric score exceeds/meets the threshold for thumbs"); + //menu - assertTrue(supervisorBiometricVerificationpage.isThumbsScanQualityDisplyed(),"Verify if thumbs scan threshold , Quality displayed"); - assertTrue(supervisorBiometricVerificationpage.checkThresholdValueThumbs(),"Verify if biometric score exceeds/meets the threshold for thumbs"); - //menu - - supervisorBiometricVerificationpage.clickOnNextButton(); - //face - assertTrue(supervisorBiometricVerificationpage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); + supervisorBiometricVerificationpage.clickOnBackButton(); + } + if(FetchUiSpec.face.equals("yes")) { + supervisorBiometricVerificationpage.clickOnFaceScanIcon(); - assertTrue(supervisorBiometricVerificationpage.isMarkingExceptionsOnFaceIsNotAllowedTextDisplyed(),"Verify if is Marking Exceptions On Face Is Not Allowed Text Displyed"); - supervisorBiometricVerificationpage.clickOnFaceScanTitle(); - supervisorBiometricVerificationpage.clickOnScanButton(); + //face + assertTrue(supervisorBiometricVerificationpage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); + supervisorBiometricVerificationpage.clickOnMarkExceptionButton(); - assertTrue(supervisorBiometricVerificationpage.isFaceScan(),"Verify if face scan 1st attempt"); - supervisorBiometricVerificationpage.closeScanCapturePopUp(); + assertTrue(supervisorBiometricVerificationpage.isMarkingExceptionsOnFaceIsNotAllowedTextDisplyed(),"Verify if is Marking Exceptions On Face Is Not Allowed Text Displyed"); + supervisorBiometricVerificationpage.clickOnFaceScanTitle(); + supervisorBiometricVerificationpage.clickOnScanButton(); - assertTrue(supervisorBiometricVerificationpage.isFaceScanQualityDisplyed(),"Verify if face scan threshold , Quality displayed"); - assertTrue(supervisorBiometricVerificationpage.checkThresholdValueFace(),"Verify if biometric score exceeds/meets the threshold for face"); - supervisorBiometricVerificationpage.clickOnNextButton(); + assertTrue(supervisorBiometricVerificationpage.isFaceScan(),"Verify if face scan 1st attempt"); + supervisorBiometricVerificationpage.closeScanCapturePopUp(); + + assertTrue(supervisorBiometricVerificationpage.isFaceScanQualityDisplyed(),"Verify if face scan threshold , Quality displayed"); + assertTrue(supervisorBiometricVerificationpage.checkThresholdValueFace(),"Verify if biometric score exceeds/meets the threshold for face"); + supervisorBiometricVerificationpage.clickOnBackButton(); + } assertTrue(supervisorBiometricVerificationpage.isSupervisorBiometricVerificationPageLoaded(), "Verify if operational tasks page is loaded"); assertTrue(supervisorBiometricVerificationpage.isVerifyAndSaveButtonEnabled(), "Verify if verify and save button is display and enable"); assertFalse(supervisorBiometricVerificationpage.isExceptionScanTitleDisplyed(),"Verify if exception scan icon is displayed"); supervisorBiometricVerificationpage.clickOnVerifyAndSaveButton(); - - assertTrue(supervisorBiometricVerificationpage.isDismissPageLoaded(),"Verify if dismiss page is displayed"); + + assertTrue(supervisorBiometricVerificationpage.isDismissPageLoaded(),"Verify if dismiss page is displayed after click on verfiy and save button "); assertTrue(supervisorBiometricVerificationpage.isOperatorOnboardedPopupLoaded(),"Verify if operator biometrics updated success message is displayed"); supervisorBiometricVerificationpage.clickOnHomeButton(); - + } - - @Test + + @Test(priority=2) public void updateOperatorBiometrics() { BasePage.disableAutoRotation(); LoginPage loginPage=null; OperationalTaskPage operationalTaskPage=null; RegistrationTasksPage registrationTasksPage=null; UpdateOperatorBiometricspage UpdateOperatorBiometricspage=null; - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { loginPage = new LoginPageEnglish(driver); } @@ -502,7 +477,7 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ loginPage.selectLanguage(); assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), "verify if the welcome msg in selected language displayed"); - loginPage.enterUserName(TestDataReader.readData("username")); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); assertTrue(loginPage.isNextButtonEnabled(), "verify if the next button enabled"); loginPage.clickOnNextButton(); @@ -510,11 +485,11 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ assertTrue(loginPage.isBackButtonDisplayed(), "Verify if back button is displayed"); assertTrue(loginPage.isForgetOptionDisplayed(), "Verify if forget password option is displayed"); assertTrue(loginPage.isPasswordHeaderDisplayed(), "Verify if the password input box header displayed"); - loginPage.enterPassword(TestDataReader.readData("password")); + loginPage.enterPassword(ConfigManager.getIAMUsersPassword()); assertTrue(loginPage.isLoginButtonEnabled(), "Verify if the login button enabled"); loginPage.clickOnloginButton(); - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { registrationTasksPage=new RegistrationTasksPageEnglish(driver); } @@ -558,148 +533,160 @@ else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ } assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); operationalTaskPage.clickOnUpdateOperatorBiometricsButton(); - + if(TestDataReader.readData("language").equalsIgnoreCase("eng")) { UpdateOperatorBiometricspage=new UpdateOperatorBiometricspageEnglish(driver); } - else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ - UpdateOperatorBiometricspage=new UpdateOperatorBiometricspageHindi(driver); + else if(TestDataReader.readData("language").equalsIgnoreCase("hin")){ + UpdateOperatorBiometricspage=new UpdateOperatorBiometricspageHindi(driver); } else if(TestDataReader.readData("language").equalsIgnoreCase("fra")){ UpdateOperatorBiometricspage=new UpdateOperatorBiometricspageFrench(driver); - } - else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ + } + else if(TestDataReader.readData("language").equalsIgnoreCase("kan")){ UpdateOperatorBiometricspage=new UpdateOperatorBiometricspageKannada(driver); } else if(TestDataReader.readData("language").equalsIgnoreCase("tam")){ UpdateOperatorBiometricspage=new UpdateOperatorBiometricspageTamil(driver); } else if(TestDataReader.readData("language").equalsIgnoreCase("ara")){ - UpdateOperatorBiometricspage=new UpdateOperatorBiometricspageArabic(driver); - } + UpdateOperatorBiometricspage=new UpdateOperatorBiometricspageArabic(driver); + } assertTrue(UpdateOperatorBiometricspage.isSupervisorBiometricUpdatePageLoaded(), "Verify if supervisor biometric update page is loaded"); - UpdateOperatorBiometricspage.clickOnIrisScan(); - - UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); + if(FetchUiSpec.eye.equals("yes")) { + UpdateOperatorBiometricspage.clickOnIrisScan(); - assertTrue(UpdateOperatorBiometricspage.isExceptionTypeTitleDisplyed(),"Verify if mark exception is displayed"); - UpdateOperatorBiometricspage.markOneEyeException(); + UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); - // assertFalse(UpdateOperatorBiometricspage.isZoomButtonDisplyed(),"Verify if zoom button is not displayed for iris"); - UpdateOperatorBiometricspage.clickOnExceptionTypeTemporaryButton(); + assertTrue(UpdateOperatorBiometricspage.isExceptionTypeTitleDisplyed(),"Verify if mark exception is displayed"); + UpdateOperatorBiometricspage.markOneEyeException(); + UpdateOperatorBiometricspage.clickOnExceptionTypeTemporaryButton(); - assertTrue(UpdateOperatorBiometricspage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); - // UpdateOperatorBiometricspage.enterCommentsInTextBox(TestDataReader.readData("comments")); + assertTrue(UpdateOperatorBiometricspage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); - UpdateOperatorBiometricspage.clickOnIrisScanTitle(); - UpdateOperatorBiometricspage.clickOnScanButton(); + UpdateOperatorBiometricspage.clickOnIrisScanTitle(); + UpdateOperatorBiometricspage.clickOnScanButton(); - assertTrue(UpdateOperatorBiometricspage.isIrisScan(),"Verify if iris scan 1st attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); + assertTrue(UpdateOperatorBiometricspage.isIrisScan(),"Verify if iris scan 1st attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); - assertTrue(UpdateOperatorBiometricspage.isIrisScanQualityDisplyed(),"Verify if iris scan threshold , Quality displayed"); - assertTrue(UpdateOperatorBiometricspage.checkThresholdValueIris(),"Verify if biometric score exceeds/meets the threshold for iris"); + assertTrue(UpdateOperatorBiometricspage.isIrisScanQualityDisplyed(),"Verify if iris scan threshold , Quality displayed"); + assertTrue(UpdateOperatorBiometricspage.checkThresholdValueIris(),"Verify if biometric score exceeds/meets the threshold for iris"); - UpdateOperatorBiometricspage.clickOnNextButton(); + UpdateOperatorBiometricspage.clickOnBackButton(); + } + if(FetchUiSpec.rightHand.equals("yes")) { + UpdateOperatorBiometricspage.clickOnRightHandScanIcon(); - //righthand - assertTrue(UpdateOperatorBiometricspage.isRightHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); - UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); + //righthand + assertTrue(UpdateOperatorBiometricspage.isRightHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); + UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); - assertTrue(UpdateOperatorBiometricspage.isZoomButtonDisplyed(),"Verify if zoom button is displayed"); - UpdateOperatorBiometricspage.clickOnRightHandScanTitle(); - UpdateOperatorBiometricspage.clickOnScanButton(); + assertTrue(UpdateOperatorBiometricspage.isZoomButtonDisplyed(),"Verify if zoom button is displayed"); + UpdateOperatorBiometricspage.clickOnRightHandScanTitle(); + UpdateOperatorBiometricspage.clickOnScanButton(); - assertTrue(UpdateOperatorBiometricspage.isRightHandScan(),"Verify if right hand scan 1st attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); + assertTrue(UpdateOperatorBiometricspage.isRightHandScan(),"Verify if right hand scan 1st attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); - assertTrue(UpdateOperatorBiometricspage.isRightHandScanQualityDisplyed(),"Verify if right hand scan threshold , Quality displayed"); - assertTrue(UpdateOperatorBiometricspage.checkThresholdValueRightHand(),"Verify if biometric score exceeds/meets the threshold for right hand"); + assertTrue(UpdateOperatorBiometricspage.isRightHandScanQualityDisplyed(),"Verify if right hand scan threshold , Quality displayed"); + assertTrue(UpdateOperatorBiometricspage.checkThresholdValueRightHand(),"Verify if biometric score exceeds/meets the threshold for right hand"); - UpdateOperatorBiometricspage.clickOnNextButton(); + UpdateOperatorBiometricspage.clickOnBackButton(); + } //lefthand + if(FetchUiSpec.leftHand.equals("yes")) { + UpdateOperatorBiometricspage.clickOnLeftHandScanIcon(); - assertTrue(UpdateOperatorBiometricspage.isLeftHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); - UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); + assertTrue(UpdateOperatorBiometricspage.isLeftHandScanTitleDisplyed(),"Verify if applicant right hand scan is displayed"); + UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); - assertTrue(UpdateOperatorBiometricspage.isZoomButtonDisplyed(),"Verify if zoom button is displayed"); - UpdateOperatorBiometricspage.clickOnLeftHandScanTitle(); - UpdateOperatorBiometricspage.clickOnScanButton(); + assertTrue(UpdateOperatorBiometricspage.isZoomButtonDisplyed(),"Verify if zoom button is displayed"); + UpdateOperatorBiometricspage.clickOnLeftHandScanTitle(); + UpdateOperatorBiometricspage.clickOnScanButton(); - assertTrue(UpdateOperatorBiometricspage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); + assertTrue(UpdateOperatorBiometricspage.isLeftHandScan(),"Verify if Left hand scan 1st attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); - assertTrue(UpdateOperatorBiometricspage.isLeftHandScanQualityDisplyed(),"Verify if left hand scan threshold , Quality displayed"); - assertTrue(UpdateOperatorBiometricspage.checkThresholdValueLeftHand(),"Verify if biometric score exceeds/meets the threshold for left hand"); + assertTrue(UpdateOperatorBiometricspage.isLeftHandScanQualityDisplyed(),"Verify if left hand scan threshold , Quality displayed"); + assertTrue(UpdateOperatorBiometricspage.checkThresholdValueLeftHand(),"Verify if biometric score exceeds/meets the threshold for left hand"); - UpdateOperatorBiometricspage.clickOnNextButton(); + UpdateOperatorBiometricspage.clickOnBackButton(); + } //thumbs + if(FetchUiSpec.thumb.equals("yes")) { + UpdateOperatorBiometricspage.clickOnThumbsScanIcon(); + + assertTrue(UpdateOperatorBiometricspage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); + UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); - assertTrue(UpdateOperatorBiometricspage.isThumbsScanTitleDisplyed(),"Verify if thumbs scan page is displayed"); - UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); + assertTrue(UpdateOperatorBiometricspage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); + UpdateOperatorBiometricspage.markOneFingureException(); - assertTrue(UpdateOperatorBiometricspage.isExceptionTypeTitleDisplyed(),"Verify if applicant biometric mark exception is displayed"); - UpdateOperatorBiometricspage.markOneFingureException(); + // assertFalse(UpdateOperatorBiometricspage.isZoomButtonDisplyed(),"Verify if zoom button is not displayed for thumb"); + UpdateOperatorBiometricspage.clickOnExceptionTypeTemporaryButton(); - // assertFalse(UpdateOperatorBiometricspage.isZoomButtonDisplyed(),"Verify if zoom button is not displayed for thumb"); - UpdateOperatorBiometricspage.clickOnExceptionTypeTemporaryButton(); + assertTrue(UpdateOperatorBiometricspage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); + // UpdateOperatorBiometricspage.enterCommentsInTextBox(TestDataReader.readData("comments")); - assertTrue(UpdateOperatorBiometricspage.isCommentHeaderDisplyed(),"Verify if Comments header is displayed"); - // UpdateOperatorBiometricspage.enterCommentsInTextBox(TestDataReader.readData("comments")); + UpdateOperatorBiometricspage.clickOnThumbsScanTitle(); + UpdateOperatorBiometricspage.clickOnScanButton(); - UpdateOperatorBiometricspage.clickOnThumbsScanTitle(); - UpdateOperatorBiometricspage.clickOnScanButton(); + assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); - assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 1st attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); - - UpdateOperatorBiometricspage.clickOnScanButton(); + UpdateOperatorBiometricspage.clickOnScanButton(); - assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 2nd attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); - - UpdateOperatorBiometricspage.clickOnScanButton(); + assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 2nd attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); - assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 3rd attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); - - UpdateOperatorBiometricspage.clickOnScanButton(); + UpdateOperatorBiometricspage.clickOnScanButton(); - assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 4th attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); - - - UpdateOperatorBiometricspage.clickOnScanButton(); + assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 3rd attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); - assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 5th attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); + UpdateOperatorBiometricspage.clickOnScanButton(); - assertTrue(UpdateOperatorBiometricspage.isThumbsScanQualityDisplyed(),"Verify if thumbs scan threshold , Quality displayed"); - assertTrue(UpdateOperatorBiometricspage.checkThresholdValueThumbs(),"Verify if biometric score exceeds/meets the threshold for thumbs"); - UpdateOperatorBiometricspage.clickOnNextButton(); + assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 4th attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); + + + UpdateOperatorBiometricspage.clickOnScanButton(); + + assertTrue(UpdateOperatorBiometricspage.isThumbsScan(),"Verify if thumbs scan 5th attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); + + assertTrue(UpdateOperatorBiometricspage.isThumbsScanQualityDisplyed(),"Verify if thumbs scan threshold , Quality displayed"); + assertTrue(UpdateOperatorBiometricspage.checkThresholdValueThumbs(),"Verify if biometric score exceeds/meets the threshold for thumbs"); + UpdateOperatorBiometricspage.clickOnBackButton(); + } //face - assertTrue(UpdateOperatorBiometricspage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); - UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); + if(FetchUiSpec.face.equals("yes")) { + UpdateOperatorBiometricspage.clickOnFaceScanIcon(); - assertTrue(UpdateOperatorBiometricspage.isMarkingExceptionsOnFaceIsNotAllowedTextDisplyed(),"Verify if is Marking Exceptions On Face Is Not Allowed Text Displyed"); - UpdateOperatorBiometricspage.clickOnFaceScanTitle(); - UpdateOperatorBiometricspage.clickOnScanButton(); + assertTrue(UpdateOperatorBiometricspage.isFaceScanTitleDisplyed(),"Verify if face scan page is displayed"); + UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); - assertTrue(UpdateOperatorBiometricspage.isFaceScan(),"Verify if face scan 1st attempt"); - UpdateOperatorBiometricspage.closeScanCapturePopUp(); + assertTrue(UpdateOperatorBiometricspage.isMarkingExceptionsOnFaceIsNotAllowedTextDisplyed(),"Verify if is Marking Exceptions On Face Is Not Allowed Text Displyed"); + UpdateOperatorBiometricspage.clickOnFaceScanTitle(); + UpdateOperatorBiometricspage.clickOnScanButton(); - assertTrue(UpdateOperatorBiometricspage.isFaceScanQualityDisplyed(),"Verify if face scan threshold , Quality displayed"); - assertTrue(UpdateOperatorBiometricspage.checkThresholdValueFace(),"Verify if biometric score exceeds/meets the threshold for face"); - UpdateOperatorBiometricspage.clickOnNextButton(); + assertTrue(UpdateOperatorBiometricspage.isFaceScan(),"Verify if face scan 1st attempt"); + UpdateOperatorBiometricspage.closeScanCapturePopUp(); + + assertTrue(UpdateOperatorBiometricspage.isFaceScanQualityDisplyed(),"Verify if face scan threshold , Quality displayed"); + assertTrue(UpdateOperatorBiometricspage.checkThresholdValueFace(),"Verify if biometric score exceeds/meets the threshold for face"); + UpdateOperatorBiometricspage.clickOnNextButton(); + } assertTrue(UpdateOperatorBiometricspage.isSupervisorBiometricUpdatePageLoaded(), "Verify if supervisor biometric update page is loaded"); assertTrue(UpdateOperatorBiometricspage.isVerifyAndSaveButtonEnabled(), "Verify if verify and save button is display and enable"); UpdateOperatorBiometricspage.clickOnVerifyAndSaveButton(); - - assertTrue(UpdateOperatorBiometricspage.isDismissPageLoaded(),"Verify if dismiss page is displayed"); + + assertTrue(UpdateOperatorBiometricspage.isDismissPageLoaded(),"Verify if dismiss page is displayed after click on verfiy and save button "); assertTrue(UpdateOperatorBiometricspage.isOperatorBiometricsUpdatedPopupLoaded(),"Verify if operator biometrics updated success message is displayed"); UpdateOperatorBiometricspage.clickOnHomeButton(); - + assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); } } diff --git a/uitest-regclient/src/main/java/regclient/api/AdminTestUtil.java b/uitest-regclient/src/main/java/regclient/api/AdminTestUtil.java new file mode 100644 index 000000000..a8640bfc8 --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/api/AdminTestUtil.java @@ -0,0 +1,205 @@ +package regclient.api; + +import io.restassured.response.Response; + +import org.apache.log4j.Logger; +import org.json.JSONArray; +import org.json.JSONObject; + +import javax.ws.rs.core.MediaType; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.TimeZone; + +public class AdminTestUtil extends BaseTestCase { + + private static final Logger logger = Logger.getLogger(AdminTestUtil.class); + public static String token; + public static final int OTP_CHECK_INTERVAL = 10000; + public static String tokenRoleIdRepo = "idrepo"; + public static String tokenRoleAdmin = "admin"; + public static boolean initialized = false; + private static String zoneMappingRequest = "/config/Authorization/zoneMappingRequest.json"; + + public static String getmachinespecificationsID(String role){ + String machineDetails= RestClient.getRequestWithCookie(ApplnURI + "/v1/masterdata/machinespecifications/all", MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, COOKIENAME, + new KernelAuthentication().getTokenByRole(role)).asString(); + + JSONObject jsonObject = new JSONObject(machineDetails); + + JSONObject responseObject = jsonObject.getJSONObject("response"); + JSONArray dataArray = responseObject.getJSONArray("data"); + + JSONObject firstItem = dataArray.getJSONObject(0); + String idValue = firstItem.getString("id"); + + return idValue; + } + + + + public static String generateCurrentUTCTimeStamp() { + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + return dateFormat.format(date); + } + + + public static String machinespecificationsID() { + return AdminTestUtil.getmachinespecificationsID(tokenRoleAdmin); + } + + + public static String creteaMachine(String signPublicKey, String publicKey ,String name) { + String token = kernelAuthLib.getTokenByRole("globalAdmin"); + JSONObject requestJson = new JSONObject(); + Response response = null; + requestJson.put("id", "string"); + requestJson.put("metadata", new JSONObject()); + requestJson.put("requesttime", AdminTestUtil.generateCurrentUTCTimeStamp()); + requestJson.put("version", "string"); + requestJson.put("request", new HashMap<>()); + requestJson.getJSONObject("request").put("id", "123"); + requestJson.getJSONObject("request").put("ipAddress", "192.168.0.424"); + requestJson.getJSONObject("request").put("isActive", true); + requestJson.getJSONObject("request").put("langCode", getLanguageList().get(0)); + requestJson.getJSONObject("request").put("macAddress", "11111111"); + requestJson.getJSONObject("request").put("machineSpecId", machinespecificationsID()); + requestJson.getJSONObject("request").put("name", name); + requestJson.getJSONObject("request").put("serialNum", "FB5962911687"); + requestJson.getJSONObject("request").put("regCenterId", propsKernel.getProperty("regCenterId")); + requestJson.getJSONObject("request").put("validityDateTime", "2021-12-24T05:52:46.758Z"); + requestJson.getJSONObject("request").put("publicKey", publicKey); + requestJson.getJSONObject("request").put("zoneCode", propsKernel.getProperty("zone")); + requestJson.getJSONObject("request").put("signPublicKey", signPublicKey); + + response = RestClient.postRequestWithCookie(BaseTestCase.ApplnURI + "/v1/masterdata/machines", requestJson.toString(), MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, BaseTestCase.COOKIENAME, token); + JSONObject responseJson = new JSONObject(response.asString()); + JSONObject responseobj = responseJson.getJSONObject("response"); + return responseobj.getString("id"); + } + + public static void initialize() { + if (!initialized) { + ConfigManager.init(); + BaseTestCase.initialize(); + KeycloakUserManager.createUsers(); + mapUserToZone(BaseTestCase.currentModule +"-"+propsKernel.getProperty("iam-users-to-create"),propsKernel.getProperty("zone")); + mapZone( BaseTestCase.currentModule +"-"+propsKernel.getProperty("iam-users-to-create")); + mapUserToCenter(BaseTestCase.currentModule +"-"+propsKernel.getProperty("iam-users-to-create"),propsKernel.getProperty("regCenterId")); + mapCenter( BaseTestCase.currentModule +"-"+propsKernel.getProperty("iam-users-to-create")); + KeycloakUserManager.createUsersWithOutDefaultRole(); + mapUserToZone(KeycloakUserManager.onboardUser,propsKernel.getProperty("zone")); + mapZone(KeycloakUserManager.onboardUser); + mapUserToCenter(KeycloakUserManager.onboardUser,propsKernel.getProperty("regCenterId")); + mapCenter(KeycloakUserManager.onboardUser); + initialized = true; + } + } + + @SuppressWarnings("unchecked") + public static void mapUserToZone(String user, String zone) { + String token = kernelAuthLib.getTokenByRole("globalAdmin"); + String url = ApplnURI + propsKernel.getProperty("zoneMappingUrl"); + org.json.simple.JSONObject actualrequest = getRequestJson(zoneMappingRequest); + JSONObject request = new JSONObject(); + request.put("zoneCode", zone); + request.put("userId", user); + request.put("langCode", getLanguageList().get(0)); + request.put("isActive","true"); + actualrequest.put("request", request); + logger.info(actualrequest); + Response response = RestClient.postReqestWithCookiesAndBody(url, actualrequest.toString(), token,"postrequest"); + logger.info(user + "Mapped to" + zone + "Zone"); + logger.info(response.getBody().asString()); + } + + public static List getLanguageList() { + logger.info("We have created a Config Manager. Beginning to read properties!"); + + environment = ConfigManager.getiam_apienvuser(); + logger.info("Environemnt is ==== :" + environment); + ApplnURI = ConfigManager.getiam_apiinternalendpoint(); + logger.info("Application URI ======" + ApplnURI); + + logger.info("Configs from properties file are set."); + if (!languageList.isEmpty()) { + return languageList; + } + String url = ApplnURI + props.getProperty("preregLoginConfigUrl"); + Response response = RestClient.getRequest(url, MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON); + org.json.JSONObject responseJson = new org.json.JSONObject(response.asString()); + org.json.JSONObject responseValue = (org.json.JSONObject) responseJson.get("response"); + String mandatoryLanguage = (String) responseValue.get("mosip.mandatory-languages"); + + languageList.add(mandatoryLanguage); + languageList.addAll(Arrays.asList(((String) responseValue.get("mosip.optional-languages")).split(","))); + + return languageList; + } + + public static void mapZone(String user) { + String token = kernelAuthLib.getTokenByRole("globalAdmin"); + String url = ApplnURI + propsKernel.getProperty("zoneMappingActivateUrl"); + HashMap map = new HashMap(); + map.put("isActive","true"); + map.put("userId", user); + Response response = RestClient.patchRequestWithCookieAndQueryParm(url, map, MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, "Authorization", token); + logger.info(response); + } + + public static void mapUserToCenter(String user, String center) { + String token = kernelAuthLib.getTokenByRole("globalAdmin"); + JSONObject requestJson = new JSONObject(); + Response response = null; + requestJson.put("id", "string"); + requestJson.put("metadata", new JSONObject()); + requestJson.put("requesttime", AdminTestUtil.generateCurrentUTCTimeStamp()); + requestJson.put("version", "string"); + requestJson.put("request", new HashMap<>()); + requestJson.getJSONObject("request").put("id", user); + requestJson.getJSONObject("request").put("name","automation"); + requestJson.getJSONObject("request").put("isActive", true); + requestJson.getJSONObject("request").put("langCode", getLanguageList().get(0)); + requestJson.getJSONObject("request").put("statusCode", "active"); + requestJson.getJSONObject("request").put("regCenterId",center); + + response = RestClient.postRequestWithCookie(BaseTestCase.ApplnURI + "/v1/masterdata/usercentermapping", requestJson.toString(), MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, BaseTestCase.COOKIENAME, token); + JSONObject responseJson = new JSONObject(response.asString()); + System.out.println("responseJson = " + responseJson); + } + + public static void mapCenter(String user) { + String token = kernelAuthLib.getTokenByRole("globalAdmin"); + String url = ApplnURI + "/v1/masterdata/usercentermapping"; + HashMap map = new HashMap(); + map.put("isActive","true"); + map.put("id", user); + Response response = RestClient.patchRequestWithCookieAndQueryParm(url, map, MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, "Authorization", token); + logger.info(response); + } + + public static String activateMachine(String id) { + String token = kernelAuthLib.getTokenByRole("globalAdmin"); + String url = ApplnURI + "/v1/masterdata/machines"; + HashMap map = new HashMap(); + map.put("isActive","true"); + map.put("id", id); + Response response = RestClient.patchRequestWithCookieAndQueryParm(url, map, MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, "Authorization", token); + logger.info(response); + JSONObject responseJson = new JSONObject(response.asString()); + JSONObject responseobj = responseJson.getJSONObject("response"); + return responseobj.getString("status"); + } + +} \ No newline at end of file diff --git a/uitest-regclient/src/main/java/regclient/api/ApplicationLibrary.java b/uitest-regclient/src/main/java/regclient/api/ApplicationLibrary.java new file mode 100644 index 000000000..1912eead5 --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/api/ApplicationLibrary.java @@ -0,0 +1,21 @@ +package regclient.api; + +import io.restassured.response.Response; + +import javax.ws.rs.core.MediaType; + +public class ApplicationLibrary extends BaseTestCase { + + private static final CommonLibrary commonLibrary = new CommonLibrary(); + + + // get requests + public Response getWithoutParams(String endpoint, String cookie) { + return commonLibrary.getWithoutParams(ApplnURI + endpoint, cookie); + } + + public Response postWithJson(String endpoint, Object body) { + return commonLibrary.postWithJson(ApplnURI + endpoint, body, MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON); + } +} \ No newline at end of file diff --git a/uitest-regclient/src/main/java/regclient/api/BaseTestCase.java b/uitest-regclient/src/main/java/regclient/api/BaseTestCase.java new file mode 100644 index 000000000..88bb7c017 --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/api/BaseTestCase.java @@ -0,0 +1,159 @@ +package regclient.api; + + +import regclient.utils.TestDataReader; +import regclient.utils.TestRunner; + +import org.apache.log4j.PropertyConfigurator; +import org.json.JSONArray; +import org.json.simple.JSONObject; + +import io.restassured.response.Response; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import javax.ws.rs.core.MediaType; + + +public class BaseTestCase { + private static final org.slf4j.Logger logger= org.slf4j.LoggerFactory.getLogger(BaseTestCase.class); + public static String environment; + public static List languageList = new ArrayList<>(); + public static String ApplnURI; + public static String ApplnURIForKeyCloak; + public static String testLevel; + public static Properties props = getproperty( + TestRunner.getResourcePath() + "/config/application.properties"); + public static Properties propsKernel = getproperty( + TestRunner.getResourcePath() + "/config/Kernel.properties"); + + + public static Properties propsMap = getproperty( + TestRunner.getResourcePath() + "/config/valueMapping.properties"); + public static Properties propsBio = getproperty( + TestRunner.getResourcePath() + "/config/bioValue.properties"); + public static String SEPRATOR = ""; + public static String currentModule = "androidregclient"; + public final static String COOKIENAME = "Authorization"; + public static CommonLibrary kernelCmnLib = null; + public static KernelAuthentication kernelAuthLib = null; + public String adminCookie = null; + public String idrepoCookie = null; + public static String uinEmail; + public static String uinPhone; + + public static String uin=""; + public static String perpetualVid=""; + public static String onetimeuseVid=""; + public static String temporaryVid=""; + + + public static String getOSType() { + String type = System.getProperty("os.name"); + if (type.toLowerCase().contains("windows")) { + SEPRATOR = "\\\\"; + return "WINDOWS"; + } else if (type.toLowerCase().contains("linux") || type.toLowerCase().contains("unix")) { + SEPRATOR = "/"; + return "OTHERS"; + } + return null; + } + + public static Properties getproperty(String path) { + Properties prop = new Properties(); + + try { + File file = new File(path); + prop.load(new FileInputStream(file)); + } catch (IOException e) { + logger.error("Exception " + e.getMessage()); + } + return prop; + } + + public static void initialize() { + PropertyConfigurator.configure(getLoggerPropertyConfig()); + kernelAuthLib = new KernelAuthentication(); + kernelCmnLib = new CommonLibrary(); + /** + * Make sure test-output is there + */ + + getOSType(); + logger.info("We have created a Config Manager. Beginning to read properties!"); + + environment = ConfigManager.getiam_apienvuser(); + logger.info("Environemnt is ==== :" + environment); + ApplnURI = ConfigManager.getiam_apiinternalendpoint(); + logger.info("Application URI ======" + ApplnURI); + ApplnURIForKeyCloak = ConfigManager.getIAMUrl(); + logger.info("Application URI ======" + ApplnURIForKeyCloak); + testLevel = System.getProperty("env.testLevel"); + logger.info("Test Level ======" + testLevel); + logger.info("Test Level ======" + languageList); + + logger.info("Configs from properties file are set."); + + } + + private static Properties getLoggerPropertyConfig() { + Properties logProp = new Properties(); + logProp.setProperty("log4j.rootLogger", "INFO, Appender1,Appender2"); + logProp.setProperty("log4j.appender.Appender1", "org.apache.log4j.ConsoleAppender"); + logProp.setProperty("log4j.appender.Appender1.layout", "org.apache.log4j.PatternLayout"); + logProp.setProperty("log4j.appender.Appender1.layout.ConversionPattern", "%-7p %d [%t] %c %x - %m%n"); + logProp.setProperty("log4j.appender.Appender2", "org.apache.log4j.FileAppender"); + logProp.setProperty("log4j.appender.Appender2.File", "src/logs/mosip-api-test.log"); + logProp.setProperty("log4j.appender.Appender2.layout", "org.apache.log4j.PatternLayout"); + logProp.setProperty("log4j.appender.Appender2.layout.ConversionPattern", "%-7p %d [%t] %c %x - %m%n"); + return logProp; + } + + + public static JSONObject getRequestJson(String filepath) { + return kernelCmnLib.readJsonData(filepath, true); + + } + + public static String GethierarchyName(int locationHierarchyLevels) { + kernelAuthLib = new KernelAuthentication(); + String token = kernelAuthLib.getTokenByRole("admin"); + String url = ApplnURI + props.getProperty("locationhierarchy"); + Response response = RestClient.getRequestWithCookie(url+GethierarchyLevelName(locationHierarchyLevels), MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON,"Authorization", token); + org.json.JSONObject responseJson = new org.json.JSONObject(response.asString()); + org.json.JSONObject responseObj = responseJson.getJSONObject("response"); + JSONArray responseArray = responseObj.getJSONArray("locations"); + + for (int i = 0, size = responseArray.length(); i < size; i++) { + org.json.JSONObject idItem = responseArray.getJSONObject(i); + String lang = idItem.getString("langCode"); + String hierarchyName = idItem.getString("name"); + if (lang.equals(TestDataReader.readData("language"))) { + return hierarchyName; + } + + } + return null; + + } + + public static String GethierarchyLevelName(int locationHierarchyLevels) { + kernelAuthLib = new KernelAuthentication(); + String token = kernelAuthLib.getTokenByRole("admin"); + String url = ApplnURI + props.getProperty("locationHierarchyLevels"); + Response response = RestClient.getRequestWithCookie(url+locationHierarchyLevels+"/"+TestDataReader.readData("language"), MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON,"Authorization", token); + org.json.JSONObject responseJson = new org.json.JSONObject(response.asString()); + org.json.JSONObject responseObj = responseJson.getJSONObject("response"); + JSONArray responseArray = responseObj.getJSONArray("locationHierarchyLevels"); + org.json.JSONObject idItem = responseArray.getJSONObject(0); + String hierarchyLevelName = idItem.getString("hierarchyLevelName"); + return hierarchyLevelName; + + } +} \ No newline at end of file diff --git a/uitest-regclient/src/main/java/regclient/api/CommonLibrary.java b/uitest-regclient/src/main/java/regclient/api/CommonLibrary.java new file mode 100644 index 000000000..84d27912e --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/api/CommonLibrary.java @@ -0,0 +1,139 @@ +package regclient.api; + +import io.restassured.http.Cookie; +import io.restassured.response.Response; +import regclient.utils.TestRunner; + +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Properties; +import java.util.stream.Collectors; + +import static io.restassured.RestAssured.given; + +public class CommonLibrary extends BaseTestCase { + private static final org.slf4j.Logger logger= org.slf4j.LoggerFactory.getLogger(CommonLibrary.class); + private final ApplicationLibrary applicationLibrary = new ApplicationLibrary(); + + public boolean isValidToken(String cookie) { + + logger.info("========= Revalidating the token ========="); + Response response = applicationLibrary.getWithoutParams("/v1/authmanager/authorize/admin/validateToken", cookie); + JSONObject responseJson =null; + try { + responseJson = (JSONObject) ((JSONObject) new JSONParser().parse(response.asString())) + .get("response"); + } catch (ParseException | NullPointerException e) { + logger.info(e.getMessage()); + } + + if (responseJson!=null && responseJson.get("errors")==null) + { + logger.info("========= Valid Token ========="); + return true; + } + else + { + + logger.info("========= InValid Token ========="); + return false; + } + + } + + public Map readProperty(String propertyFileName) { + Properties prop = new Properties(); + try { + File propertyFile = new File( TestRunner.getResourcePath() +"/config/Kernel.properties"); + prop.load(new FileInputStream(propertyFile)); + + } catch (IOException e) { + logger.info("Error occrued while reading propertyFileName " + propertyFileName + e.getMessage()); + logger.info(e.getMessage()); + } + + Map mapProp = prop.entrySet().stream() + .collect(Collectors.toMap(e -> (String) e.getKey(), e -> (String) e.getValue())); + + return mapProp; + } + + // Get Requests: + /** + * @param url + * @param cookie + * @return this method is for get request with authentication(cookie) and + * without any param. + */ + public Response getWithoutParams(String url, String cookie) { + logger.info("REST-ASSURED: Sending a Get request to " + url); + Cookie.Builder builder = new Cookie.Builder("Authorization", cookie); + Response getResponse = given().cookie(builder.build()).relaxedHTTPSValidation().log().all().when().get(url); + // log then response + responseLogger(getResponse); + logger.info("REST-ASSURED: the response Time is: " + getResponse.time()); + return getResponse; + } + + + /** + * @param response + * this method is for logging the response in case of error only. + * this is used in get request response logging + */ + public void responseLogger(Response response) { + int statusCode = response.statusCode(); + if (statusCode < 200 || statusCode > 299) { + logger.info(response.asString()); + } else + logger.info("status code: " + statusCode + "(success)"); + + } + + public JSONObject readJsonData(String path, boolean isRelative) { + logger.info("path : " + path); + if(isRelative) + path = TestRunner.getResourcePath() + path; + logger.info("Relativepath : " + path); + File fileToRead = new File(path); + InputStream isOfFile = null; + try { + logger.info("fileToRead : " + fileToRead); + isOfFile = new FileInputStream(fileToRead); + } catch (FileNotFoundException e1) { + logger.info("error while reading the file : " + e1.getLocalizedMessage() ); + e1.printStackTrace(); + logger.info("File Not Found at the given path"); + } + JSONObject jsonData = null; + try { + jsonData = (JSONObject) new JSONParser().parse(new InputStreamReader(isOfFile, StandardCharsets.UTF_8)); + } catch (IOException | ParseException | NullPointerException e) { + logger.info(e.getMessage()); + } + return jsonData; + } + + /** + * @param url + * @param body + * @param contentHeader + * @param acceptHeader + * @return this method is for post request without authentication(cookie) and + * only with jsonData in request body. + */ + public Response postWithJson(String url, Object body, String contentHeader, String acceptHeader) { + logger.info("REST:ASSURED:Sending post request to" + url); + Response postResponse = given().relaxedHTTPSValidation().body(body).contentType(contentHeader) + .accept(acceptHeader).log().all().when().post(url).then().log().all().extract().response(); + // log then response + logger.info("REST-ASSURED: The response from request is: " + postResponse.asString()); + logger.info("REST-ASSURED: The response Time is: " + postResponse.time()); + return postResponse; + } +} diff --git a/uitest-regclient/src/main/java/regclient/api/ConfigManager.java b/uitest-regclient/src/main/java/regclient/api/ConfigManager.java new file mode 100644 index 000000000..104d783c4 --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/api/ConfigManager.java @@ -0,0 +1,601 @@ +package regclient.api; + + + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Properties; + +import regclient.utils.TestRunner; + + +public class ConfigManager { + + private static final org.slf4j.Logger LOGGER= org.slf4j.LoggerFactory.getLogger(ConfigManager.class); + + private static final String USEPRECONFIGOTP = "usePreConfiguredOtp"; + private static final String PRECONFIGOTP = "preconfiguredOtp"; + + private static final String MOSIP_IDREPO_CLIENT_SECRET = "mosip_idrepo_client_secret"; + private static final String MOSIP_IDREPO_CLIENT_ID = "mosip_idrepo_client_id"; + private static final String MOSIP_IDREPO_APP_ID = "mosip_idrepo_app_id"; + + private static final String MOSIP_ADMIN_CLIENT_SECRET = "mosip_admin_client_secret"; + private static final String MOSIP_ADMIN_CLIENT_ID = "mosip_admin_client_id"; + private static final String MOSIP_ADMIN_APP_ID = "mosip_admin_app_id"; + + private static final String MOSIP_REG_CLIENT_SECRET = "mosip_reg_client_secret"; + private static final String MOSIP_REG_CLIENT_ID = "mosip_reg_client_id"; + private static final String MOSIP_REGCLIENT_APP_ID = "mosip_regclient_app_id"; + + + + private static final String MOSIP_AUTOMATION_CLIENT_SECRET = "mosip_testrig_client_secret"; + private static final String MOSIP_AUTOMATION_CLIENT_ID = "mosip_testrig_client_id"; + private static final String MOSIP_AUTOMATION_APP_ID = "mosip_automation_app_id"; + + private static final String S3_HOST = "s3-host"; + private static String usePreConfiguredOtp; + private static final String S3_REGION = "s3-region"; + private static final String S3_USER_KEY = "s3-user-key"; + private static final String S3_SECRET_KEY = "s3-user-secret"; + private static final String S3_ACCOUNT = "s3-account"; + private static final String PUSH_TO_S3 = "push-reports-to-s3"; + private static final String ENABLE_DEBUG = "enableDebug"; + private static final String THREAD_COUNT = "threadCount"; + private static final String LANG_SELECT = "langselect"; + private static String Testcases = "regclientScenariosToExecute"; + private static String preconfiguredOtp; + + private static final String DB_PORT = "db-port"; + private static final String DB_DOMAIN = "db-server"; + private static final String HIBERNATE_CONNECTION_DRIVER_CLASS = "hibernate.connection.driver_class"; + private static final String HIBERNATE_CONNECTION_POOL_SIZE = "hibernate.connection.pool_size"; + private static final String HIBERNATE_DIALECT = "hibernate.dialect"; + private static final String HIBERNATE_SHOW_SQL = "hibernate.show_sql"; + private static final String HIBERNATE_CONTEXT_CLASS = "hibernate.current_session_context_class"; + + private static final String AUDIT_DB_USER = "db-su-user"; + private static final String AUDIT_DB_PASS = "postgresql-password"; + private static final String AUDIT_DB_SCHEMA = "audit_db_schema"; + + private static final String IDA_DB_USER = "db-su-user"; + private static final String IDA_DB_PASS = "postgresql-password"; + private static final String IDA_DB_SCHEMA = "ida_db_schema"; + + private static final String PMS_DB_USER = "db-su-user"; + private static final String PMS_DB_PASS = "postgresql-password"; + private static final String PMS_DB_SCHEMA = "pms_db_schema"; + + private static final String KM_DB_USER = "db-su-user"; + private static final String KM_DB_PASS = "postgresql-password"; + private static final String KM_DB_SCHEMA = "km_db_schema"; + + private static final String MASTER_DB_USER = "db-su-user"; + private static final String MASTER_DB_PASS = "postgresql-password"; + private static final String MASTER_DB_SCHEMA = "master_db_schema"; + + private static final String IAM_EXTERNAL_URL = "keycloak-external-url"; + private static final String IAM_ADMINPORTAL_PATH = "adminPortalPath"; + private static final String IAM_APIENVUSER = "apiEnvUser"; + private static final String IAM_APIINTERNALENDPOINT = "apiInternalEndPoint"; + private static final String IAM_REALM_ID = "keycloak-realm-id"; + private static final String IAM_USERS_TO_CREATE = "iam-users-to-create"; + private static final String IAM_USERS_PASSWORD = "iam-users-password"; + + private static final String AUTH_DEMO_SERVICE_PORT = "authDemoServicePort"; + private static final String AUTH_DEMO_SERVICE_BASE_URL = "authDemoServiceBaseURL"; + private static final String MOUNT_PATH = "mountPath"; + private static final String AUTHCERTS_PATH = "authCertsPath"; + private static final String MOUNT_PATH_FOR_SCENARIO = "mountPathForScenario"; + + private static final String PACKET_UTILITY_BASE_URL = "packetUtilityBaseUrl"; + + private static final String REPORT_EXPIRATION_IN_DAYS = "reportExpirationInDays"; + + private static String idrepo_client_secret; + private static String idrepo_client_id; + private static String idrepo_app_id; + + private static String admin_client_secret; + private static String admin_client_id; + private static String admin_app_id; + + private static String regproc_client_secret; + private static String regproc_client_id; + private static String regproc_app_id; + + private static String automation_client_secret; + private static String automation_client_id; + private static String automation_app_id; + + private static String s3_region; + private static String s3_host; + private static String s3_user_key; + private static String s3_account; + private static String s3_secret_key; + private static String push_reports_to_s3; + private static String enableDebug; + private static String threadCount; + private static String langselect; + private static String testcases; + + + private static String db_port; + private static String db_domain; + private static String hibernate_connection_driver_class; + private static String hibernate_connection_pool_size; + private static String hibernate_dialect; + private static String hibernate_show_sql; + private static String hibernate_current_session_context_class; + + private static String audit_db_user; + private static String audit_db_pass; + private static String audit_db_schema; + + private static String ida_db_user; + private static String ida_db_pass; + private static String ida_db_schema; + + private static String pms_db_user; + private static String pms_db_pass; + private static String pms_db_schema; + + private static String km_db_user; + private static String km_db_pass; + private static String km_db_schema; + + private static String master_db_user; + private static String master_db_pass; + private static String master_db_schema; + + private static String iam_external_url; + private static String iam_realm_id; + private static String iam_users_to_create; + private static String iam_adminportal_path; + private static String iam_apienvuser; + private static String iam_apiinternalendpoint; + private static String iam_users_password; + private static String authDemoServicePort; + private static String authDemoServiceBaseUrl; + + private static String mountPath; + private static String authCertsPath; + private static String mountPathForScenario; + private static String packetUtilityBaseUrl; + public static Properties propsKernel; + private static String reportExpirationInDays; + public static void setProperty(String key, String value) { + // Overwrite the value with only if the key exists + if (propsKernel.containsKey(key)) { + propsKernel.setProperty(key, value); + } + } + + public static String getValueForKey(String key) { + String value = System.getenv(key) == null ? propsKernel.getProperty(key) : System.getenv(key); + setProperty(key, value); + + return value; + } + + public static void init() { + propsKernel = getproperty(TestRunner.getResourcePath() + "/config/Kernel.properties"); + System.out.println(propsKernel); + + idrepo_client_secret = getValueForKey(MOSIP_IDREPO_CLIENT_SECRET); + idrepo_client_id = getValueForKey(MOSIP_IDREPO_CLIENT_ID); + idrepo_app_id = getValueForKey(MOSIP_IDREPO_APP_ID); + admin_client_secret = getValueForKey(MOSIP_ADMIN_CLIENT_SECRET); + admin_client_id = getValueForKey(MOSIP_ADMIN_CLIENT_ID); + admin_app_id = getValueForKey(MOSIP_ADMIN_APP_ID); + regproc_client_secret = getValueForKey(MOSIP_REG_CLIENT_SECRET); + regproc_client_id = getValueForKey(MOSIP_REG_CLIENT_ID); + regproc_app_id = getValueForKey(MOSIP_REGCLIENT_APP_ID); + automation_client_secret = getValueForKey(MOSIP_AUTOMATION_CLIENT_SECRET); + automation_client_id = getValueForKey(MOSIP_AUTOMATION_CLIENT_ID); + automation_app_id = getValueForKey(MOSIP_AUTOMATION_APP_ID); + s3_host = getValueForKey(S3_HOST); + s3_region = getValueForKey(S3_REGION); + s3_user_key = getValueForKey(S3_USER_KEY); + s3_secret_key = getValueForKey(S3_SECRET_KEY); + s3_account = getValueForKey(S3_ACCOUNT); + + iam_adminportal_path =System.getenv(IAM_ADMINPORTAL_PATH) == null + ? propsKernel.getProperty(IAM_ADMINPORTAL_PATH) + : System.getenv(IAM_ADMINPORTAL_PATH); + + LOGGER.info("adminportal_path from config manager::" + iam_adminportal_path); + iam_apienvuser = System.getenv(IAM_APIENVUSER) == null + ? propsKernel.getProperty(IAM_APIENVUSER) + : System.getenv(IAM_APIENVUSER); + LOGGER.info("apienvuser from config manager::" + iam_apienvuser); + iam_apiinternalendpoint = System.getenv(IAM_APIINTERNALENDPOINT) == null + ? propsKernel.getProperty(IAM_APIINTERNALENDPOINT) + : System.getenv(IAM_APIINTERNALENDPOINT); + LOGGER.info("apiinternalendpoint from config manager::" + iam_apiinternalendpoint); + // push_reports_to_s3 = getValueForKey(PUSH_TO_S3); + db_port = getValueForKey(DB_PORT); + db_domain = getValueForKey(DB_DOMAIN); + hibernate_connection_driver_class = getValueForKey(HIBERNATE_CONNECTION_DRIVER_CLASS); + hibernate_connection_pool_size = getValueForKey(HIBERNATE_CONNECTION_POOL_SIZE); + hibernate_dialect = getValueForKey(HIBERNATE_DIALECT); + hibernate_show_sql = getValueForKey(HIBERNATE_SHOW_SQL); + hibernate_current_session_context_class = getValueForKey(HIBERNATE_CONTEXT_CLASS); + audit_db_user = getValueForKey(AUDIT_DB_USER); + audit_db_pass = getValueForKey(AUDIT_DB_PASS); + audit_db_schema = getValueForKey(AUDIT_DB_SCHEMA); + ida_db_user = getValueForKey(IDA_DB_USER); + ida_db_pass = getValueForKey(IDA_DB_PASS); + ida_db_schema = getValueForKey(IDA_DB_SCHEMA); + pms_db_user = getValueForKey(PMS_DB_USER); + pms_db_pass = getValueForKey(PMS_DB_PASS); + pms_db_schema = getValueForKey(PMS_DB_SCHEMA); + km_db_user = getValueForKey(KM_DB_USER); + km_db_pass = getValueForKey(KM_DB_PASS); + km_db_schema = getValueForKey(KM_DB_SCHEMA); + master_db_user = getValueForKey(MASTER_DB_USER); + master_db_pass = getValueForKey(MASTER_DB_PASS); + master_db_schema = getValueForKey(MASTER_DB_SCHEMA); + iam_external_url = getValueForKey(IAM_EXTERNAL_URL); + System.out.println("keycloakendpoint from config manager::" + iam_external_url); + reportExpirationInDays = System.getenv(REPORT_EXPIRATION_IN_DAYS) == null + ? propsKernel.getProperty(REPORT_EXPIRATION_IN_DAYS) + : System.getenv(REPORT_EXPIRATION_IN_DAYS); + propsKernel.setProperty(REPORT_EXPIRATION_IN_DAYS, reportExpirationInDays); + iam_realm_id = getValueForKey(IAM_REALM_ID); + iam_users_to_create = getValueForKey(IAM_USERS_TO_CREATE); + iam_users_password = getValueForKey(IAM_USERS_PASSWORD); + + usePreConfiguredOtp = System.getenv(USEPRECONFIGOTP) == null ? propsKernel.getProperty(USEPRECONFIGOTP) + : System.getenv(USEPRECONFIGOTP); + propsKernel.setProperty(USEPRECONFIGOTP, usePreConfiguredOtp); + + preconfiguredOtp = System.getenv(PRECONFIGOTP) == null ? propsKernel.getProperty(PRECONFIGOTP) + : System.getenv(PRECONFIGOTP); + propsKernel.setProperty(PRECONFIGOTP, preconfiguredOtp); + + admin_client_secret = System.getenv(MOSIP_ADMIN_CLIENT_SECRET) == null + ? propsKernel.getProperty(MOSIP_ADMIN_CLIENT_SECRET) + : System.getenv(MOSIP_ADMIN_CLIENT_SECRET); + + propsKernel.setProperty(MOSIP_ADMIN_CLIENT_SECRET, admin_client_secret); + + authDemoServicePort = System.getenv(AUTH_DEMO_SERVICE_PORT) == null + ? propsKernel.getProperty(AUTH_DEMO_SERVICE_PORT) + : System.getenv(AUTH_DEMO_SERVICE_PORT); + propsKernel.setProperty(AUTH_DEMO_SERVICE_PORT, authDemoServicePort); + + authDemoServiceBaseUrl = System.getenv(AUTH_DEMO_SERVICE_BASE_URL) == null + ? propsKernel.getProperty(AUTH_DEMO_SERVICE_BASE_URL) + : System.getenv(AUTH_DEMO_SERVICE_BASE_URL); + propsKernel.setProperty(AUTH_DEMO_SERVICE_BASE_URL, authDemoServiceBaseUrl); + + mountPath = System.getenv(MOUNT_PATH) == null ? propsKernel.getProperty(MOUNT_PATH) : System.getenv(MOUNT_PATH); + propsKernel.setProperty(MOUNT_PATH, mountPath); + + authCertsPath = System.getenv(AUTHCERTS_PATH) == null ? propsKernel.getProperty(AUTHCERTS_PATH) : System.getenv(AUTHCERTS_PATH); + propsKernel.setProperty(AUTHCERTS_PATH, authCertsPath); + + mountPathForScenario = System.getenv(MOUNT_PATH_FOR_SCENARIO) == null ? propsKernel.getProperty(MOUNT_PATH_FOR_SCENARIO) : System.getenv(MOUNT_PATH_FOR_SCENARIO); + propsKernel.setProperty(MOUNT_PATH_FOR_SCENARIO, mountPathForScenario); + + packetUtilityBaseUrl = System.getenv(PACKET_UTILITY_BASE_URL) == null ? propsKernel.getProperty(PACKET_UTILITY_BASE_URL) : System.getenv(PACKET_UTILITY_BASE_URL); + propsKernel.setProperty(PACKET_UTILITY_BASE_URL, packetUtilityBaseUrl); + + push_reports_to_s3 =System.getenv(PUSH_TO_S3) == null ? propsKernel.getProperty(PUSH_TO_S3) : System.getenv(PUSH_TO_S3); + propsKernel.setProperty(PUSH_TO_S3, push_reports_to_s3); + + enableDebug =System.getenv(ENABLE_DEBUG) == null ? propsKernel.getProperty(ENABLE_DEBUG) : System.getenv(ENABLE_DEBUG); + propsKernel.setProperty(ENABLE_DEBUG, enableDebug); + + threadCount =System.getenv(THREAD_COUNT) == null ? propsKernel.getProperty(THREAD_COUNT) : System.getenv(THREAD_COUNT); + propsKernel.setProperty(THREAD_COUNT, threadCount); + + langselect =System.getenv(LANG_SELECT) == null ? propsKernel.getProperty(LANG_SELECT) : System.getenv(LANG_SELECT); + propsKernel.setProperty(LANG_SELECT, langselect); + + testcases =System.getenv(Testcases) == null ? propsKernel.getProperty(Testcases) : System.getenv(Testcases); + propsKernel.setProperty(Testcases, testcases); + } + + public static String gettestcases() { + return testcases; + } + + public static String getAuthDemoServicePort() { + return authDemoServicePort; + } + + public static String getAuthDemoServiceBaseUrl() { + return authDemoServiceBaseUrl; + + } + + + public static String getLangselect() { + return langselect; + + } + + public static String getThreadCount() { + return threadCount; + + } + + + + public static String getEnableDebug() { + return enableDebug; + + } + + public static String getmountPath() { + return mountPath; + } + + public static String getmountPathForScenario() { + return mountPathForScenario; + } + + public static String getpacketUtilityBaseUrl() { + return packetUtilityBaseUrl; + } + + public static String getauthCertsPath() { + return authCertsPath; + } + + public static Properties init(String abc) { + propsKernel = getproperty(TestRunner.getResourcePath() + "/" + "/config/Kernel.properties"); + + return propsKernel; + } + + + public static String getAdminClientSecret() { + return admin_client_secret; + } + + public static Boolean IsDebugEnabled() { + return enableDebug.equalsIgnoreCase("yes"); + } + + public static String getAdminClientId() { + return admin_client_id; + } + + public static String getAdminAppId() { + return admin_app_id; + } + + public static String getIdRepoClientSecret() { + return idrepo_client_secret; + } + + public static String getidRepoClientId() { + return idrepo_client_id; + } + + public static String getidRepoAppId() { + return idrepo_app_id; + } + + public static String getRegprocClientSecret() { + return regproc_client_secret; + } + + public static String getRegprocClientId() { + return regproc_client_id; + } + + public static String getRegprocAppId() { + return regproc_app_id; + } + + + public static String getAutomationClientSecret() { + return automation_client_secret; + } + + public static String getAutomationClientId() { + return automation_client_id; + } + + public static String getAutomationAppId() { + return automation_app_id; + } + + public static String getS3Host() { + return s3_host; + } + public static String getReportExpirationInDays() { + return reportExpirationInDays; + } + + public static String getS3Region() { + return s3_region; + } + + public static String getS3UserKey() { + return s3_user_key; + } + + public static String getS3SecretKey() { + return s3_secret_key; + } + + public static String getS3Account() { + return s3_account; + } + + public static String getPushReportsToS3() { + return push_reports_to_s3; + } + + public static String getIdaDbUrl() { + return "jdbc:postgresql://" + db_domain + ":" + db_port + "/mosip_ida"; + } + + public static String getAuditDbUrl() { + return "jdbc:postgresql://" + db_domain + ":" + db_port + "/mosip_audit"; + } + + public static String getDbDriverClass() { + return hibernate_connection_driver_class; + } + + public static String getDbConnectionPoolSize() { + return hibernate_connection_pool_size; + } + + public static String getDbDialect() { + return hibernate_dialect; + } + + public static String getShowSql() { + return hibernate_show_sql; + } + public static String getiam_adminportal_path() { + return iam_adminportal_path; + } + public static String getiam_apienvuser() { + return iam_apienvuser; + } + public static String getiam_apiinternalendpoint() { + return iam_apiinternalendpoint; + } + + public static String getDbSessionContext() { + return hibernate_current_session_context_class; + } + + public static String getAuditDbUser() { + return audit_db_user; + } + + public static String getAuditDbPass() { + System.out.println("DB Password from ENV::: " + System.getenv(AUDIT_DB_PASS)); + return audit_db_pass; + } + + public static String getAuditDbSchema() { + return audit_db_schema; + } + + public static String getIdaDbUser() { + return ida_db_user; + } + + public static String getIdaDbPass() { + return ida_db_pass; + } + + public static String getIdaDbSchema() { + return ida_db_schema; + } + + public static String getPMSDbUrl() { + return "jdbc:postgresql://" + db_domain + ":" + db_port + "/mosip_pms"; + } + + public static String getKMDbUrl() { + return "jdbc:postgresql://" + db_domain + ":" + db_port + "/mosip_keymgr"; + } + + public static String getMASTERDbUrl() { + return "jdbc:postgresql://" + db_domain + ":" + db_port + "/mosip_master"; + } + + public static String getPMSDbUser() { + return pms_db_user; + } + + public static String getPMSDbPass() { + return pms_db_pass; + } + + public static String getPMSDbSchema() { + return pms_db_schema; + } + + public static String getKMDbUser() { + return km_db_user; + } + + public static String getKMDbPass() { + return km_db_pass; + } + + public static String getKMDbSchema() { + return km_db_schema; + } + + public static String getMasterDbUser() { + return master_db_user; + } + + public static String getMasterDbPass() { + return master_db_pass; + } + + public static String getMasterDbSchema() { + return master_db_schema; + } + + // from docker env getting only host url + public static String getIAMUrl() { + System.out.println("keycloak url from ENV::: " + System.getenv(IAM_EXTERNAL_URL) + "/auth"); + System.out.println("keycloak url from Property::: " + System.getProperty(IAM_EXTERNAL_URL) + "/auth"); + System.out.println("keycloak url from Config::: " + propsKernel.getProperty(IAM_EXTERNAL_URL) + "/auth"); + System.out.println("keycloak url is:::" + iam_external_url + "/auth"); + return iam_external_url + "/auth"; + } + + public static String getIAMRealmId() { + return iam_realm_id; + } + + public static String getIAMUsersToCreate() { + return iam_users_to_create; + } + + public static String getIAMUsersPassword() { + return iam_users_password; + } + + public static String getUsePreConfiguredOtp() { + return usePreConfiguredOtp; + } + + public static String getPreConfiguredOtp() { + return preconfiguredOtp; + + } + + public static String getEnv() { + return db_domain; + } + + public static String getRolesForUser() { + propsKernel = getproperty(TestRunner.getResourcePath() + "/" + "/config/Kernel.properties"); + return propsKernel.getProperty("roles"); + } + + private static Properties getproperty(String path) { + Properties prop = new Properties(); + try { + File file = new File(path); + prop.load(new FileInputStream(file)); + } catch (IOException e) { + LOGGER.error("Exception " + e.getMessage()); + } + return prop; + } + + public static String getAuthDemoServiceUrl() { + return ConfigManager.getAuthDemoServiceBaseUrl() + ":" + ConfigManager.getAuthDemoServicePort(); + } + +} \ No newline at end of file diff --git a/uitest-regclient/src/main/java/regclient/api/FetchUiSpec.java b/uitest-regclient/src/main/java/regclient/api/FetchUiSpec.java new file mode 100644 index 000000000..34db0e176 --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/api/FetchUiSpec.java @@ -0,0 +1,476 @@ +package regclient.api; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import javax.ws.rs.core.MediaType; + +import org.json.JSONArray; +import org.json.JSONObject; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.restassured.response.Response; +import regclient.utils.TestDataReader; + +public class FetchUiSpec extends BaseTestCase{ + + public static String UiSpec; + public static String eye = "no"; + public static String rightHand = "no"; + public static String leftHand = "no"; + public static String thumb = "no"; + public static String face = "no"; + + public static void getUiSpec(String type) { + if(type.equals("newProcess")) { + String token = kernelAuthLib.getTokenByRole("globalAdmin"); + String url = ApplnURI + "/v1/masterdata/uispec/registration-client/latest"; + HashMap map = new HashMap(); + map.put("type", type); + Response response = RestClient.getRequestWithCookieAndQueryParm(url, map, MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, "Authorization", token); + UiSpec= response.asString(); + }else if (type.equals("updateProcess")) { + String token = kernelAuthLib.getTokenByRole("globalAdmin"); + String url = ApplnURI + "/v1/masterdata/uispec/registration-client/latest"; + HashMap map = new HashMap(); + map.put("type", type); + Response response = RestClient.getRequestWithCookieAndQueryParm(url, map, MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, "Authorization", token); + UiSpec= response.asString(); + } + } + + public static List getAllScreenOrder() { + List screenNames = new ArrayList<>(); + + JSONObject jsonObject = new JSONObject(UiSpec); + JSONArray responseArray = jsonObject.getJSONArray("response"); + + JSONArray jsonSpecArray = responseArray.getJSONObject(0).getJSONArray("jsonSpec"); + JSONObject specObject = jsonSpecArray.getJSONObject(0).getJSONObject("spec"); + JSONArray screensArray = specObject.getJSONArray("screens"); + + for (int i = 0; i < screensArray.length(); i++) { + JSONObject screen = screensArray.getJSONObject(i); + String name = screen.getString("name"); + screenNames.add(name); + } + + return screenNames; + } + + + + public static String getScreenTitle(String ScreenName) { + String screenTitle=null; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + if (ScreenName.equals(screenNode.path("name").asText())) { + JsonNode labelNode = screenNode.path("label"); + screenTitle = labelNode.path(TestDataReader.readData("language")).asText(); + break; + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return screenTitle; + + } + + public static String getValueUsingId(String Id ) { + String value=null; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + JsonNode fieldsNode = screenNode.path("fields"); + + for (JsonNode fieldNode : fieldsNode) { + String id = fieldNode.path("id").asText(); + if (Id.equals(id)) { + JsonNode labelNode = fieldNode.path("label"); + value = labelNode.path(TestDataReader.readData("language")).asText(); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return value; + + } + + public static String getControlTypeUsingId(String Id) { + String controlType=null; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + JsonNode fieldsNode = screenNode.path("fields"); + + for (JsonNode fieldNode : fieldsNode) { + String id = fieldNode.path("id").asText(); + if (Id.equals(id)) { + controlType = fieldNode.path("controlType").asText(); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return controlType; + + } + + public static boolean getRequiredTypeUsingId(String Id) { + boolean controlType = false; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + JsonNode fieldsNode = screenNode.path("fields"); + + for (JsonNode fieldNode : fieldsNode) { + String id = fieldNode.path("id").asText(); + if (Id.equals(id)) { + controlType = fieldNode.path("required").asBoolean(); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return controlType; + + } + + public static String getRequiredGroupName(String Id) { + String group = null; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + JsonNode fieldsNode = screenNode.path("fields"); + + for (JsonNode fieldNode : fieldsNode) { + String id = fieldNode.path("id").asText(); + if (Id.equals(id)) { + group = fieldNode.path("group").asText(); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return group; + + } + + public static boolean getTransliterateTypeUsingId(String Id) { + boolean controlType = false; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + JsonNode fieldsNode = screenNode.path("fields"); + + for (JsonNode fieldNode : fieldsNode) { + String id = fieldNode.path("id").asText(); + if (Id.equals(id)) { + controlType = fieldNode.path("transliterate").asBoolean(); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return controlType; + + } + + public static String getFormatUsingId(String Id) { + String controlType=null; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + JsonNode fieldsNode = screenNode.path("fields"); + + for (JsonNode fieldNode : fieldsNode) { + String id = fieldNode.path("id").asText(); + if (Id.equals(id)) { + controlType = fieldNode.path("format").asText(); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return controlType; + + } + + public static String getTextBoxUsingId(String Id ) { + String validator=null; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + JsonNode fieldsNode = screenNode.path("fields"); + + for (JsonNode fieldNode : fieldsNode) { + String id = fieldNode.path("id").asText(); + if (Id.equals(id)) { + JsonNode labelNode = fieldNode.path("validators"); + if (labelNode.isArray()) { + for (JsonNode validatorNode : labelNode) { + validator = validatorNode.path("validator").asText(); + } + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return validator; + + } + + public static String getGroupValueUsingId(String Id ) { + String value=null; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response").get(0); + JsonNode screensNode = responseNode.path("jsonSpec").get(0).path("spec").path("screens"); + + for (JsonNode screenNode : screensNode) { + JsonNode fieldsNode = screenNode.path("fields"); + + for (JsonNode fieldNode : fieldsNode) { + String id = fieldNode.path("id").asText(); + if (Id.equals(id)) { + JsonNode labelNode = fieldNode.path("groupLabel"); + value = labelNode.path(TestDataReader.readData("language")).asText(); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return value; + + } + + public static String getTitleUsingId(String Id ) { + JSONObject jsonObject = new JSONObject(UiSpec); + JSONArray responseArray = jsonObject.getJSONArray("response"); + String value=null; + for (int i = 0; i < responseArray.length(); i++) { + JSONObject responseObject = responseArray.getJSONObject(i); + JSONArray jsonSpecArray = responseObject.getJSONArray("jsonSpec"); + + for (int j = 0; j < jsonSpecArray.length(); j++) { + JSONObject specObject = jsonSpecArray.getJSONObject(j).getJSONObject("spec"); + String id = specObject.getString("id"); + value = specObject.getJSONObject("label").getString(TestDataReader.readData("language")); + + if (id.equals(Id)) { + return value; + } + } + } + return value; + } + + public static String getFlowType() { + String typeValue=null; + ObjectMapper mapper = new ObjectMapper(); + try { + JsonNode rootNode = mapper.readTree(UiSpec); + JsonNode responseNode = rootNode.path("response"); + if (responseNode.isArray()) { + for (JsonNode node : responseNode) { + JsonNode jsonSpecNode = node.path("jsonSpec"); + if (jsonSpecNode.isArray()) { + for (JsonNode specNode : jsonSpecNode) { + typeValue = specNode.path("type").asText(); + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + }; + return typeValue; + } + + public static List getAllIds(String page) { + List idList = new ArrayList<>(); + + // Parse the UiSpec JSON string + JSONObject jsonObject = new JSONObject(UiSpec); + JSONArray responseArray = jsonObject.getJSONArray("response"); + + // Loop through the JSON array to extract all IDs + for (int i = 0; i < responseArray.length(); i++) { + JSONObject responseObject = responseArray.getJSONObject(i); + JSONArray jsonSpecArray = responseObject.getJSONArray("jsonSpec"); + + for (int j = 0; j < jsonSpecArray.length(); j++) { + JSONObject specObject = jsonSpecArray.getJSONObject(j).getJSONObject("spec"); + JSONArray screensArray = specObject.getJSONArray("screens"); + + for (int k = 0; k < screensArray.length(); k++) { + JSONObject screenObject = screensArray.getJSONObject(k); + String name = screenObject.getString("name"); + + // Check if the screen name is "DemographicDetails" + if (page.equals(name)) { + JSONArray fieldsArray = screenObject.getJSONArray("fields"); + + for (int l = 0; l < fieldsArray.length(); l++) { + JSONObject fieldObject = fieldsArray.getJSONObject(l); + String id = fieldObject.getString("id"); + idList.add(id); + } + } + } + } + } + + // Return the list of IDs + return idList; + } + + public static List getAllGroupLabelUsingId(String page){ + List idList = new ArrayList<>(); + List groupLabelList = new ArrayList<>(); + idList=getAllIds(page); + for(String id:idList ) { + if(FetchUiSpec.getRequiredTypeUsingId(id)) { + String groupLabel =getGroupValueUsingId(id ); + if (groupLabel.equals(null)||groupLabel.equals("")) { + groupLabel =getRequiredGroupName(id); + } + groupLabelList.add(groupLabel); + }else if(id.equals("residenceStatus")) { + String groupLabel =getGroupValueUsingId(id ); + groupLabelList.add(groupLabel); + } + } + Set set = new LinkedHashSet<>(groupLabelList); + + groupLabelList.clear(); + groupLabelList.addAll(set); + return groupLabelList; + } + + public static void getBiometricDetails(String biometricId) { + List bioAttributes = new ArrayList<>(); + + JSONObject rootObject = new JSONObject(UiSpec); + JSONArray responseArray = rootObject.getJSONArray("response"); + + for (int i = 0; i < responseArray.length(); i++) { + JSONObject responseObject = responseArray.getJSONObject(i); + JSONArray jsonSpecArray = responseObject.getJSONArray("jsonSpec"); + + for (int j = 0; j < jsonSpecArray.length(); j++) { + JSONObject specObject = jsonSpecArray.getJSONObject(j); + if (specObject.getString("type").equals("newProcess")) { + JSONObject specDetails = specObject.getJSONObject("spec"); + JSONArray screensArray = specDetails.getJSONArray("screens"); + + for (int k = 0; k < screensArray.length(); k++) { + JSONObject screenObject = screensArray.getJSONObject(k); + JSONArray fieldsArray = screenObject.getJSONArray("fields"); + + for (int l = 0; l < fieldsArray.length(); l++) { + JSONObject fieldObject = fieldsArray.getJSONObject(l); + + if (fieldObject.getString("id").equals(biometricId)) { + JSONArray bioArray = fieldObject.getJSONArray("bioAttributes"); + + for (int m = 0; m < bioArray.length(); m++) { + bioAttributes.add(bioArray.getString(m)); + } + } + } + } + } + } + } + for (String attribute : bioAttributes) { + switch (attribute) { + case "leftEye": + case "rightEye": + eye = "yes"; + break; + case "rightIndex": + case "rightLittle": + case "rightRing": + case "rightMiddle": + rightHand = "yes"; + break; + case "leftIndex": + case "leftLittle": + case "leftRing": + case "leftMiddle": + leftHand = "yes"; + break; + case "leftThumb": + case "rightThumb": + thumb = "yes"; + break; + case "face": + face = "yes"; + break; + default: + break; + } + } + } +} diff --git a/uitest-regclient/src/main/java/regclient/api/GlobalConstants.java b/uitest-regclient/src/main/java/regclient/api/GlobalConstants.java new file mode 100644 index 000000000..cde906119 --- /dev/null +++ b/uitest-regclient/src/main/java/regclient/api/GlobalConstants.java @@ -0,0 +1,15 @@ +package regclient.api; + +public class GlobalConstants { + public static final String EXCEPTION_STRING_2 = "Exception "; + public static final String REPORT_RESPONSE_PREFIX = "Actual Response Content: (EndPointUrl: "; + public static final String REPORT_RESPONSE_SUFFIX = ""; + public static final String REPORT_RESPONSE_BODY = ")
";
+	public static final String TRUE_STRING = "true";
+	public static final String FAIL_STRING = "FAIL";
+	public static final String PROPERTIES = "properties";
+	public static final String VALUE = "value";
+
+
+
+}
diff --git a/uitest-regclient/src/main/java/regclient/api/KernelAuthentication.java b/uitest-regclient/src/main/java/regclient/api/KernelAuthentication.java
new file mode 100644
index 000000000..b25e574a7
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/api/KernelAuthentication.java
@@ -0,0 +1,115 @@
+package regclient.api;
+
+import io.restassured.response.Response;
+import org.json.simple.JSONObject;
+
+import java.util.Map;
+
+
+public class KernelAuthentication extends BaseTestCase {
+	private final String authRequest="/config/Authorization/request.json";
+	private final String authInternalRequest="/config/Authorization/internalAuthRequest.json";
+	String cookie;
+	public String zonemapCookie = null;
+	static String dataKey = "response";
+	CommonLibrary clib= new CommonLibrary();
+	public final Map props = clib.readProperty("Kernel");
+	private final String admin_password = props.get("admin_password");
+	private final String admin_userName=props.get("admin_userName");
+	private final String authenticationInternalEndpoint = props.get("authenticationInternal");
+	private final ApplicationLibrary appl=new ApplicationLibrary();
+
+
+
+
+	public String getTokenByRole(String role) {
+		return getTokenByRole(role, null);
+	}
+
+	public String getTokenByRole(String role, String tokenType)
+	{
+		String insensitiveRole = null;
+		if(role!=null)
+			insensitiveRole = role.toLowerCase();
+		else return "";
+		
+		switch(insensitiveRole) {
+		
+		case "idrepo":
+			if(!kernelCmnLib.isValidToken(idrepoCookie))
+				idrepoCookie = kernelAuthLib.getAuthForIDREPO();
+			return idrepoCookie;
+		case "admin":
+			if(!kernelCmnLib.isValidToken(adminCookie))
+				adminCookie = kernelAuthLib.getAuthForAdmin();
+			return adminCookie;
+		case "globaladmin":
+			if(!kernelCmnLib.isValidToken(zonemapCookie))
+				zonemapCookie = kernelAuthLib.getAuthForzoneMap();
+			return zonemapCookie;
+		default:
+			if(!kernelCmnLib.isValidToken(adminCookie))
+				adminCookie = kernelAuthLib.getAuthForAdmin();
+			return adminCookie;			
+		}
+		 
+	}
+
+	
+
+	@SuppressWarnings("unchecked")
+	public String getAuthForIDREPO() {
+		JSONObject actualrequest = getRequestJson(authRequest);
+
+		JSONObject request=new JSONObject();
+		request.put("appId", ConfigManager.getidRepoAppId());
+		request.put("clientId", ConfigManager.getidRepoClientId());
+		request.put("secretKey", ConfigManager.getIdRepoClientSecret());
+		actualrequest.put("request", request);
+
+		Response reponse=appl.postWithJson(props.get("authclientidsecretkeyURL"), actualrequest);
+		cookie=reponse.getCookie("Authorization");
+		return cookie;
+	}
+
+	@SuppressWarnings("unchecked")
+	public String getAuthForAdmin() {
+
+		JSONObject actualrequest = getRequestJson(authInternalRequest);
+
+		JSONObject request = new JSONObject();
+		request.put("appId", ConfigManager.getAdminAppId());
+		request.put("password", admin_password);
+
+		//if(BaseTestCase.currentModule==null) admin_userName=
+		request.put("userName", BaseTestCase.currentModule +"-"+ admin_userName);
+
+		request.put("clientId", ConfigManager.getAdminClientId());
+		request.put("clientSecret", ConfigManager.getAdminClientSecret());
+		actualrequest.put("request", request);
+
+		Response reponse = appl.postWithJson(authenticationInternalEndpoint, actualrequest);
+		String responseBody = reponse.getBody().asString();
+		String token = new org.json.JSONObject(responseBody).getJSONObject(dataKey).getString("token");
+		return token;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public String getAuthForzoneMap() {
+
+		JSONObject actualrequest = getRequestJson(authInternalRequest);
+
+		JSONObject request = new JSONObject();
+		request.put("appId", ConfigManager.getAdminAppId());
+		request.put("password", admin_password);
+		request.put("userName", props.get("admin_zone_userName"));
+		request.put("clientId", ConfigManager.getAdminClientId());
+		request.put("clientSecret", ConfigManager.getAdminClientSecret());
+		actualrequest.put("request", request);
+
+		Response reponse = appl.postWithJson(authenticationInternalEndpoint, actualrequest);
+		String responseBody = reponse.getBody().asString();
+		String token = new org.json.JSONObject(responseBody).getJSONObject(dataKey).getString("token");
+		return token;
+	}
+}
diff --git a/uitest-regclient/src/main/java/regclient/api/KeycloakUserManager.java b/uitest-regclient/src/main/java/regclient/api/KeycloakUserManager.java
new file mode 100644
index 000000000..bca9480da
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/api/KeycloakUserManager.java
@@ -0,0 +1,190 @@
+package regclient.api;
+
+import org.keycloak.OAuth2Constants;
+import org.keycloak.admin.client.CreatedResponseUtil;
+import org.keycloak.admin.client.Keycloak;
+import org.keycloak.admin.client.KeycloakBuilder;
+import org.keycloak.admin.client.resource.RealmResource;
+import org.keycloak.admin.client.resource.UserResource;
+import org.keycloak.admin.client.resource.UsersResource;
+import org.keycloak.representations.idm.CredentialRepresentation;
+import org.keycloak.representations.idm.RoleRepresentation;
+import org.keycloak.representations.idm.UserRepresentation;
+
+import regclient.utils.TestRunner;
+
+import javax.ws.rs.core.Response;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+
+public class KeycloakUserManager {
+
+	public static String moduleSpecificUser = null;
+	public static String onboardUser = getDateTime();
+
+	private static final org.slf4j.Logger logger= org.slf4j.LoggerFactory.getLogger(KeycloakUserManager.class);
+
+	public static Properties propsKernel = getproperty(TestRunner.getResourcePath() + "/config/Kernel.properties");
+
+	private static Keycloak getKeycloakInstance() {
+		Keycloak key=null;
+		try {
+
+			key=KeycloakBuilder.builder().serverUrl(ConfigManager.getIAMUrl()).realm(ConfigManager.getIAMRealmId())
+					.grantType(OAuth2Constants.CLIENT_CREDENTIALS).clientId(ConfigManager.getAutomationClientId()).clientSecret(ConfigManager.getAutomationClientSecret())
+					.build();
+			System.out.println(ConfigManager.getIAMUrl());
+			System.out.println(key.toString() + key.realms());
+		}catch(Exception e)
+		{
+			throw e;
+
+		}
+		return key;
+	}
+
+	public static Properties getproperty(String path) {
+		Properties prop = new Properties();		
+		try {
+			File file = new File(path);
+			prop.load(new FileInputStream(file));
+		} catch (IOException e) {
+			logger.error("Exception " + e.getMessage());
+		}
+		return prop;
+	}
+
+	public static void createUsers() {
+		List needsToBeCreatedUsers = List.of(ConfigManager.getIAMUsersToCreate().split(","));
+		Keycloak keycloakInstance = getKeycloakInstance();
+		for (String needsToBeCreatedUser : needsToBeCreatedUsers) {
+			UserRepresentation user = new UserRepresentation();
+
+			if (needsToBeCreatedUser.equals("globaladmin")) {
+				moduleSpecificUser = needsToBeCreatedUser;
+			}
+			else if(needsToBeCreatedUser.equals("masterdata-220005")){
+				moduleSpecificUser = needsToBeCreatedUser;
+
+			}
+
+			else {
+				moduleSpecificUser = BaseTestCase.currentModule+"-"+ needsToBeCreatedUser;
+			}
+
+			logger.info(moduleSpecificUser);
+			user.setEnabled(true);
+			user.setUsername(moduleSpecificUser);
+			user.setFirstName(moduleSpecificUser);
+			user.setLastName(moduleSpecificUser);
+			user.setEmail("automation" + moduleSpecificUser + "@automationlabs.com");
+			// Get realm
+			RealmResource realmResource = keycloakInstance.realm(ConfigManager.getIAMRealmId());
+			UsersResource usersRessource = realmResource.users();
+			// Create user (requires manage-users role)
+			Response response = null;
+			response = usersRessource.create(user);
+			logger.info("Repsonse: %s %s%n"+ response.getStatus()+ response.getStatusInfo());
+			if (response.getStatus()==409) {
+				break;
+			}
+
+
+			String userId = CreatedResponseUtil.getCreatedId(response);
+			logger.info("User created with userId: %s%n"+ userId);
+
+			// Define password credential
+			CredentialRepresentation passwordCred = new CredentialRepresentation();
+
+			passwordCred.setTemporary(false);
+			passwordCred.setType(CredentialRepresentation.PASSWORD);
+
+			//passwordCred.setValue(userPassword.get(passwordIndex));
+			passwordCred.setValue(ConfigManager.getIAMUsersPassword());
+
+			UserResource userResource = usersRessource.get(userId);
+
+			// Set password credential
+			userResource.resetPassword(passwordCred);
+
+			// Getting all the roles
+			List allRoles = realmResource.roles().list();
+			List availableRoles = new ArrayList<>();
+			List toBeAssignedRoles = List.of(ConfigManager.getRolesForUser().split(","));
+			for(String role : toBeAssignedRoles) {
+				if(allRoles.stream().anyMatch((r->r.getName().equalsIgnoreCase(role)))){
+					availableRoles.add(allRoles.stream().filter(r->r.getName().equals(role)).findFirst().get());
+				}else {
+					logger.info("Role not found in keycloak: %s%n"+ role);
+				}
+			}
+			// Assign realm role tester to user
+			userResource.roles().realmLevel() //
+			.add((availableRoles.isEmpty() ? allRoles : availableRoles));
+
+			//passwordIndex ++;
+		}
+	}
+
+	public static void createUsersWithOutDefaultRole() {
+		Keycloak keycloakInstance = getKeycloakInstance();
+		UserRepresentation user = new UserRepresentation();
+		logger.info(onboardUser);
+		user.setEnabled(true);
+		user.setUsername(onboardUser);
+		user.setFirstName(onboardUser);
+		user.setLastName(onboardUser);
+		user.setEmail("automation" + onboardUser + "@automationlabs.com");
+		RealmResource realmResource = keycloakInstance.realm(ConfigManager.getIAMRealmId());
+		UsersResource usersRessource = realmResource.users();
+		Response response = null;
+		response = usersRessource.create(user);
+		logger.info("Repsonse: %s %s%n"+ response.getStatus()+ response.getStatusInfo());
+
+		String userId = CreatedResponseUtil.getCreatedId(response);
+		logger.info("User created with userId: %s%n"+ userId);
+
+		CredentialRepresentation passwordCred = new CredentialRepresentation();
+
+		passwordCred.setTemporary(false);
+		passwordCred.setType(CredentialRepresentation.PASSWORD);
+
+		passwordCred.setValue(ConfigManager.getIAMUsersPassword());
+
+		UserResource userResource = usersRessource.get(userId);
+
+		userResource.resetPassword(passwordCred);
+
+		List allRoles = realmResource.roles().list();
+		List availableRoles = new ArrayList<>();
+		List toBeAssignedRoles = List.of(ConfigManager.getRolesForUser().split(","));
+		for(String role : toBeAssignedRoles) {
+			if(!role.equalsIgnoreCase("Default")) {
+			if(allRoles.stream().anyMatch((r->r.getName().equalsIgnoreCase(role)))){
+				availableRoles.add(allRoles.stream().filter(r->r.getName().equals(role)).findFirst().get());
+			}else {
+				logger.info("Role not found in keycloak: %s%n"+ role);
+			}
+		}
+		userResource.roles().realmLevel() //
+		.add((availableRoles.isEmpty() ? allRoles : availableRoles));
+
+		}
+	}
+
+
+	public static String getDateTime() {
+		LocalDateTime currentDateTime = LocalDateTime.now();
+		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+		String formattedDateTime = currentDateTime.format(formatter);
+		return formattedDateTime;
+	}
+
+}
diff --git a/uitest-regclient/src/main/java/regclient/api/RestClient.java b/uitest-regclient/src/main/java/regclient/api/RestClient.java
new file mode 100644
index 000000000..c2b5c4f19
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/api/RestClient.java
@@ -0,0 +1,128 @@
+package regclient.api;
+
+import io.restassured.RestAssured;
+import io.restassured.config.HttpClientConfig;
+import io.restassured.config.RestAssuredConfig;
+import io.restassured.response.Response;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.testng.log4testng.Logger;
+
+import static io.restassured.RestAssured.given;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class RestClient {
+	public static String ZONECODE;
+	private static final Logger RESTCLIENT_LOGGER = Logger.getLogger(RestClient.class);
+	private static final RestAssuredConfig config = RestAssured.config()
+			.httpClient(HttpClientConfig.httpClientConfig().setParam("http.connection.timeout", 500000)
+					.setParam("http.socket.timeout", 500000).setParam("http.connection-manager.timeout", 500000));
+
+
+
+
+	public static Response getRequest(String url, String contentHeader, String acceptHeader) {
+		RESTCLIENT_LOGGER.info("RESSURED: Sending a GET request to " + url);
+		Response getResponse = given().config(config).relaxedHTTPSValidation().log().all().when().get(url).then().log()
+				.all().extract().response();
+		RESTCLIENT_LOGGER.info("REST-ASSURED: The response from the request is: " + getResponse.asString());
+		RESTCLIENT_LOGGER.info("REST-ASSURED: The response Time is: " + getResponse.time());
+		return getResponse;
+	}
+
+	public static Response getRequestWithCookie(String url, String contentHeader, String acceptHeader,
+			String cookieName, String cookieValue) {
+		RESTCLIENT_LOGGER.info("REST-ASSURED: Sending a GET request to " + url);
+		Response getResponse = given().config(config).relaxedHTTPSValidation().cookie(cookieName, cookieValue).log()
+				.all().when().get(url).then().log().all().extract().response();
+		RESTCLIENT_LOGGER.info("REST-ASSURED: The response from the request is: " + getResponse.asString());
+		RESTCLIENT_LOGGER.info("REST-ASSURED: The response Time is: " + getResponse.time());
+		return getResponse;
+	}
+
+	public static Response postRequestWithCookie(String url, Object body, String contentHeader, String acceptHeader,
+			String cookieName, String cookieValue) {
+		RESTCLIENT_LOGGER.info("REST-ASSURED: Sending a POST request to " + url);
+		Response postResponse = given().config(config).relaxedHTTPSValidation().body(body).contentType(contentHeader)
+				.cookie(cookieName, cookieValue).accept(acceptHeader).log().all().when().post(url).then().log().all()
+				.extract().response();
+		RESTCLIENT_LOGGER.info("REST-ASSURED: The response from the request is: " + postResponse.asString());
+		RESTCLIENT_LOGGER.info("REST-ASSURED: The response Time is: " + postResponse.time());
+		return postResponse;
+	}
+//	
+	public static Response postReqestWithCookiesAndBody(String url, String body, String token, String opsToLog) {
+		Response posttResponse = null;
+		if (ConfigManager.IsDebugEnabled()) {
+			posttResponse = given().relaxedHTTPSValidation().body(body).contentType("application/json")
+					.accept("*/*").log().all().when().cookie("Authorization", token).post(url).then().log().all()
+					.extract().response();
+		} else {
+			posttResponse = given().relaxedHTTPSValidation().body(body).contentType("application/json")
+					.accept("*/*").when().cookie("Authorization", token).post(url).then().extract().response();
+		}
+		//GlobalMethods.ReportRequestAndResponse("", "", url, body, posttResponse.getBody().asString());
+		return posttResponse;
+	}
+	
+	
+	public static Response patchRequestWithCookieAndQueryParm(String url, HashMap body,
+			String contentHeader, String acceptHeader, String cookieName, String cookieValue) {
+		RESTCLIENT_LOGGER.info("REST-ASSURED: Sending a PATCH request to " + url);
+		Response postResponse = given().config(config).relaxedHTTPSValidation().queryParams(body)
+				.contentType(contentHeader).cookie(cookieName, cookieValue).accept(acceptHeader).log().all().when()
+				.patch(url).then().log().all().extract().response();
+		RESTCLIENT_LOGGER.info(postResponse.asString());
+		RESTCLIENT_LOGGER.info(postResponse.time());
+		return postResponse;
+	}
+	
+	public static Response getRequestWithCookieAndQueryParm(String url, HashMap body,
+			String contentHeader, String acceptHeader, String cookieName, String cookieValue) {
+		RESTCLIENT_LOGGER.info("REST-ASSURED: Sending a get request to " + url);
+		Response postResponse = given().config(config).relaxedHTTPSValidation().queryParams(body)
+				.contentType(contentHeader).cookie(cookieName, cookieValue).accept(acceptHeader).log().all().when()
+				.get(url).then().log().all().extract().response();
+		RESTCLIENT_LOGGER.info(postResponse.asString());
+		RESTCLIENT_LOGGER.info(postResponse.time());
+		return postResponse;
+	}
+	
+	public static Response getRequestWithCookieAndPathParm(String url, Map body, String contentHeader,
+			String acceptHeader, String cookieName, String cookieValue) {
+		Response getResponse;
+		JSONObject responseJson = null;
+
+			RESTCLIENT_LOGGER.info("REST-ASSURED: Sending a GET request to " + url);
+			
+			getResponse = given().config(config).relaxedHTTPSValidation().pathParams(body)
+					.cookie(cookieName, cookieValue).log().all().when().get(url).then().log().all().extract()
+					.response();
+			
+			RESTCLIENT_LOGGER.info( getResponse.asString());
+			RESTCLIENT_LOGGER.info( getResponse.time());
+			responseJson = new JSONObject(getResponse.getBody().asString());
+			if(responseJson.has("response")) {
+				org.json.JSONArray responseArray = responseJson.getJSONArray("response");
+			 ZONECODE = getZoneCode (responseArray,"code");
+				RESTCLIENT_LOGGER.info( ZONECODE);
+				
+			}
+			
+
+		return getResponse;
+	}
+	
+	static String getZoneCode(JSONArray responseArray, String code) {
+		String  ZoneCode="";
+	
+		for (int i = 0; i < responseArray.length(); i++) {
+			ZoneCode = responseArray.getJSONObject(i).getString("code");
+		}
+		
+		return ZoneCode;
+	}
+}
\ No newline at end of file
diff --git a/uitest-regclient/src/main/java/regclient/driver/DriverManager.java b/uitest-regclient/src/main/java/regclient/driver/DriverManager.java
index 28e7188bd..f8e355e04 100644
--- a/uitest-regclient/src/main/java/regclient/driver/DriverManager.java
+++ b/uitest-regclient/src/main/java/regclient/driver/DriverManager.java
@@ -18,7 +18,7 @@ public class DriverManager {
 	private static AppiumDriverLocalService service = null;
 
 	private static AppiumDriver getAndroidDriver() {
-		DesiredCapabilities desiredCapabilities = CapabilitiesReader.getDesiredCapabilities("androidDevice", "src/main/resources/DesiredCapabilities.json");
+		DesiredCapabilities desiredCapabilities = CapabilitiesReader.getDesiredCapabilities("androidDevice", "/DesiredCapabilities.json");
 		appiumDriver.set(new AndroidDriver(service.getUrl(), desiredCapabilities));
 		return appiumDriver.get();
 	}
diff --git a/uitest-regclient/src/main/java/regclient/page/BasePage.java b/uitest-regclient/src/main/java/regclient/page/BasePage.java
index d7f7b12c1..c8be843b1 100644
--- a/uitest-regclient/src/main/java/regclient/page/BasePage.java
+++ b/uitest-regclient/src/main/java/regclient/page/BasePage.java
@@ -5,7 +5,9 @@
 import io.appium.java_client.pagefactory.AppiumFieldDecorator;
 import io.netty.handler.timeout.TimeoutException;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.Dimension;
+import org.openqa.selenium.NoSuchElementException;
 import org.openqa.selenium.StaleElementReferenceException;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.interactions.Pause;
@@ -15,6 +17,9 @@
 import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.WebDriverWait;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import static java.time.Duration.ofSeconds;
 
 import java.awt.Toolkit;
@@ -29,9 +34,13 @@
 import java.time.format.DateTimeFormatter;
 import java.util.Collections;
 import java.util.Locale;
+import java.util.Random;
 
 public class BasePage {
 	protected AppiumDriver driver;
+	private static String signPublicKey;
+	private static String publicKey;
+	private static String name;
 
 	public BasePage(AppiumDriver driver) {
 		this.driver = driver;
@@ -86,6 +95,17 @@ protected void clickAndsendKeysToTextBox(WebElement element, String text) {
 		waitTime(1);
 		((HidesKeyboard) driver).hideKeyboard();
 	}
+	
+	protected void sendKeysToTextBox(WebElement element, String text) {
+		this.waitForElementToBeVisible(element);
+		element.click();
+		waitTime(1);
+		element.clear();
+		waitTime(1);
+		element.sendKeys(text);
+		waitTime(1);
+		driver.navigate().back();	
+	}
 
 	protected String getTextFromLocator(WebElement element) {
 		this.waitForElementToBeVisible(element);
@@ -102,14 +122,14 @@ protected void cropCaptureImage(WebElement element) {
 				.addAction(finger1.createPointerUp(PointerInput.MouseButton.LEFT.asArg()));
 		driver.perform(Collections.singletonList(sequence));
 	}
-	
+
 	private org.openqa.selenium.Point getCenterOfElement(org.openqa.selenium.Point point, Dimension size) {
-	    int x = (int) (point.getX() + size.getWidth() / 2);
-	    int y = (int) (point.getY() + size.getHeight()/ 2);
-	    return new org.openqa.selenium.Point(x, y);
+		int x = (int) (point.getX() + size.getWidth() / 2);
+		int y = (int) (point.getY() + size.getHeight()/ 2);
+		return new org.openqa.selenium.Point(x, y);
 	}
 
-	
+
 	protected void waitForElementToBeVisible(WebElement element, int waitTime) {
 		WebDriverWait wait = new WebDriverWait(driver, ofSeconds(waitTime));
 		wait.until(ExpectedConditions.visibilityOf(element));
@@ -143,35 +163,35 @@ protected boolean isElementDisplayedOnScreen(WebElement element) {
 	}
 
 	public static void disableAutoRotation() {
-	    try {
-	        ProcessBuilder processBuilder;
-	        String osName = System.getProperty("os.name");
-	        if (osName.contains("Windows")) {
-	            processBuilder = new ProcessBuilder("cmd.exe", "/c", "adb shell settings put system accelerometer_rotation 0");
-	           
-	        } else {
-	            processBuilder = new ProcessBuilder("/bin/bash", "-c", "adb shell settings put system accelerometer_rotation 0");
-	        }
-	        processBuilder.redirectErrorStream(true);
-	        processBuilder.start();
-	    } catch (IOException e) {
-	        throw new RuntimeException(e);
-	    }
+		try {
+			ProcessBuilder processBuilder;
+			String osName = System.getProperty("os.name");
+			if (osName.contains("Windows")) {
+				processBuilder = new ProcessBuilder("cmd.exe", "/c", "adb shell settings put system accelerometer_rotation 0");
+
+			} else {
+				processBuilder = new ProcessBuilder("/bin/bash", "-c", "adb shell settings put system accelerometer_rotation 0");
+			}
+			processBuilder.redirectErrorStream(true);
+			processBuilder.start();
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
 	}
-	
+
 	protected String  getCurrentDate() {
 		LocalDateTime currentDateTime = LocalDateTime.now();
 		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");      
 		return  currentDateTime.format(formatter);
 	}
-	
+
 	protected String  getCurrentDateWord() {
-		 LocalDate today = LocalDate.now();
-	        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE d MMMM", Locale.ENGLISH);
-	        String formattedDate = today.format(formatter);
-			return formattedDate;
+		LocalDate today = LocalDate.now();
+		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE d MMMM", Locale.ENGLISH);
+		String formattedDate = today.format(formatter);
+		return formattedDate;
 	}
-	
+
 	public static void waitTime(int sec) {
 		try {
 			Thread.sleep(sec*1000);
@@ -179,31 +199,31 @@ public static void waitTime(int sec) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
-		
+
 	}
-	
+
 	public WebElement retryFindElement(WebElement element, Duration timeout) {
 		int attempts = 0;
-	    int maxAttempts = 5;
+		int maxAttempts = 5;
+
+		while (attempts < maxAttempts) {
+			try {
+				WebDriverWait wait = new WebDriverWait(driver, timeout);
+				wait.until(ExpectedConditions.visibilityOf(element));
+				return element;
+			} catch (StaleElementReferenceException e) {
+				System.out.println("StaleElementReferenceException caught. Retrying... " + attempts);
+				attempts++;
+			} catch (TimeoutException e) {
+				System.out.println("TimeoutException caught. Retrying... " + attempts);
+				attempts++;
+			}
+		}
+		throw new RuntimeException("Element not found after " + maxAttempts + " attempts");
+	}
+
 
-	    while (attempts < maxAttempts) {
-	        try {
-	            WebDriverWait wait = new WebDriverWait(driver, timeout);
-	            wait.until(ExpectedConditions.visibilityOf(element));
-	            return element;
-	        } catch (StaleElementReferenceException e) {
-	            System.out.println("StaleElementReferenceException caught. Retrying... " + attempts);
-	            attempts++;
-	        } catch (TimeoutException e) {
-	            System.out.println("TimeoutException caught. Retrying... " + attempts);
-	            attempts++;
-	        }
-	    }
-	    throw new RuntimeException("Element not found after " + maxAttempts + " attempts");
-    }
-	
 
-	
 	protected void clickAndHold() {
 		PointerInput finger1 = new PointerInput(PointerInput.Kind.TOUCH, "finger1");
 		Sequence sequence = new Sequence(finger1, 1)
@@ -212,14 +232,190 @@ protected void clickAndHold() {
 				.addAction(new Pause(finger1, Duration.ofMillis(20000)));
 		driver.perform(Collections.singletonList(sequence));
 	}
-	
-	protected String getMachineDetails() throws UnsupportedFlavorException, IOException {
+
+	protected void getMachineDetail() throws UnsupportedFlavorException, IOException, InterruptedException {
 		Toolkit toolkit = Toolkit.getDefaultToolkit();
-        Clipboard clipboard = toolkit.getSystemClipboard();
-        Transferable contents = clipboard.getContents(null);
-        String copiedText = (String) contents.getTransferData(DataFlavor.stringFlavor);
-        System.out.println("Copied Text: " + copiedText);
-		return copiedText;
+		Clipboard clipboard = toolkit.getSystemClipboard();
+		Transferable contents = clipboard.getContents(null);
+		if (contents != null && contents.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+
+			String copiedText = (String) contents.getTransferData(DataFlavor.stringFlavor);
+			ObjectMapper objectMapper = new ObjectMapper();
+			JsonNode jsonNode = objectMapper.readTree(copiedText);
+
+			signPublicKey = jsonNode.get("signPublicKey").asText();
+			publicKey = jsonNode.get("publicKey").asText();
+			name = jsonNode.get("name").asText();
+		} else {
+			throw new UnsupportedFlavorException(DataFlavor.stringFlavor);
+		}
+	}
+
+	public static String getSignPublicKey() {
+		return signPublicKey;
+	}
+
+	public static String getPublicKey() {
+		return publicKey;
+	}
+
+	public static String getName() {
+		return name;
+	}
+	
+	public WebElement findElementWithRetry(By by) {
+	    int MAX_RETRIES = 10;
+	    int RETRY_DELAY_MS = 2000;
+	    WebElement element = null;
+
+	    for (int i = 0; i < MAX_RETRIES; i++) {
+	        try {
+	        	 try {
+	                    Thread.sleep(RETRY_DELAY_MS); // Wait before retrying
+	                } catch (InterruptedException ie) {
+	                    Thread.currentThread().interrupt(); // Restore interrupted status
+	                }
+	            element = driver.findElement(by);
+	            break; // Exit loop if the element is found
+	        } catch (NoSuchElementException e) {
+	            if (i < MAX_RETRIES - 1) {
+	                swipeOrScroll(); // Call swipeOrScroll() after retry attempt fails
+	            } else {
+	                System.out.println("Element not found after " + MAX_RETRIES + " attempts.");
+	              //  throw e; // Optionally re-throw the exception if all retries fail
+	            }
+	        }
+	    }
+
+	    return element;
 	}
 
+	 
+	 public WebElement findElement(By by) {
+		    int MAX_RETRIES = 10;
+		    int RETRY_DELAY_MS = 1000;
+		    WebElement element = null;
+
+		    for (int i = 0; i < MAX_RETRIES; i++) {
+		        try {
+		            element = driver.findElement(by);
+		            break; // Exit loop if the element is found
+		        } catch (NoSuchElementException e) {
+		            if (i < MAX_RETRIES - 1) {
+		                try {
+		                    Thread.sleep(RETRY_DELAY_MS); // Wait before retrying
+		                } catch (InterruptedException ie) {
+		                    Thread.currentThread().interrupt(); // Restore interrupted status
+		                }
+		            } else {
+		                throw new NoSuchElementException("Element not found after " + MAX_RETRIES + " attempts.");
+		            }
+		        }
+		    }
+
+		    return element;
+		}
+
+	 
+	 protected boolean isElementDisplayed(By by) {
+		    int attempts = 0;
+		    while (attempts < 4) {
+		        try {
+		            waitForElementToBeVisible(driver.findElement(by));
+		            return driver.findElement(by).isDisplayed();
+		        } catch (Exception e) {
+		            attempts++;
+		            if (attempts == 4) {
+		                return false; // After 3 attempts, return false
+		            }
+		        }
+		    }
+		    return false;
+		}
+	 
+	 protected void clickAtCoordinates(int x, int y) {
+		    PointerInput finger = new PointerInput(PointerInput.Kind.TOUCH, "finger");
+		    Sequence clickSequence = new Sequence(finger, 1)
+		            .addAction(finger.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), x, y)) // Move to x, y coordinates
+		            .addAction(finger.createPointerDown(PointerInput.MouseButton.LEFT.asArg())) // Press down at x, y coordinates
+		            .addAction(new Pause(finger, Duration.ofMillis(200))) // Pause for 200ms
+		            .addAction(finger.createPointerUp(PointerInput.MouseButton.LEFT.asArg())); // Release at x, y coordinates
+		    driver.perform(Collections.singletonList(clickSequence));
+		}
+	 
+	    private static final Random random = new Random();
+
+	    public static String generateData(String validator) {
+	        if (validator == null || validator.isEmpty()) {
+	            return generateStringOfLength(3, 30);
+	        }
+
+	        switch (validator) {
+	            case "^(?=.{2,50}$).*":
+	                return generateStringOfLength(2, 30);
+
+	            case "^[0-9]{6}[/][0-9]{2}[/][0-9]{1}$":
+	                return generateSixDigitNumber() + "/" + generateTwoDigitNumber() + "/" + generateOneDigitNumber();
+
+	            case "^(1869|18[7-9][0-9]|19[0-9][0-9]|20[0-9][0-9])/([0][1-9]|1[0-2])/([0][1-9]|[1-2][0-9]|3[01])$":
+	                return generateDateInRange();
+
+	            case "^(?=.{3,50}$).*":
+	                return generateStringOfLength(3, 30);
+
+	            case "^[+]*([0-9]{1})([0-9]{9})$":
+	                return generateNineDigitNumber() + "1";
+
+	            case "^[0-9]{9}$":
+	                return generateNineDigitNumber();
+
+	            case "^[A-Za-z0-9_\\-]+(\\.[A-Za-z0-9_]+)*@[A-Za-z0-9_-]+(\\.[A-Za-z0-9_]+)*(\\.[a-zA-Z]{2,})$":
+	                return generateEmail();
+
+	            default:
+	                return "abcd";
+	        }
+	    }
+
+
+	    private static String generateStringOfLength(int min, int max) {
+	        int length = min + random.nextInt(max - min + 1);
+	        StringBuilder sb = new StringBuilder(length);
+	        for (int i = 0; i < length; i++) {
+	            char c = (char) (random.nextInt(26) + 'a');
+	            sb.append(c);
+	        }
+	        return sb.toString();
+	    }
+
+	    private static String generateSixDigitNumber() {
+	        return String.format("%06d", random.nextInt(1000000));
+	    }
+
+	    private static String generateTwoDigitNumber() {
+	        return String.format("%02d", random.nextInt(100));
+	    }
+
+	    private static String generateOneDigitNumber() {
+	        return String.valueOf(random.nextInt(10));
+	    }
+
+	    private static String generateDateInRange() {
+	        int year = 1869 + random.nextInt(200); // Generates a year between 1869 and 2068
+	        int month = 1 + random.nextInt(12);    // Generates a month between 1 and 12
+	        int day = 1 + random.nextInt(28);      // Generates a day between 1 and 28 (to keep it simple)
+
+	        return String.format("%04d/%02d/%02d", year, month, day);
+	    }
+
+	    private static String generateNineDigitNumber() {
+	        return String.format("%09d", random.nextInt(1000000000));
+	    }
+
+	    private static String generateEmail() {
+	        String[] domains = {"example.com", "test.com", "email.com"};
+	        String localPart = generateStringOfLength(3, 10);
+	        String domain = domains[random.nextInt(domains.length)];
+	        return localPart + "@" + domain;
+	    }
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/BiometricDetailsPage.java b/uitest-regclient/src/main/java/regclient/page/BiometricDetailsPage.java
index df8b4f374..26e299aca 100644
--- a/uitest-regclient/src/main/java/regclient/page/BiometricDetailsPage.java
+++ b/uitest-regclient/src/main/java/regclient/page/BiometricDetailsPage.java
@@ -29,4 +29,12 @@ public BiometricDetailsPage(AppiumDriver driver) {
 	public abstract  PreviewPage clickOnContinueButton();
 	
 	public abstract  boolean isAuthenticationBiometricTitleDisplayed();
+	
+    public abstract IntroducerBiometricPage clickOnIntroducerRightHandScan();
+
+    public abstract IntroducerBiometricPage clickOnIntroducerLeftHandScan();
+
+    public abstract IntroducerBiometricPage clickOnIntroducerThumbScan();
+
+    public abstract IntroducerBiometricPage clickOnIntroducerFaceScan();
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/CameraPage.java b/uitest-regclient/src/main/java/regclient/page/CameraPage.java
index 08cd7ec70..67be880c9 100644
--- a/uitest-regclient/src/main/java/regclient/page/CameraPage.java
+++ b/uitest-regclient/src/main/java/regclient/page/CameraPage.java
@@ -1,30 +1,36 @@
 package regclient.page;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.utils.TestDataReader;
 ;
 
 public class CameraPage  extends BasePage{
 
-	@AndroidFindBy(id = "com.motorola.camera3:id/capture_bar_shutter_button")
-	private WebElement clickImageButton;
-	
 	@AndroidFindBy(xpath = "//android.widget.TextView[@text=\"OK\"]")
 	private WebElement okButton;
-	
+
 	public CameraPage(AppiumDriver driver) {
 		super(driver);
 	}
-	
+
 	public  void clickOkButton() {
 		if(isElementDisplayed(okButton))
 			clickOnElement(okButton);		
+		else {
+			waitTime(7);
+			clickAtCoordinates(633,2042);
+		}
 	}
-	
+
 	public  void clickimage() {
-		clickOnElement(clickImageButton);
+		waitTime(2);
+		isElementDisplayed(driver.findElement(By.id(TestDataReader.readData("id"))));
+		clickOnElement(driver.findElement(By.id(TestDataReader.readData("id"))));
+
 	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/DemographicDetailsPage.java b/uitest-regclient/src/main/java/regclient/page/DemographicDetailsPage.java
index 14577c174..7d39b1439 100644
--- a/uitest-regclient/src/main/java/regclient/page/DemographicDetailsPage.java
+++ b/uitest-regclient/src/main/java/regclient/page/DemographicDetailsPage.java
@@ -10,81 +10,25 @@ public DemographicDetailsPage(AppiumDriver driver) {
 	}
 	
 	public abstract boolean isDemographicDetailsPageDisplayed();
-	
-	public abstract boolean isErrorMessageInvalidInputTextDisplayed();
-	
-	public abstract  ConsentPage clickOnConsentPageTitle();
-
-	public abstract  void enterFullName(String fullName);
-
-	public abstract  void enterAddressLine1(String addressLine1);
-
-	public abstract  void enterAddressLine2(String addressLine2);
-
-	public abstract  void enterAddressLine3(String addressLine3);
-
-	public abstract  void enterAge(String age);
-
-	public abstract boolean checkFullNameSecondLanguageTextBoxNotNull();
-
-	public abstract boolean isResidenceStatusHeaderDisplayed();
-
-	public abstract boolean isRegionHeaderDisplayed();
-
-	public abstract boolean isProvinceHeaderDisplayed();
-
-	public abstract boolean isCityHeaderDisplayed();
-
-	public abstract boolean isPostalCodeHeaderDisplayed();
-
-	public abstract boolean isMobileNumberHeaderDisplayed();
 
-	public abstract boolean isZoneHeaderDisplayed();
-
-	public abstract boolean isEmailHeaderDisplayed();
-	
-	public abstract boolean isIntroducerNameHeaderDisplayed();
-	
-	public abstract boolean isIntroducerRidHeaderDisplayed();
-	
-	public abstract  void selectGender(String gender);
-
-	public abstract  void selectMaritalStatus();
-
-	public abstract  void selectResidenceStatus(String ResidenceStatus);
+	public abstract boolean isErrorMessageInvalidInputTextDisplayed();
 
-	public abstract  void selectRegionStatus(String region);
-	
-	public abstract  void selectProvinceStatus(String province);
+	public abstract ConsentPage clickOnConsentPageTitle();
 
-	public abstract  void selectCityStatus(String city);
+	public abstract DocumentUploadPage clickOnContinueButton();
 
-	public abstract  void selectZoneStatus();
+	public abstract boolean isPreRegFetchDataTextBoxDisplay();
 
-	public abstract  void selectPostalStatus();
+	public abstract void fillDemographicDetailsPage(String age);
 
-	public abstract  DocumentUploadPage clickOnContinueButton();
+	public abstract void editDemographicDetailsPage(String age);
 
-	public abstract  void enterMobileNumber(String mobileNumber);
+	public abstract boolean checkSecondLanguageTextBoxNotNull(String id);
 
-	public abstract  void enterEmailID(String EmailID);
+	public abstract boolean checkDateFormatAndCurrectDate(String id);
 	
-	public abstract  void enterIntroducerName(String EmailID);
+	public abstract void fillIntroducerDetailsInDemographicDetailsPage(String age);
 	
-	public abstract  void enterIntroducerRid(String EmailID);
-	
-	public abstract  void selectCurrentCalenderDate();
-	
-	public abstract  void closeCalender();
-	
-	public abstract  boolean checkDateFormatAndCurrectDate();
-	
-	public abstract boolean checkAddress1SecondLanguageTextBoxNotNull();
-
-	public abstract boolean checkAddress2SecondLanguageTextBoxNotNull();
-
-	public abstract boolean checkAddress3SecondLanguageTextBoxNotNull();
-
-	public abstract boolean checkIntroducerNameTextBoxSecondLangaugeTextBoxNotNull();
+	public abstract  boolean isContinueButtonEnable();
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/DocumentUploadPage.java b/uitest-regclient/src/main/java/regclient/page/DocumentUploadPage.java
index 579d91633..a04b0152a 100644
--- a/uitest-regclient/src/main/java/regclient/page/DocumentUploadPage.java
+++ b/uitest-regclient/src/main/java/regclient/page/DocumentUploadPage.java
@@ -9,55 +9,17 @@ public DocumentUploadPage(AppiumDriver driver) {
         super(driver);
     }
 
-    public abstract void selectAddressProof();
-
-	public abstract void selectIdentityProof();
-
-	public abstract void selectDobProof();
-
-	public abstract void selectRelationshipProof();
-
-	public abstract void selectOnCaptureImage();
-
-	public abstract void closePopUpClose();
-
-	public abstract CameraPage clickOnAddressProofScanButton();
-
-	public abstract CameraPage clickOnScanButtonDobProof();
-
-	public abstract CameraPage clickOnScanButtonIdentityProof();
-
-	public abstract CameraPage clickOnScanButtonRelationshipProof();
-
-	public abstract void clickOnBackButton();
-
-	public abstract void clickOnDeleteButton();
-
 	public abstract  BiometricDetailsPage clickOnContinueButton();
-
-	public abstract  boolean isImageDisplyed();
-
-	public abstract  boolean isSecondImageDisplyed();
-
-	public abstract  boolean isThirdImageDisplyed();
-
-	public abstract  boolean isDeleteButtonDisplyed();
-
+	
 	public abstract boolean isDoccumentUploadPageDisplayed();
-
-	public abstract boolean isDobHeaderDisplayed();
-
-	public abstract  boolean isScanButtonAddressProofEnabled();
-
-	public abstract  boolean isScanButtonIdentityProofEnabled() ;
-
-	public abstract  boolean isScanButtonDobProofEnabled();
-
-	public abstract  boolean isScanButtonRelationshipProoffEnabled();
 	
-	public abstract  void enterReferenceNumberInAdressProof();
+	public abstract  DocumentUploadPage clickOnSaveButton();
+	
+	public abstract boolean isRetakeButtonDisplayed();
+	
+	public abstract void cropCaptureImage();
 	
-	public abstract  void enterReferenceNumberInIdentityProof();
+	public abstract void uploadDoccuments(String age,String type);
 	
-	public abstract  void enterReferenceNumberInDobProof();
+	public abstract void uploadDoccumentsUpdate(String age,String type);
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/ManageApplicationsPage.java b/uitest-regclient/src/main/java/regclient/page/ManageApplicationsPage.java
index 6ff58de79..eaded2e1d 100644
--- a/uitest-regclient/src/main/java/regclient/page/ManageApplicationsPage.java
+++ b/uitest-regclient/src/main/java/regclient/page/ManageApplicationsPage.java
@@ -61,4 +61,6 @@ public ManageApplicationsPage(AppiumDriver driver) {
 	public abstract boolean isDeletionDropdownOptionDisplayed();
 	
 	public abstract void clickOnBackButton();
+	
+	public abstract boolean isPacketRejected(String AID);
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/OperationalTaskPage.java b/uitest-regclient/src/main/java/regclient/page/OperationalTaskPage.java
index 61ef9d5c7..9201f9749 100644
--- a/uitest-regclient/src/main/java/regclient/page/OperationalTaskPage.java
+++ b/uitest-regclient/src/main/java/regclient/page/OperationalTaskPage.java
@@ -19,4 +19,8 @@ public OperationalTaskPage(AppiumDriver driver) {
 	public abstract  void clickApplicationUploadTitle();
 	
 	public abstract boolean isApplicationUploadTitleDisplayed();
+	
+    public abstract void clickPendingApprovalTitle();
+
+    public abstract boolean isPendingApprovalTitleDisplayed();
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/PendingApproval.java b/uitest-regclient/src/main/java/regclient/page/PendingApproval.java
new file mode 100644
index 000000000..b75355816
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/page/PendingApproval.java
@@ -0,0 +1,51 @@
+package regclient.page;
+
+import io.appium.java_client.AppiumDriver;
+
+public abstract class PendingApproval  extends BasePage{
+
+	public PendingApproval(AppiumDriver driver) {
+		super(driver);
+	}
+	
+	public abstract boolean isPendingApprovalTitleDisplayed();
+
+    public abstract void clickOnAID(String AID);
+
+    public abstract void clickOnApproveButton();
+
+    public abstract void clickOnClosePopUpButton();
+
+    public abstract void clickOnCheckBox();
+
+    public abstract void clickOnSubmitButton();
+
+    public abstract boolean isSupervisorAuthenticationTitleDisplayed();
+
+    public abstract void enterUserName(String username);
+
+    public abstract void enterPassword(String password);
+
+    public abstract void clickOnBackButton();
+    
+    public abstract boolean isApprovalButtonDisplayed();
+    
+    public abstract boolean isPageAttributesDisplayed();
+    
+    public abstract boolean isClientStatusDisplayed();
+    
+    public abstract boolean isReviewStatusDisplayed();
+    
+    public abstract  void enterAID(String AID);
+    
+    public abstract boolean isRejectButtonDisplayed();
+    
+    public abstract void clickOnRejectButton();
+    
+    public abstract void selectRejectionReasonDropdown();
+    
+    public abstract boolean isRejectPacketTitleDisplayed();
+    
+    public abstract boolean isSubmitButtonEnabled();
+
+}
diff --git a/uitest-regclient/src/main/java/regclient/page/RegistrationTasksPage.java b/uitest-regclient/src/main/java/regclient/page/RegistrationTasksPage.java
index 1c1b02a7a..0a3123b2e 100644
--- a/uitest-regclient/src/main/java/regclient/page/RegistrationTasksPage.java
+++ b/uitest-regclient/src/main/java/regclient/page/RegistrationTasksPage.java
@@ -32,4 +32,15 @@ public RegistrationTasksPage(AppiumDriver driver) {
 	public abstract  ProfilePage clickProfileButton();
 	
 	public abstract  SelectLanguagePage clickUpdateMyUINButton();
+	
+	public abstract boolean isUpdateUINTitleDisplayed();
+	
+	public abstract boolean isLostUINTitleDisplayed();
+		
+	public abstract boolean isBiometricCorrectionTitleDisplayed();
+	
+    public abstract void clickSynchronizeDataButton();
+
+    public abstract boolean checkLastSyncDate();
+
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/SupervisorBiometricVerificationpage.java b/uitest-regclient/src/main/java/regclient/page/SupervisorBiometricVerificationpage.java
index 4f090fc6c..5eb3a63d7 100644
--- a/uitest-regclient/src/main/java/regclient/page/SupervisorBiometricVerificationpage.java
+++ b/uitest-regclient/src/main/java/regclient/page/SupervisorBiometricVerificationpage.java
@@ -104,4 +104,6 @@ public SupervisorBiometricVerificationpage(AppiumDriver driver) {
 	public abstract boolean isOperatorOnboardedPopupLoaded();
 	
 	public abstract void clickOnHomeButton();
+	
+	public abstract void clickOnBackButton();
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/UpdateOperatorBiometricspage.java b/uitest-regclient/src/main/java/regclient/page/UpdateOperatorBiometricspage.java
index ea18d92d9..ef03fedd6 100644
--- a/uitest-regclient/src/main/java/regclient/page/UpdateOperatorBiometricspage.java
+++ b/uitest-regclient/src/main/java/regclient/page/UpdateOperatorBiometricspage.java
@@ -106,5 +106,7 @@ public UpdateOperatorBiometricspage(AppiumDriver driver) {
 	public abstract void clickOnVerifyAndSaveButton();
 
 	public abstract boolean isDismissPageLoaded();
+	
+	public abstract void clickOnBackButton();
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/page/UpdateUINPage.java b/uitest-regclient/src/main/java/regclient/page/UpdateUINPage.java
index c40a8e85e..1091135ff 100644
--- a/uitest-regclient/src/main/java/regclient/page/UpdateUINPage.java
+++ b/uitest-regclient/src/main/java/regclient/page/UpdateUINPage.java
@@ -8,69 +8,17 @@ public UpdateUINPage(AppiumDriver driver) {
 		super(driver);
 	}
 
-	 public abstract boolean isUpdateMyUINTitleDisplayed();
+	public abstract boolean isUpdateMyUINTitleDisplayed();
 
-	    public abstract void enterUIN(String UIN);
+	public abstract void enterUIN(String UIN);
 
-	    public abstract void clickOnConsentButton();
+	public abstract ConsentPage clickOnContinueButton();
 
-	    public abstract boolean isConsentTitleDisplayed();
+	public abstract boolean isInvalidUINErrorMessageDisplayed();
 
-	    public abstract void clickOnPreferredLanguageButton();
+	public abstract void selectUpdateValue(String page);
+	
+	public abstract void selectUpdateIntroducerDetails();
 
-	    public abstract boolean isPreferredLanguageTitleDisplayed();
 
-	    public abstract void clickOnFullNameButton();
-
-	    public abstract boolean isFullNameTitleDisplayed();
-
-	    public abstract void clickOnDOBButton();
-
-	    public abstract boolean isDOBTitleDisplayed();
-
-	    public abstract void clickOnGenderButton();
-
-	    public abstract boolean isnGenderTitleDisplayed();
-
-	    public abstract void clickOnAddressButton();
-
-	    public abstract boolean isAddressTitleDisplayed();
-
-	    public abstract void clickOnMaritalStatusButton();
-
-	    public abstract boolean isMaritalStatusTitleDisplayed();
-
-	    public abstract void clickOnApplicantLanguageButton();
-
-	    public abstract boolean isApplicantLanguageTitleDisplayed();
-
-	    public abstract void clickOnResidenceStatusButton();
-
-	    public abstract boolean isResidenceStatusTitleDisplayed();
-
-	    public abstract void clickOnLocationButton();
-
-	    public abstract boolean isLocationTitleDisplayed();
-
-	    public abstract void clickOnPhoneButton();
-
-	    public abstract boolean isPhoneTitleDisplayed();
-
-	    public abstract void clickOnEmailButton();
-
-	    public abstract boolean isEmailTitleDisplayed();
-
-	    public abstract void clickOnIntroducerDetailsButton();
-
-	    public abstract boolean isIntroducerDetailsTitleDisplayed();
-
-	    public abstract void clickOnBiometricsButton();
-
-	    public abstract boolean isnBiometricsTitleDisplayed();
-
-	    public abstract void clickOnDocumentsButton();
-
-	    public abstract boolean isDocumentsTitleDisplayed();
-	    
-	    public abstract  ConsentPage clickOnContinueButton();
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/AcknowledgementPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/AcknowledgementPageArabic.java
index de80abb23..d4340f2f7 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/AcknowledgementPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/AcknowledgementPageArabic.java
@@ -3,10 +3,13 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AcknowledgementPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 import regclient.pages.english.RegistrationTasksPageEnglish;
 
 public class AcknowledgementPageArabic extends AcknowledgementPage {
@@ -23,9 +26,6 @@ public class AcknowledgementPageArabic extends AcknowledgementPage {
 	@AndroidFindBy(accessibility = "اذهب إلى المنزل")
 	private WebElement goToHomeButton;
 	
-	@AndroidFindBy(xpath = "//android.widget.Button[@content-desc=\"تسجيل جديد\"]")
-	private WebElement newRegistrationButton;
-	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Demographic Information\"))")
 	private WebElement demographicInformationInAcknowledgementPage;
 	
@@ -35,9 +35,6 @@ public class AcknowledgementPageArabic extends AcknowledgementPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Biometrics\"))")
 	private WebElement biometricsInformationInAcknowledgementPage;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"التفاصيل الديموغرافية\"))")
-	private WebElement demographicDetailsTitle;
-	
 	@AndroidFindBy(accessibility = "حزمة المزامنة")
 	private WebElement syncPacketButton;
 	
@@ -75,16 +72,19 @@ public boolean isBiometricsInformationInAcknowledgementPageDisplayed() {
 		return isElementDisplayed(biometricsInformationInAcknowledgementPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageArabic(driver);
-	}
-	public String getAID() {
-		return getTextFromLocator(applicationID);
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
 	}
 	
+
 	public void clickOnSyncPacketButton() {
 		waitTime(10);
 		clickOnElement(syncPacketButton);
 	}
+	
+	public String getAID() {
+		return getTextFromLocator(applicationID);
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/ApplicantBiometricsPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/ApplicantBiometricsPageArabic.java
index 982922de3..6d7e96402 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/ApplicantBiometricsPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/ApplicantBiometricsPageArabic.java
@@ -3,14 +3,14 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class ApplicantBiometricsPageArabic extends ApplicantBiometricsPage {
-
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'المقاييس الحيوية لمقدم الطلب')]")
-	private WebElement applicantBiometricsPageTitle;
 	
 	@AndroidFindBy(accessibility = "القزحية مسح")
 	private WebElement irisScanButton;
@@ -99,9 +99,6 @@ public class ApplicantBiometricsPageArabic extends ApplicantBiometricsPage {
 	@AndroidFindBy(xpath = "//android.view.View[@content-desc=\"الاستثناءات\"]/following-sibling::android.view.View[@content-desc=\"1\"]")
 	private WebElement exceptionCount;
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'القياسات الحيوية للمصادقة')]")
-	private WebElement authenticationBiometricsPageTitle;
-	
 	public ApplicantBiometricsPageArabic(AppiumDriver driver) {
 		super(driver);
 	}
@@ -116,29 +113,29 @@ public  void enterCommentsInTextBox(String comments) {
 	public void clickOnScanButton() {
 		clickOnElement(scanButton);
 	}	
-	
+
 	public void clickOnExceptionTypePermanentButton() {
 		if(!isElementDisplayedOnScreen(permanentButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(permanentButton);
 	}
-	
+
 	public void clickOnExceptionTypeTemporaryButton() {
 		if(!isElementDisplayedOnScreen(temporaryButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(temporaryButton);	
 	}
-	
+
 	public void markOneEyeException() {
 		clickOnElement(oneEyeException);
 	}
-	
+
 	public void markOneFingureException() {
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(firstFingureExceptionImage);
 		clickOnElement(secondFingureExceptionImage);
@@ -146,109 +143,115 @@ public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(forthFingureExceptionImage);
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void clickOnClosePopUp() {
 		clickOnElement(popUpCloseButton);
 	}
-	
+
 	public void clickOnMarkExceptionButton() {
 		clickOnElement(markExceptionButton);
 	}
-	
+
 	public void clickOnIrisScanButton() {
 		clickOnElement(irisScanButton);
 	}
-	
+
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageArabic(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
 	public void clickOnZoomButton() {
 		clickOnElement(zoomButton);
 	}
-	
+
 	public void clickOnIrisScanTitle() {
 		clickOnElement(irisScanButtonTitle);
 	}
-	
+
 	public void clickOnRightHandScanTitle() {
 		clickOnElement(rightHandScanTitle);
 	}
-	
+
 	public void clickOnleftHandScanTitle() {
 		clickOnElement(leftHandScanTitle);
 	}
-	
+
 	public void clickOnThumbsScanTitle() {
 		clickOnElement(thumbsScanTitle);
 	}
-	
+
 	public void closeScanCapturePopUp() {
 		driver.navigate().back();
 	}
-	
+
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageArabic(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  boolean isApplicantBiometricsPageDisplyed() {
-		return isElementDisplayed(applicantBiometricsPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
 	}
-	
+
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricsPageDisplyed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
+	}
+
 	public  boolean isExceptionTypeTitleDisplyed() {
 		return isElementDisplayed(exceptionTypeTitle);
 	}
-	
+
 	public  boolean isRightHandScanTitleDisplyed() {
 		return isElementDisplayed(rightHandScanTitle);
 	}
-	
+
 	public  boolean isLeftHandScanTitleDisplyed() {
 		return isElementDisplayed(leftHandScanTitle);
 	}
-	
+
 	public  boolean isThumbsScanTitleDisplyed() {
 		return isElementDisplayed(thumbsScanTitle);
 	}
-	
+
 	public  boolean isFaceScanTitleDisplyed() {
 		return isElementDisplayed(faceScanTitle);
 	}
-	
+
 	public  boolean isExceptionScanTitleDisplyed() {
 		return isElementDisplayed(exceptionScanTitle);
 	}
-	
+
 	public  boolean isIrisScan() {
 		return isElementDisplayed(irisCapturerHeader,2000);
 	}
-	
+
 	public  boolean isRightHandScan() {
 		return isElementDisplayed(rightHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isLeftHandScan() {
 		return isElementDisplayed(leftHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isThumbsScan() {
 		return isElementDisplayed(thumbsCapturerHeader,2000);
 	}
-	
+
 	public  boolean isFaceScan() {
 		return isElementDisplayed(faceCapturerHeader,2000);
 	}
-	
+
 	public  boolean isExceptionScan() {
 		return isElementDisplayed(exceptionCapturerHeader,2000);
 	}
-	
+
 	public  boolean isCommentHeaderDisplyed() {
 		return isElementDisplayed(commentsHeader);
 	}
-	
+
 	public  boolean isExceptionCountDisplyed() {
 		if(!isElementDisplayedOnScreen(exceptionCount)) {
 			swipeOrScroll();
@@ -256,8 +259,4 @@ public  boolean isExceptionCountDisplyed() {
 		}
 		return isElementDisplayed(exceptionCount);
 	}
-	
-	public  boolean isAuthenticationBiometricsPageDisplyed() {
-		return isElementDisplayed(authenticationBiometricsPageTitle);
-	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/BiometricDetailsPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/BiometricDetailsPageArabic.java
index de6976aa3..2dbe42cc0 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/BiometricDetailsPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/BiometricDetailsPageArabic.java
@@ -1,21 +1,21 @@
 package regclient.pages.arabic;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.ApplicantBiometricsPageEnglish;
+import regclient.pages.english.IntroducerBiometricPageEnglish;
+import regclient.pages.english.PreviewPageEnglish;
 
 public class BiometricDetailsPageArabic extends BiometricDetailsPage {
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"المقاييس الحيوية لمقدم الطلب \"))")
-	private WebElement applicantBiometricTitle;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"القياسات الحيوية للمصادقة\"))")
-	private WebElement authenticationBiometricTitle;
 
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"القزحية مسح\"))")
 	private WebElement irisScanIcon;
@@ -35,9 +35,6 @@ public class BiometricDetailsPageArabic extends BiometricDetailsPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"استثناء مسح\"))")
 	private WebElement exceptionScanIcon;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,\"المقاييس الحيوية المقدّمة\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"القزحية مسح\"]")
-	private WebElement introducerIrisScanIcon;
-	
 	@AndroidFindBy(accessibility = "يكمل")
 	private WebElement continueButton;
 
@@ -45,57 +42,79 @@ public BiometricDetailsPageArabic(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public  boolean isBiometricDetailsPageDisplayed() {
-		return isElementDisplayed(applicantBiometricTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
+	}
+		
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricTitleDisplayed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
 	}
-
-	
 	
 	public ApplicantBiometricsPage clickOnIrisScan() {
 		clickOnElement(irisScanIcon);
-		return new ApplicantBiometricsPageArabic(driver);
-	}
-	
-	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
-		while(!isElementDisplayedOnScreen(introducerIrisScanIcon)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerIrisScanIcon);
-		return new IntroducerBiometricPageArabic(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnRightHandScanIcon() {
 		clickOnElement(rightHandScanIcon);
-		return new ApplicantBiometricsPageArabic(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnLeftHandScanIcon() {
 		clickOnElement(leftHandScanIcon);
-		return new ApplicantBiometricsPageArabic(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnThumbsScanIcon() {
 		clickOnElement(thumbsScanIcon);
-		return new ApplicantBiometricsPageArabic(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnFaceScanIcon() {
 		clickOnElement(faceScanIcon);
-		return new ApplicantBiometricsPageArabic(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnExceptionScanIcon() {
 		clickOnElement(exceptionScanIcon);
-		return new ApplicantBiometricsPageArabic(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
+
 	}
 	
-	public  PreviewPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new PreviewPageArabic(driver);
+	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Iris Scan\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
 	}
 	
-	public  boolean isAuthenticationBiometricTitleDisplayed() {
-		return isElementDisplayed(authenticationBiometricTitle);
+	public IntroducerBiometricPage clickOnIntroducerRightHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Right\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerLeftHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Left\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerThumbScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Thumbs\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
 	}
+	
+	public IntroducerBiometricPage clickOnIntroducerFaceScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Face\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
 
+	}
+	
+	public  PreviewPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new PreviewPageEnglish(driver);
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/ConsentPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/ConsentPageArabic.java
index 0cf986b0a..438ec5774 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/ConsentPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/ConsentPageArabic.java
@@ -3,63 +3,57 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
+import regclient.pages.english.RegistrationTasksPageEnglish;
 
 
 
 public class ConsentPageArabic extends ConsentPage {
 
-	@AndroidFindBy(accessibility = "موافقة")
-	private WebElement consentPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().className(\"android.widget.CheckBox\"))")
-	private WebElement termAndConditionCheckBox;
-
 	@AndroidFindBy(accessibility = "أُبلغ")
 	private WebElement informedButton;
 	
 	@AndroidFindBy(accessibility = "يلغي")
 	private WebElement cancelButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"الاسم الكامل الكامل الكامل\"))")
-	private WebElement checkBoxDiscription;
-		
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"تحديث UIN\"))")
-	private WebElement updateUINTitle;
-
 
 	public ConsentPageArabic(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isConsentPageDisplayed() {
-		return isElementDisplayed(consentPage);
+			return isElementDisplayed(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));		
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isCheckBoxReadable() {
-		return isElementDisplayed(checkBoxDiscription);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("consent") + "\"))")));
 	}
 	
-
 	public  boolean isInformedButtonEnabled() {
 		return isElementEnabled(informedButton);
 	}
 
 	public  DemographicDetailsPage clickOnInformedButton() {
 		clickOnElement(informedButton);
-		return new DemographicDetailsPageArabic(driver);
+		return new DemographicDetailsPageEnglish(driver);
 	}
-	
+
+
 	public RegistrationTasksPage clickOnCancelButton() {
 		clickOnElement(cancelButton);
-		return new  RegistrationTasksPageArabic(driver);
+		return new  RegistrationTasksPageEnglish(driver);
 	}
-
+	
+	@SuppressWarnings("deprecation")
 	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
-
+	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/DemographicDetailsPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/DemographicDetailsPageArabic.java
index 052c32aba..0fea066f0 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/DemographicDetailsPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/DemographicDetailsPageArabic.java
@@ -1,466 +1,290 @@
 package regclient.pages.arabic;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
+import regclient.page.BasePage;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.DocumentUploadPage;
 import regclient.pages.english.ConsentPageEnglish;
 import regclient.pages.english.DocumentuploadPageEnglish;
+import regclient.utils.TestDataReader;
 
 public class DemographicDetailsPageArabic extends DemographicDetailsPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"الاسم الكامل\"))")
-	private WebElement demographicDetailspage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"موافقة\"))")
-	private WebElement consentTitle;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
-	private WebElement fullNameTextBox;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
-	private WebElement fullNameTextBoxSecondLanguage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(2)")
-	private WebElement ageTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"عنوان دائم1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine1TextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"عنوان دائم1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine1TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"عنوان مؤقت2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine2TextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"عنوان مؤقت2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine2TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"عنوان مؤقت3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine3TextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"عنوان مؤقت3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine3TextBoxSecondLangauge;
-
 	@AndroidFindBy(accessibility = "آحرون")
 	private WebElement maleButton;
 
 	@AndroidFindBy(accessibility = "أنثى")
 	private WebElement femaleButton;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"الأحوال المدنية\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectMaritalStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"حالة الإقامة\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectResidentStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"منطقة\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectRegionStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"المحافظة\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectProvinceStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"مدينة\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectCityStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"منطقة\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectZoneStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"بريدي\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectPostal;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"14022\")")
-	private WebElement selectPostalCode;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"غير أجنبي\")")
-	private WebElement nonForeignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"أجنبي\")")
-	private WebElement foreignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"الأرامل\")")
-	private WebElement singleValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"الرباط سلا القنيطرة\")")
-	private WebElement rabatSaleKenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"القنيطرة\")]")
-	private WebElement kenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"الرباط\")]")
-	@AndroidFindBy(accessibility = "الرباط")
-	private WebElement rabatValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"بن منصور\")")
-	private WebElement benMansourFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"حالة الإقامة\")")
-	private WebElement residenceStatusHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"منطقة\")")
-	private WebElement regionHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"المحافظة\")")
-	private WebElement provinceHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"مدينة\")")
-	private WebElement cityHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"منطقة\")")
-	private WebElement zoneHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"بريدي\")")
-	private WebElement postalCodeHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"هاتف\")")
-	private WebElement mobileNumberHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"البريد الإلكتروني\")")
-	private WebElement emailHeader;
 	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"اسم مقدم العرض\")")
-	private WebElement introducerNameHeader;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"معرف RID\")")
-	private WebElement introducerRidHeader;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"هاتف\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText")
-	private WebElement mobileNumberTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"البريد الإلكتروني\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement emailIdTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"اسم مقدم العرض\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerNameTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"اسم مقدم العرض\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerNameTextBoxSecondLangauge;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"معرف RID\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerRidTextBox;
-
 	@AndroidFindBy(accessibility = "يكمل")
 	private WebElement continueButton;
 	
 	@AndroidFindBy(accessibility = "مدخل غير صالح")
 	private WebElement errorMessageInvalidInputText;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement calenderIcon;
-	
 	@AndroidFindBy(accessibility = "تمويه")
 	private WebElement backgroundScreen;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement getSelectedDate;
-
+	@AndroidFindBy(accessibility = "FETCH DATA")
+	private WebElement fetchDataButton;
 
 	public DemographicDetailsPageArabic(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isDemographicDetailsPageDisplayed() {
+		WebElement  demographicDetailspage = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))"));
 		return isElementDisplayed(demographicDetailspage);
 	}
-	
+
 	public boolean isErrorMessageInvalidInputTextDisplayed() {
 		return isElementDisplayed(errorMessageInvalidInputText);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  ConsentPage clickOnConsentPageTitle() {
+		WebElement  consentTitle = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));
 		clickOnElement(consentTitle);
 		return new ConsentPageEnglish(driver);
 	}
 
-	public  void enterFullName(String fullName) {
-		clickAndsendKeysToTextBox(fullNameTextBox,fullName);
-	}
-
-	public  void enterAddressLine1(String addressLine1) {
-		if(!isElementDisplayedOnScreen(addressLine1TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine1TextBox,addressLine1);
-	}
-
-	public  void enterAddressLine2(String addressLine2) {
-		if(!isElementDisplayedOnScreen(addressLine2TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine2TextBox,addressLine2);
-	}
-
-	public  void enterAddressLine3(String addressLine3) {
-		if(!isElementDisplayedOnScreen(addressLine3TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine3TextBox,addressLine3);
-	}
-
-	public  void enterAge(String age) {
-		clickAndsendKeysToTextBox(ageTextBox,age);
-	}
-
-	public boolean checkFullNameSecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(fullNameTextBoxSecondLanguage)==null || getTextFromLocator(fullNameTextBoxSecondLanguage)=="" )
-			return	false;
-		else
-			return	true;
-	}
-
-	public boolean isResidenceStatusHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(residenceStatusHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusHeader);
-	}
-
-	public boolean isRegionHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(regionHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(regionHeader);
-	}
-
-	public boolean isProvinceHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(provinceHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(provinceHeader);
-	}
-
-	public boolean isCityHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(cityHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(cityHeader);
-	}
-
-	public boolean isPostalCodeHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(postalCodeHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(postalCodeHeader);
-	}
-
-	public boolean isMobileNumberHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(mobileNumberHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(mobileNumberHeader);
-	}
-
-	public boolean isZoneHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(zoneHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(zoneHeader);
-	}
+	public  DocumentUploadPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new DocumentuploadPageEnglish(driver);
 
-	public boolean isEmailHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(emailHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailHeader);
-	}
-	
-	public boolean isIntroducerNameHeaderDisplayed() {
-		return isElementDisplayed(introducerNameHeader);
 	}
 	
-	public boolean isIntroducerRidHeaderDisplayed() {
-		return isElementDisplayed(introducerRidHeader);
-	}
-
-	public  void selectGender(String gender) {
-		if(gender.equalsIgnoreCase("male"))
-			clickOnElement(maleButton);
-		if(gender.equalsIgnoreCase("female"))
-			clickOnElement(femaleButton);
-	}
-
-	public  void selectMaritalStatus() {
-		clickOnElement(selectMaritalStatus);
-		if(!isElementDisplayedOnScreen(singleValueFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectMaritalStatus);
-			clickOnElement(singleValueFromDropdown);
-		}else
-			clickOnElement(singleValueFromDropdown);
-	}
-
-	public  void selectResidenceStatus(String ResidenceStatus) {
-		clickOnElement(selectResidentStatus);
-		if(ResidenceStatus.equalsIgnoreCase("Foreigner")) {
-			if(!isElementDisplayedOnScreen(foreignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(foreignerValueFromDropdown);
-			}else
-				clickOnElement(foreignerValueFromDropdown);
-		}else {
-			if(!isElementDisplayedOnScreen(nonForeignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(nonForeignerValueFromDropdown);
-			}else
-				clickOnElement(nonForeignerValueFromDropdown);
+	public  boolean isContinueButtonEnable() {
+		return isElementEnabled(continueButton);
+
+	}
+
+	public boolean isPreRegFetchDataTextBoxDisplay() {
+		return isElementDisplayed(fetchDataButton);
+	}
+
+	public void fillDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}
+				else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(3);
+					while(!isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"))) {
+						swipeOrScroll();
+					}
+					boolean isdisplayed =isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(3);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("")){	
+					if(!isElementDisplayed(maleButton)) {
+						swipeOrScroll();
+						clickOnElement(maleButton);		
+					}else
+						clickOnElement(maleButton);		
+
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			else if(id.equals("residenceStatus")) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(2);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(2);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
 		}
-
 	}
 
-	public  void selectRegionStatus(String region) {
-		clickOnElement(selectRegionStatus);
-		if(region.equalsIgnoreCase("Rabat Sale Kenitra")) {
-			if(!isElementDisplayedOnScreen(rabatSaleKenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectRegionStatus);
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
-			}else {
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
+	public void editDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
 			}
 		}
-
-	}
-
-	public  void selectProvinceStatus(String province) {
-		clickOnElement(selectProvinceStatus);
-		if(province.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(province.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectCityStatus(String city) {
-		clickOnElement(selectCityStatus);
-		if(city.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(city.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectZoneStatus() {
-		clickOnElement(selectZoneStatus);
-		if(!isElementDisplayedOnScreen(benMansourFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectZoneStatus);
-			clickOnElement(benMansourFromDropdown);
-		}else
-			clickOnElement(benMansourFromDropdown);
-	}
-
-	public  void selectPostalStatus() {
-		clickOnElement(selectPostal);
-		if(!isElementDisplayedOnScreen(selectPostalCode)) {
-			swipeOrScroll();
-			clickOnElement(selectPostal);
-			clickOnElement(selectPostalCode);
-		}else
-			clickOnElement(selectPostalCode);
 	}
 
-	public  DocumentUploadPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new DocumentuploadPageEnglish(driver);
-
-	}
-
-	public  void enterMobileNumber(String mobileNumber) {
-		if(!isElementDisplayedOnScreen(mobileNumberTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-		}else
-		clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-	}
-
-	public  void enterEmailID(String EmailID) {
-		if(!isElementDisplayedOnScreen(emailIdTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-		}else
-		clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-	}
-	
-	public  void enterIntroducerName(String introducerName) {
-		if(!isElementDisplayedOnScreen(introducerNameTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-		}else
-		clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-	}
-	
-	public  void enterIntroducerRid(String introducerRid) {
-		if(!isElementDisplayedOnScreen(introducerRidTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-		}else
-		clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-	}
-	
-	public  void selectCurrentCalenderDate() {
-		clickOnElement(calenderIcon);		
-	}
-	
-	public  void closeCalender() {
-		clickOnElement(backgroundScreen);		
-	}
-	
-	public  boolean checkDateFormatAndCurrectDate() {
-		getTextFromLocator(getSelectedDate);
-		if(getTextFromLocator(getSelectedDate).equalsIgnoreCase(getCurrentDate())) 
-			return	true;
-		else
-			return false;
-	}
-
-	public boolean checkAddress1SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine1TextBoxSecondLangauge)==null || getTextFromLocator(addressLine1TextBoxSecondLangauge)=="" )
+	public boolean checkSecondLanguageTextBoxNotNull(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))==null || getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))=="" )
 			return	false;
 		else
 			return	true;
 	}
 
-	public boolean checkAddress2SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine2TextBoxSecondLangauge)==null || getTextFromLocator(addressLine2TextBoxSecondLangauge)=="" )
-			return	false;
-		else
+	public  boolean checkDateFormatAndCurrectDate(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View"))).equalsIgnoreCase(getCurrentDate())) 
 			return	true;
-	}
-
-	public boolean checkAddress3SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine3TextBoxSecondLangauge)==null || getTextFromLocator(addressLine3TextBoxSecondLangauge)=="" )
-			return	false;
 		else
-			return	true;
+			return false;
 	}
-
-	public boolean checkIntroducerNameTextBoxSecondLangaugeTextBoxNotNull() {
-		if(getTextFromLocator(introducerNameTextBoxSecondLangauge)==null || getTextFromLocator(introducerNameTextBoxSecondLangauge)=="" )
-			return	false;
-		else
-			return	true;
+	
+	public void fillIntroducerDetailsInDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(id.equals("introducerName")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerUIN")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("UINminor"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
+		}
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/DocumentuploadPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/DocumentuploadPageArabic.java
index f0602587b..360cdfc57 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/DocumentuploadPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/DocumentuploadPageArabic.java
@@ -1,265 +1,184 @@
 package regclient.pages.arabic;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.CameraPage;
 import regclient.page.DocumentUploadPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
+import regclient.pages.english.DocumentuploadPageEnglish;
 
 
 public class DocumentuploadPageArabic extends DocumentUploadPage {
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"تحميل الوثيقة\"))")
-	private WebElement doccumentUploadPage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.Button\")")
-	private WebElement identityProofScanButton;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات العنوان\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement addressProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات الهوية\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement identityProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات العلاقة\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement relationshipProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB إثبات\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement dobProofSelectValue;
-
 	@AndroidFindBy(accessibility = "تمويه")
 	private WebElement PopUpCloseButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات العنوان\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonAddressProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات الهوية\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonIdentityProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB إثبات\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonDobProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات العلاقة\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonRelationshipProof;
-
 	@AndroidFindBy(accessibility = "رجوع")
 	private WebElement backButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات العنوان\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView")
-	private WebElement previewCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات العنوان\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[2]")
-	private WebElement previewSecondCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات العنوان\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[3]")
-	private WebElement previewThirdCaptureImage;
-
 	@AndroidFindBy(accessibility = "يكمل")
 	private WebElement continueButton;
 
 	@AndroidFindBy(accessibility = "يمسح")
 	private WebElement deleteButton;
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"DOB إثبات\"))")
-	private WebElement dobsHeader;
-
 	@AndroidFindBy(xpath = "//android.widget.ImageView")
 	private WebElement captureImage;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات العنوان\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement addressProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"إثبات الهوية\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement identityProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB إثبات\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement dobProofReferenceNumberTextbox;
-
-	public DocumentuploadPageArabic(AppiumDriver driver) {
-		super(driver);
-	}
-
-
-
-	public void selectAddressProof() {
-		while(!isElementDisplayedOnScreen(addressProofSelectValue) || !isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(addressProofSelectValue);	
-		}
-	}
-
-	public void selectIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofSelectValue)|| !isElementDisplayedOnScreen(scanButtonIdentityProof) ) {
-			swipeOrScroll();
-		}
-		clickOnElement(identityProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(identityProofSelectValue);	
-		}
-	}
-
-	public void selectDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofSelectValue) || !isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(dobProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(dobProofSelectValue);	
-		}
-	}
-
-	public void selectRelationshipProof() {
-		while(!isElementDisplayedOnScreen(relationshipProofSelectValue) || !isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(relationshipProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(relationshipProofSelectValue);	
-		}
-	}
-
-	public void selectOnCaptureImage() {
-		clickOnElement(previewCaptureImage);
-	}
-
-	public void closePopUpClose() {
-		clickOnElement(PopUpCloseButton);
-	}
-
-	public CameraPage clickOnAddressProofScanButton() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonAddressProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonDobProof() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonDobProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonIdentityProof() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonIdentityProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonRelationshipProof() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonRelationshipProof);
-		return new CameraPage(driver);
-	}
+	@AndroidFindBy(accessibility = "يحفظ")
+	private WebElement saveButton;
 
-	public void clickOnBackButton() {
-		clickOnElement(backButton);
+	@AndroidFindBy(accessibility = "استعادة")
+	private WebElement retakeButton;
 
-	}
-
-	public void clickOnDeleteButton() {
-		clickOnElement(deleteButton);
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.view.View\").instance(8)")
+	private WebElement imageleftCorner;
 
+	public DocumentuploadPageArabic(AppiumDriver driver) {
+		super(driver);
 	}
-
 	public  BiometricDetailsPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new BiometricDetailsPageArabic(driver);
-	}
-
-	public  boolean isImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(captureImage);
-	}
-
-	public  boolean isSecondImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewSecondCaptureImage);
-	}
-
-	public  boolean isThirdImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewThirdCaptureImage);
-	}
-
-	public  boolean isDeleteButtonDisplyed() {
-		if(!isElementDisplayedOnScreen(deleteButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(deleteButton);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isDoccumentUploadPageDisplayed() {
-		return isElementDisplayed(doccumentUploadPage);
-	}
-
-	public boolean isDobHeaderDisplayed() {
-		return isElementDisplayed(dobsHeader);
-	}
-
-	public  boolean isScanButtonAddressProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonAddressProof);
-	}
-
-	public  boolean isScanButtonIdentityProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonIdentityProof);
-	}
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("Documents") + "\"))")));
+	}
+
+	public  DocumentUploadPage clickOnSaveButton() {
+		clickOnElement(saveButton);
+		return new DocumentuploadPageEnglish(driver);
+	}
+
+	public boolean isRetakeButtonDisplayed() {
+		return isElementDisplayed(retakeButton);
+	}
+
+	public void cropCaptureImage() {
+		isElementDisplayed(captureImage);
+		cropCaptureImage(imageleftCorner);
+	}
+
+	public void uploadDoccuments(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(type.equalsIgnoreCase("ReferenceNumber")) {
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")),"1234567890");
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}else {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}
+		}
+
+	}
+	public void uploadDoccumentsUpdate(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(type.equals("all") && !id.equals("proofOfException") && !id.equals("proofOfRelationship")) {
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+					swipeOrScroll();
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				}
+				clickOnElement(PopUpCloseButton);
+				waitTime(1);
+				boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				CameraPage cameraPage=new CameraPage(driver);
+				cameraPage.clickimage();
+				cameraPage.clickOkButton();
+				assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+				cropCaptureImage();
+				clickOnSaveButton();
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+				}
+			}
 
-	public  boolean isScanButtonDobProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonDobProof);
-	}
-
-	public  boolean isScanButtonRelationshipProoffEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonRelationshipProof);
-	}
-	
-	public  void enterReferenceNumberInAdressProof() {
-		if(!isElementDisplayedOnScreen(addressProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-		}else
-		clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(identityProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofReferenceNumberTextbox)) {
-			swipeOrScroll();
 		}
-		clickAndsendKeysToTextBox(dobProofReferenceNumberTextbox,"1234567890");
 	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/IntroducerBiometricPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/IntroducerBiometricPageArabic.java
index 0ea5a148f..b417f77df 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/IntroducerBiometricPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/IntroducerBiometricPageArabic.java
@@ -3,15 +3,15 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class IntroducerBiometricPageArabic extends IntroducerBiometricPage {
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'المقاييس الحيوية المقدّمة ')]")
-	private WebElement introducerBiometricPageTitle;
-	
 	@AndroidFindBy(accessibility = "القزحية مسح")
 	private WebElement irisScanButton;;
 	
@@ -102,7 +102,7 @@ public void clickOnIrisScanButton() {
 	
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageArabic(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
 	public void clickOnZoomButton() {
@@ -127,11 +127,12 @@ public void closeScanCapturePopUp() {
 	
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageArabic(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public  boolean isIntroducerBiometricsPageDisplyed() {
-		return isElementDisplayed(introducerBiometricPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId("introducerBiometrics")+"\")")));
 	}
 	
 	public  boolean isExceptionTypeTitleDisplyed() {
@@ -181,4 +182,5 @@ public  boolean isFaceScan() {
 	public  boolean isExceptionScan() {
 		return isElementDisplayed(exceptionCapturerHeader,2000);
 	}
+
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/ManageApplicationsPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/ManageApplicationsPageArabic.java
index d7d6c57e4..881421831 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/ManageApplicationsPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/ManageApplicationsPageArabic.java
@@ -86,7 +86,7 @@ public boolean isSearchAIDDisplayed(String AID) {
 		waitTime(2);
 		return isElementDisplayed(driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]")));
 	}
-	
+
 	public boolean isZeroApplicationDisplayed() {
 		waitTime(2);
 		return isElementDisplayed(displayZeroApplication);
@@ -94,18 +94,24 @@ public boolean isZeroApplicationDisplayed() {
 
 	public  void clickOnUploadButton() {
 		clickOnElement(uploadButton);
-		waitTime(20);
+		waitTime(10);
 	}
 
 	public boolean isPacketUploadDone(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
-		if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
-			return false;
+		if(element.getAttribute("contentDescription").contains("NOT UPLOADED")) {
+			waitTime(10);
+			element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+			if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
+				return false;
+			else
+				return true;
+		}
 		else
 			return true;
 	}
-	
+
 	public boolean isPacketApproved(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -114,7 +120,7 @@ public boolean isPacketApproved(String AID) {
 		else
 			return false;
 	}
-	
+
 	public boolean isPacketSynned(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -123,6 +129,15 @@ public boolean isPacketSynned(String AID) {
 		else
 			return false;
 	}
+	
+	public boolean isPacketRejected(String AID) {
+		waitTime(2);
+		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+		if(element.getAttribute("contentDescription").contains("REJECTED"))
+			return true;
+		else
+			return false;
+	}
 
 	public  void clickClientStatusDropdown() {
 		clickOnElement(clientStatusDropdown);
@@ -163,21 +178,21 @@ public  void clickDismissButton() {
 	public  void clickOnSearchCheckBox() {
 		clickOnElement(searchCheckBoxButton);
 	}
-	
+
 	public  void selectApprovedValueDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(approvedOption);
 	}	
-	
+
 	public  void selectSyncedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(syncedOption);
 	}
-	
+
 	public  void selectUploadedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(uploadedOption);
-		
+
 	}
 
 	public boolean isReceivedDropdownOptionDisplayed() {
@@ -195,7 +210,7 @@ public boolean isAcceptedDropdownOptionDisplayed() {
 	public boolean isDeletionDropdownOptionDisplayed() {
 		return isElementDisplayed(deletionValueDropdown);
 	}
-	
+
 	public void clickOnBackButton() {
 		driver.navigate().back();
 	}
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/OperationalTaskPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/OperationalTaskPageArabic.java
index 133eda925..73c5cad43 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/OperationalTaskPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/OperationalTaskPageArabic.java
@@ -21,6 +21,9 @@ public class OperationalTaskPageArabic extends OperationalTaskPage{
 	@AndroidFindBy(accessibility = "تحميل التطبيق")
 	private WebElement applicationUploadTitle;
 	
+	@AndroidFindBy(accessibility = "ما زال يحتاج بتصدير")
+	private WebElement pendingApprovalTitle;
+	
 	public OperationalTaskPageArabic(AppiumDriver driver) {
 		super(driver);
 	}
@@ -57,6 +60,17 @@ public boolean isApplicationUploadTitleDisplayed() {
 		}
 		return isElementDisplayed(applicationUploadTitle);
 	}
+	
+	public  void clickPendingApprovalTitle() {
+		clickOnElement(pendingApprovalTitle);
+	}
+	
+	public boolean isPendingApprovalTitleDisplayed() {
+		if(!isElementDisplayedOnScreen(pendingApprovalTitle)) {
+			swipeOrScroll();
+		}
+		return isElementDisplayed(pendingApprovalTitle);
+	}
 
 	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/PendingApprovalArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/PendingApprovalArabic.java
new file mode 100644
index 000000000..42c76cb22
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/PendingApprovalArabic.java
@@ -0,0 +1,161 @@
+/**
+ * 
+ */
+package regclient.pages.arabic;
+
+import static org.testng.Assert.assertTrue;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.page.PendingApproval;
+
+public class PendingApprovalArabic extends PendingApproval{
+
+	@AndroidFindBy(accessibility = "ما زال يحتاج بتصدير")
+	private WebElement pendingApprovalTitle;
+
+	@AndroidFindBy(accessibility = "يعتمد")
+	private WebElement approveButton;
+
+	@AndroidFindBy(accessibility = "تمويه")
+	private WebElement backGroundScreen;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.CheckBox\").instance(0)")
+	private WebElement searchCheckBoxButton;
+
+	@AndroidFindBy(accessibility = "يُقدِّم")
+	private WebElement submitButton;
+
+	@AndroidFindBy(accessibility = "مصادقة المشرف")
+	private WebElement supervisorAuthenticationTitle;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
+	private WebElement userNameTextBox;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
+	private WebElement passwordTextBox;
+	
+	@AndroidFindBy(xpath = "//*[contains(@content-desc,\"ما زال يحتاج بتصدير\")]//preceding-sibling::android.widget.Button")
+	private WebElement backButton;
+	
+	@AndroidFindBy(accessibility = "REJECT")
+	private WebElement rejectButton;
+	
+	@AndroidFindBy(accessibility = "Sl.no Application ID Reg. Date Client Status Review Status Operator ID")
+	private WebElement pageAttributes ;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"CREATED\")")
+	private WebElement clientStatus;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Pending\").instance(1)")
+	private WebElement reviewStatus;
+	
+	@AndroidFindBy(xpath = "//android.widget.EditText")
+	private WebElement applicationIdTextbox;
+	
+	@AndroidFindBy(accessibility = "Reject Packet?")
+	private WebElement rejectPacketTitle;
+	
+	@AndroidFindBy(accessibility = "Please select a value")
+	private WebElement rejectReasonDropdown;
+
+	public PendingApprovalArabic(AppiumDriver driver) {
+		super(driver);
+	}
+
+	public boolean isPendingApprovalTitleDisplayed() {
+		return isElementDisplayed(pendingApprovalTitle);		
+	}
+
+	@SuppressWarnings("deprecation")
+	public void clickOnAID(String AID) {
+		clickOnElement(findElementWithRetry(MobileBy.AccessibilityId(AID)));
+	}
+
+	public void clickOnApproveButton() {
+		clickOnElement(approveButton);
+	}
+
+	public void clickOnClosePopUpButton() {
+		clickOnElement(backGroundScreen);
+	}
+
+	public void clickOnCheckBox() {
+		clickOnElement(searchCheckBoxButton);
+	}
+
+	public void clickOnSubmitButton() {
+		clickOnElement(submitButton);
+	}
+
+	public boolean isSupervisorAuthenticationTitleDisplayed() {
+		return isElementDisplayed(supervisorAuthenticationTitle);		
+	}
+
+	public  void enterUserName(String username) {
+		sendKeysToTextBox(userNameTextBox,username);
+	}
+
+	public  void enterPassword(String password) {
+		sendKeysToTextBox(passwordTextBox,password);
+	}
+	
+	public void clickOnBackButton() {
+		clickOnElement(backButton);
+	}
+
+	public boolean isApprovalButtonDisplayed() {
+		return isElementDisplayed(approveButton);		
+	}
+	
+	public boolean isRejectButtonDisplayed() {
+		return isElementDisplayed(rejectButton);		
+	}
+	
+	public boolean isPageAttributesDisplayed() {
+		return isElementDisplayed(pageAttributes);		
+	}
+	
+	public boolean isClientStatusDisplayed() {
+		return isElementDisplayed(clientStatus);		
+	}
+
+	public boolean isReviewStatusDisplayed() {
+		return isElementDisplayed(reviewStatus);		
+	}
+	
+	public  void enterAID(String AID) {
+		clickAndsendKeysToTextBox(applicationIdTextbox,AID);
+	}
+	
+	public void clickOnRejectButton() {
+		clickOnElement(rejectButton);
+	}
+	
+	public boolean isRejectPacketTitleDisplayed() {
+		return isElementDisplayed(rejectPacketTitle);		
+	}
+	
+	public void selectRejectionReasonDropdown() {
+		boolean isdisplayed =isElementDisplayed(rejectReasonDropdown);
+		assertTrue(isdisplayed,"Verify if "+rejectReasonDropdown+" header is displayed");
+		clickOnElement(rejectReasonDropdown);
+		waitTime(2);
+		if(!isElementDisplayed(rejectReasonDropdown)) {				
+			clickOnElement(findElement(By.className("android.view.View")));
+		}else {
+			clickOnElement(rejectReasonDropdown);
+			waitTime(2);
+			clickOnElement(findElement(By.className("android.view.View")));
+		}	
+	}
+	
+	public boolean isSubmitButtonEnabled() {
+		return isElementEnabled(submitButton);		
+	}
+
+}
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/PreviewPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/PreviewPageArabic.java
index 4cb649893..958f830e5 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/PreviewPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/PreviewPageArabic.java
@@ -3,17 +3,17 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AuthenticationPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.AuthenticationPageEnglish;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 
 public class PreviewPageArabic extends PreviewPage {
 
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"تسجيل جديد\"))")
-	private WebElement newRegistrationTitle;
-	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Demographic Information\"))")
 	private WebElement demographicInformationInPreviewPage;
 	
@@ -22,9 +22,6 @@ public class PreviewPageArabic extends PreviewPage {
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Documents\"))")
 	private WebElement documentsInformationInPreviewPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"التفاصيل الديموغرافية\"))")
-	private WebElement demographicDetailsTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Biometrics\"))")
 	private WebElement biometricsInformationInPreviewPage;
@@ -41,16 +38,13 @@ public class PreviewPageArabic extends PreviewPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\"Fingers ( 7 )\"))")
 	private WebElement fingerExceptionText;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"تحديث UIN\"))")
-	private WebElement updateUINTitle;
-	
 	public PreviewPageArabic(AppiumDriver driver) {
 		super(driver);
 	}
 	
 	public  AuthenticationPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new AuthenticationPageArabic(driver);
+		return new AuthenticationPageEnglish(driver);
 	}
 	
 	public boolean isDemographicInformationInPreviewPageDisplayed() {
@@ -65,17 +59,23 @@ public boolean isBiometricsInformationInPreviewPagePageDisplayed() {
 		return isElementDisplayed(biometricsInformationInPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isNewRegistrationTitleDisplayed() {
-		return isElementDisplayed(newRegistrationTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("NEW") + "\"))")));
+	}
+	
+	public boolean updateUINTitleDisplayed() {
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
 	
 	public boolean isApplicationIDPreviewPagePageDisplayed() {
 		return isElementDisplayed(applicationIDPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageArabic(driver);
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
 	}
 	
 	public boolean isBothIrisImageDisplayed() {
@@ -85,18 +85,14 @@ public boolean isBothIrisImageDisplayed() {
 	public boolean isSingleIrisImageDisplayed() {
 		return isElementDisplayed(singleIrisImage);
 	}
-
+	
 	public boolean isFingerExceptionText() {
 		return isElementDisplayed(fingerExceptionText);
 	}
-	
+
 	public String getAID() {
 		String applicationID = getTextFromLocator(applicationIDPreviewPage).replaceAll(".*Application ID (\\d+).*", "$1");
 		return applicationID;
 	}
 	
-	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
-	}
-	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/RegistrationTasksPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/RegistrationTasksPageArabic.java
index 5666213b8..34cbd4256 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/RegistrationTasksPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/RegistrationTasksPageArabic.java
@@ -40,7 +40,13 @@ public class RegistrationTasksPageArabic extends RegistrationTasksPage{
 	private WebElement profileButton;
 	
 	@AndroidFindBy(accessibility = "تحديث UIN")
-	private WebElement updateUinButton;
+	private WebElement updateUinButton;	
+	
+	@AndroidFindBy(accessibility = "فقدت UIN")
+	private WebElement lostUinButton;
+	
+	@AndroidFindBy(accessibility = "التصحيح البيومتري")
+	private WebElement biometricCorrectionButton;
 	
 	public RegistrationTasksPageArabic(AppiumDriver driver) {
 		super(driver);
@@ -98,5 +104,30 @@ public  SelectLanguagePage clickUpdateMyUINButton() {
 		clickOnElement(updateUinButton);
 		return new SelectLanguagePageArabic(driver);
 	}
+	
+	public boolean isUpdateUINTitleDisplayed() {
+		return isElementDisplayed(updateUinButton);
+	}
+	
+	public boolean isLostUINTitleDisplayed() {
+		return isElementDisplayed(lostUinButton);
+	}
+	
+	public boolean isBiometricCorrectionTitleDisplayed() {
+		return isElementDisplayed(biometricCorrectionButton);
+	}
+	
+	public  void clickSynchronizeDataButton() {
+		clickOnElement(synchronizeDataButton);
+		waitTime(50);
+	}
+	
+	public boolean checkLastSyncDate() {
+		String contentDesc = synchronizeDataButton.getAttribute("content-desc");
+		if(contentDesc.contains("Synchronize Data\n"+getCurrentDateWord()+","))
+			return true;
+		else
+			return false;
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/SupervisorBiometricVerificationpageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/SupervisorBiometricVerificationpageArabic.java
index e4b56badf..05cd4dd87 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/SupervisorBiometricVerificationpageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/SupervisorBiometricVerificationpageArabic.java
@@ -368,5 +368,9 @@ public boolean isOperatorOnboardedPopupLoaded() {
 	public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
+	
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/UpdateOperatorBiometricspageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/UpdateOperatorBiometricspageArabic.java
index 5c0355869..0e3386b3b 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/UpdateOperatorBiometricspageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/UpdateOperatorBiometricspageArabic.java
@@ -369,5 +369,9 @@ public boolean isOperatorBiometricsUpdatedPopupLoaded() {
 	public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
+	
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/arabic/UpdateUINPageArabic.java b/uitest-regclient/src/main/java/regclient/pages/arabic/UpdateUINPageArabic.java
index 6fdef5a5d..789191e93 100644
--- a/uitest-regclient/src/main/java/regclient/pages/arabic/UpdateUINPageArabic.java
+++ b/uitest-regclient/src/main/java/regclient/pages/arabic/UpdateUINPageArabic.java
@@ -1,294 +1,64 @@
 package regclient.pages.arabic;
 
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.UpdateUINPage;
+import regclient.pages.english.ConsentPageEnglish;
 
 public class UpdateUINPageArabic extends UpdateUINPage{
 	
-	@AndroidFindBy(accessibility = "تحديث UIN")
-	private WebElement updateUINTitle;
-	
 	@AndroidFindBy(xpath = "//android.widget.EditText")
 	private WebElement UINNumberTextBox;
 	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"موافقة\")")
-	private WebElement consentButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"اللغة المفضلة\")")
-	private WebElement preferredLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"الاسم الكامل\")")
-	private WebElement fullNameButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"تاريخ الميلاد\")")
-	private WebElement DOBButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"جنس تذكير أو تأنيث\")")
-	private WebElement genderButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"عنوان\")")
-	private WebElement addressButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"الحالة الاجتماعية\")")
-	private WebElement maritalStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"لغة مقدم الطلب\")")
-	private WebElement applicantLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"حالة الإقامة\")")
-	private WebElement residenceStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"موقع\")")
-	private WebElement locationButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"هاتف\")")
-	private WebElement phoneButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"بريد إلكتروني\")")
-	private WebElement emailButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"تفاصيل المقدمة\")")
-	private WebElement introducerDetailsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"القياسات الحيوية\")")
-	private WebElement biometricsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"وثائق\")")
-	private WebElement documentsButton;
-	
 	@AndroidFindBy(accessibility = "يكمل")
 	private WebElement continueButton;
+	
+	@AndroidFindBy(accessibility = "الرجاء إدخال رقم تعريف شخصي صالح")
+	private WebElement invalidUINErrorMessage;
 
 	public UpdateUINPageArabic(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isUpdateMyUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
-	
 	public  void enterUIN(String UIN) {
 		clickAndsendKeysToTextBox(UINNumberTextBox,UIN);
 	}
-	
-	public  void clickOnConsentButton() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(consentButton);
-	}
-	
-	public boolean isConsentTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(consentButton);
-	}
-	
-	public  void clickOnPreferredLanguageButton() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(preferredLanguageButton);
-	}
-	
-	public boolean isPreferredLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(preferredLanguageButton);
-	}
-		
-	public  void clickOnFullNameButton() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(fullNameButton);
-	}
-	
-	public boolean isFullNameTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(fullNameButton);
-	}
-	
-	
-	public  void clickOnDOBButton() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(DOBButton);
-	}
-	
-	public boolean isDOBTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(DOBButton);
-	}
-	
-	public  void clickOnGenderButton() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(genderButton);
-	}
-	
-	public boolean isnGenderTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(genderButton);
-	}
-	
-	public  void clickOnAddressButton() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressButton);
-	}
-	
-	public boolean isAddressTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(addressButton);
-	}
-	
-	public  void clickOnMaritalStatusButton() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(maritalStatusButton);
-	}
-	
-	public boolean isMaritalStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(maritalStatusButton);
-	}
-	
-	public  void clickOnApplicantLanguageButton() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(applicantLanguageButton);
-	}
-	
-	public boolean isApplicantLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(applicantLanguageButton);
-	}
-	
-	public  void clickOnResidenceStatusButton() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(residenceStatusButton);
-	}
-	
-	public boolean isResidenceStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusButton);
-	}
-	
-	public  void clickOnLocationButton() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(locationButton);
-	}
-	
-	public boolean isLocationTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(locationButton);
-	}
-	
-	public  void clickOnPhoneButton() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(phoneButton);
-	}
-	
-	public boolean isPhoneTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(phoneButton);
-	}
-	
-	public  void clickOnEmailButton() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(emailButton);
-	}
-	
-	public boolean isEmailTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailButton);
-	}
-	
-	public  void clickOnIntroducerDetailsButton() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerDetailsButton);
-	}
-	
-	public boolean isIntroducerDetailsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(introducerDetailsButton);
-	}
-	
-	public  void clickOnBiometricsButton() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(biometricsButton);
+
+	public  ConsentPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new ConsentPageEnglish(driver);
 	}
 	
-	public boolean isnBiometricsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(biometricsButton);
+	public boolean isInvalidUINErrorMessageDisplayed() {
+		return isElementDisplayed(invalidUINErrorMessage);
 	}
 	
-	public  void clickOnDocumentsButton() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(documentsButton);
+	public void selectUpdateValue(String page) {
+		List groupLabelList=FetchUiSpec.getAllGroupLabelUsingId(page);
+		for(String title : groupLabelList) {
+				WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+title+"\")"));
+				assertTrue(isElementDisplayed(webelement),"Verify if "+title+" title is displayed in update uin page");
+				clickOnElement(webelement);			
+			}		
 	}
 	
-	public boolean isDocumentsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(documentsButton);
-	}
-
-	public  ConsentPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new ConsentPageArabic(driver);
+	public void selectUpdateIntroducerDetails() {
+		WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getGroupValueUsingId("introducerName")+"\")"));
+		assertTrue(isElementDisplayed(webelement),"Verify if "+FetchUiSpec.getGroupValueUsingId("introducerName")+" title is displayed in update uin page");
+		clickOnElement(webelement);			
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/AcknowledgementPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/AcknowledgementPageEnglish.java
index ce949c1e3..06da8e8d6 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/AcknowledgementPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/AcknowledgementPageEnglish.java
@@ -4,7 +4,9 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AcknowledgementPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
@@ -33,9 +35,6 @@ public class AcknowledgementPageEnglish extends AcknowledgementPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Biometrics\"))")
 	private WebElement biometricsInformationInAcknowledgementPage;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Demographic Details\"))")
-	private WebElement demographicDetailsTitle;
-	
 	@AndroidFindBy(accessibility = "Sync Packet")
 	private WebElement syncPacketButton;
 	
@@ -79,8 +78,9 @@ public boolean isBiometricsInformationInAcknowledgementPageDisplayed() {
 		return isElementDisplayed(biometricsInformationInAcknowledgementPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
 		return new DemographicDetailsPageEnglish(driver);
 	}
 	
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/ApplicantBiometricsPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/ApplicantBiometricsPageEnglish.java
index 30a8cf8f1..03b93f8d7 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/ApplicantBiometricsPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/ApplicantBiometricsPageEnglish.java
@@ -3,262 +3,260 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
 
 
 public class ApplicantBiometricsPageEnglish extends ApplicantBiometricsPage {
 
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Applicant Biometrics')]")
-		private WebElement applicantBiometricsPageTitle;
-		
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Authentication')]")
-		private WebElement authenticationBiometricsPageTitle;
-		
-		@AndroidFindBy(accessibility = "Iris Scan")
-		private WebElement irisScanButton;
-		
-		@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Iris Scan\"))")
-		private WebElement irisScanButtonTitle;
-		
-		@AndroidFindBy(accessibility = "Permanent")
-		private WebElement permanentButton;
-		
-		@AndroidFindBy(accessibility = "Temporary")
-		private WebElement temporaryButton;
-		
-		@AndroidFindBy(accessibility = "Mark Exception")
-		private WebElement markExceptionButton;
-		
-		@AndroidFindBy(accessibility = "Mark Exception")
-		private WebElement exceptionTypeTitle;
-		
-		@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(1)")
-		private WebElement oneEyeException;
-		
-		@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(2)")
-		private WebElement firstFingureExceptionImage;
-		
-		@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(1)")
-		private WebElement secondFingureExceptionImage;
-		
-		@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(3)")
-		private WebElement thirdFingureExceptionImage;
-		
-		@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(4)")
-		private WebElement forthFingureExceptionImage;
-		
-		@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Right Hand\"))")
-		private WebElement rightHandScanTitle;
-		
-		@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Left Hand\"))")
-		private WebElement leftHandScanTitle;
-		
-		@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Thumbs Scan\"))")
-		private WebElement thumbsScanTitle;
-		
-		@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Face Scan\"))")
-		private WebElement faceScanTitle;
-		
-		@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Exception Scan\"))")
-		private WebElement exceptionScanTitle;
-		
-		@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Scan\"))")
-		private WebElement scanButton;
-		
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Iris Capture')]")
-		private WebElement irisCapturerHeader;
-		
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'RightHand Capture')]")
-		private WebElement rightHandCapturerHeader;
-		
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'LeftHand Capture')]")
-		private WebElement leftHandCapturerHeader;
-		
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Thumbs Capture')]")
-		private WebElement thumbsCapturerHeader;
-		
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Face Capture')]")
-		private WebElement faceCapturerHeader;
-		
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Exception Capture')]")
-		private WebElement exceptionCapturerHeader;
-		
-		@AndroidFindBy(xpath = "//android.widget.ScrollView/android.view.View[3]")
-		private WebElement zoomButton;
-		
-		@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Comments\")]/following-sibling::android.widget.EditText")
-		private WebElement commentsTextBox;
-		
-		@AndroidFindBy(className = "android.widget.Button")
-		private WebElement popUpCloseButton;
-		
-		@AndroidFindBy(accessibility = "NEXT")
-		private WebElement nextButton;
-		
-		@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Comments\"))")
-		private WebElement commentsHeader;
-		
-		@AndroidFindBy(xpath = "//android.view.View[@content-desc=\"Exceptions\"]/following-sibling::android.view.View[@content-desc=\"1\"]")
-		private WebElement exceptionCount;
-		
-		public ApplicantBiometricsPageEnglish(AppiumDriver driver) {
-			super(driver);
-		}
-		
-		public  void enterCommentsInTextBox(String comments) {
-			if(!isElementDisplayedOnScreen(commentsTextBox)) {
-				swipeOrScroll();
-			}
-			clickAndsendKeysToTextBox(commentsTextBox,comments);
-		}
+	@AndroidFindBy(accessibility = "Iris Scan")
+	private WebElement irisScanButton;
 
-		public void clickOnScanButton() {
-			clickOnElement(scanButton);
-		}	
-		
-		public void clickOnExceptionTypePermanentButton() {
-			if(!isElementDisplayedOnScreen(permanentButton)) {
-				swipeOrScroll();
-			}
-			clickOnElement(permanentButton);
-		}
-		
-		public void clickOnExceptionTypeTemporaryButton() {
-			if(!isElementDisplayedOnScreen(temporaryButton)) {
-				swipeOrScroll();
-			}
-			clickOnElement(temporaryButton);	
-		}
-		
-		public void markOneEyeException() {
-			clickOnElement(oneEyeException);
-		}
-		
-		public void markOneFingureException() {
-			clickOnElement(firstFingureExceptionImage);
-		}
-		
-		public void markFourFingureExceptionThenRemoveOne() {
-			clickOnElement(firstFingureExceptionImage);
-			clickOnElement(secondFingureExceptionImage);
-			clickOnElement(thirdFingureExceptionImage);
-			clickOnElement(forthFingureExceptionImage);
-			clickOnElement(firstFingureExceptionImage);
-		}
-		
-		public void clickOnClosePopUp() {
-			clickOnElement(popUpCloseButton);
-		}
-		
-		public void clickOnMarkExceptionButton() {
-			clickOnElement(markExceptionButton);
-		}
-		
-		public void clickOnIrisScanButton() {
-			clickOnElement(irisScanButton);
-		}
-		
-		public BiometricDetailsPage clickOnNextButton() {
-			clickOnElement(nextButton);
-			return new BiometricDetailsPageEnglish(driver);
-		}
-		
-		public void clickOnZoomButton() {
-			clickOnElement(zoomButton);
-		}
-		
-		public void clickOnIrisScanTitle() {
-			clickOnElement(irisScanButtonTitle);
-		}
-		
-		public void clickOnRightHandScanTitle() {
-			clickOnElement(rightHandScanTitle);
-		}
-		
-		public void clickOnleftHandScanTitle() {
-			clickOnElement(leftHandScanTitle);
-		}
-		
-		public void clickOnThumbsScanTitle() {
-			clickOnElement(thumbsScanTitle);
-		}
-		
-		public void closeScanCapturePopUp() {
-			driver.navigate().back();
-		}
-		
-		public BiometricDetailsPage clickOnBackButton() {
-			driver.navigate().back();
-			return new BiometricDetailsPageEnglish(driver);
-		}
-		
-		public  boolean isApplicantBiometricsPageDisplyed() {
-			return isElementDisplayed(applicantBiometricsPageTitle);
-		}
-		
-		public  boolean isAuthenticationBiometricsPageDisplyed() {
-			return isElementDisplayed(authenticationBiometricsPageTitle);
-		}
-		
-		public  boolean isExceptionTypeTitleDisplyed() {
-			return isElementDisplayed(exceptionTypeTitle);
-		}
-		
-		public  boolean isRightHandScanTitleDisplyed() {
-			return isElementDisplayed(rightHandScanTitle);
-		}
-		
-		public  boolean isLeftHandScanTitleDisplyed() {
-			return isElementDisplayed(leftHandScanTitle);
-		}
-		
-		public  boolean isThumbsScanTitleDisplyed() {
-			return isElementDisplayed(thumbsScanTitle);
-		}
-		
-		public  boolean isFaceScanTitleDisplyed() {
-			return isElementDisplayed(faceScanTitle);
-		}
-		
-		public  boolean isExceptionScanTitleDisplyed() {
-			return isElementDisplayed(exceptionScanTitle);
-		}
-		
-		public  boolean isIrisScan() {
-			return isElementDisplayed(irisCapturerHeader,2000);
-		}
-		
-		public  boolean isRightHandScan() {
-			return isElementDisplayed(rightHandCapturerHeader,2000);
-		}
-		
-		public  boolean isLeftHandScan() {
-			return isElementDisplayed(leftHandCapturerHeader,2000);
-		}
-		
-		public  boolean isThumbsScan() {
-			return isElementDisplayed(thumbsCapturerHeader,2000);
-		}
-		
-		public  boolean isFaceScan() {
-			return isElementDisplayed(faceCapturerHeader,2000);
+	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Iris Scan\"))")
+	private WebElement irisScanButtonTitle;
+
+	@AndroidFindBy(accessibility = "Permanent")
+	private WebElement permanentButton;
+
+	@AndroidFindBy(accessibility = "Temporary")
+	private WebElement temporaryButton;
+
+	@AndroidFindBy(accessibility = "Mark Exception")
+	private WebElement markExceptionButton;
+
+	@AndroidFindBy(accessibility = "Mark Exception")
+	private WebElement exceptionTypeTitle;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(1)")
+	private WebElement oneEyeException;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(2)")
+	private WebElement firstFingureExceptionImage;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(1)")
+	private WebElement secondFingureExceptionImage;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(3)")
+	private WebElement thirdFingureExceptionImage;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(4)")
+	private WebElement forthFingureExceptionImage;
+
+	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Right Hand\"))")
+	private WebElement rightHandScanTitle;
+
+	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Left Hand\"))")
+	private WebElement leftHandScanTitle;
+
+	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Thumbs Scan\"))")
+	private WebElement thumbsScanTitle;
+
+	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Face Scan\"))")
+	private WebElement faceScanTitle;
+
+	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Exception Scan\"))")
+	private WebElement exceptionScanTitle;
+
+	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Scan\"))")
+	private WebElement scanButton;
+
+	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Iris Capture')]")
+	private WebElement irisCapturerHeader;
+
+	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'RightHand Capture')]")
+	private WebElement rightHandCapturerHeader;
+
+	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'LeftHand Capture')]")
+	private WebElement leftHandCapturerHeader;
+
+	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Thumbs Capture')]")
+	private WebElement thumbsCapturerHeader;
+
+	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Face Capture')]")
+	private WebElement faceCapturerHeader;
+
+	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Exception Capture')]")
+	private WebElement exceptionCapturerHeader;
+
+	@AndroidFindBy(xpath = "//android.widget.ScrollView/android.view.View[3]")
+	private WebElement zoomButton;
+
+	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Comments\")]/following-sibling::android.widget.EditText")
+	private WebElement commentsTextBox;
+
+	@AndroidFindBy(className = "android.widget.Button")
+	private WebElement popUpCloseButton;
+
+	@AndroidFindBy(accessibility = "NEXT")
+	private WebElement nextButton;
+
+	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Comments\"))")
+	private WebElement commentsHeader;
+
+	@AndroidFindBy(xpath = "//android.view.View[@content-desc=\"Exceptions\"]/following-sibling::android.view.View[@content-desc=\"1\"]")
+	private WebElement exceptionCount;
+
+	public ApplicantBiometricsPageEnglish(AppiumDriver driver) {
+		super(driver);
+	}
+
+	public  void enterCommentsInTextBox(String comments) {
+		if(!isElementDisplayedOnScreen(commentsTextBox)) {
+			swipeOrScroll();
 		}
-		
-		public  boolean isExceptionScan() {
-			return isElementDisplayed(exceptionCapturerHeader,2000);
+		clickAndsendKeysToTextBox(commentsTextBox,comments);
+	}
+
+	public void clickOnScanButton() {
+		clickOnElement(scanButton);
+	}	
+
+	public void clickOnExceptionTypePermanentButton() {
+		if(!isElementDisplayedOnScreen(permanentButton)) {
+			swipeOrScroll();
 		}
-		
-		public  boolean isCommentHeaderDisplyed() {
-			return isElementDisplayed(commentsHeader);
+		clickOnElement(permanentButton);
+	}
+
+	public void clickOnExceptionTypeTemporaryButton() {
+		if(!isElementDisplayedOnScreen(temporaryButton)) {
+			swipeOrScroll();
 		}
+		clickOnElement(temporaryButton);	
+	}
+
+	public void markOneEyeException() {
+		clickOnElement(oneEyeException);
+	}
+
+	public void markOneFingureException() {
+		clickOnElement(firstFingureExceptionImage);
+	}
+
+	public void markFourFingureExceptionThenRemoveOne() {
+		clickOnElement(firstFingureExceptionImage);
+		clickOnElement(secondFingureExceptionImage);
+		clickOnElement(thirdFingureExceptionImage);
+		clickOnElement(forthFingureExceptionImage);
+		clickOnElement(firstFingureExceptionImage);
+	}
+
+	public void clickOnClosePopUp() {
+		clickOnElement(popUpCloseButton);
+	}
+
+	public void clickOnMarkExceptionButton() {
+		clickOnElement(markExceptionButton);
+	}
+
+	public void clickOnIrisScanButton() {
+		clickOnElement(irisScanButton);
+	}
+
+	public BiometricDetailsPage clickOnNextButton() {
+		clickOnElement(nextButton);
+		return new BiometricDetailsPageEnglish(driver);
+	}
+
+	public void clickOnZoomButton() {
+		clickOnElement(zoomButton);
+	}
+
+	public void clickOnIrisScanTitle() {
+		clickOnElement(irisScanButtonTitle);
+	}
+
+	public void clickOnRightHandScanTitle() {
+		clickOnElement(rightHandScanTitle);
+	}
+
+	public void clickOnleftHandScanTitle() {
+		clickOnElement(leftHandScanTitle);
+	}
+
+	public void clickOnThumbsScanTitle() {
+		clickOnElement(thumbsScanTitle);
+	}
+
+	public void closeScanCapturePopUp() {
+		driver.navigate().back();
+	}
+
+	public BiometricDetailsPage clickOnBackButton() {
+		driver.navigate().back();
+		return new BiometricDetailsPageEnglish(driver);
+	}
+
+	@SuppressWarnings("deprecation")
+	public  boolean isApplicantBiometricsPageDisplyed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
+	}
+
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricsPageDisplyed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
+	}
+
+	public  boolean isExceptionTypeTitleDisplyed() {
+		return isElementDisplayed(exceptionTypeTitle);
+	}
+
+	public  boolean isRightHandScanTitleDisplyed() {
+		return isElementDisplayed(rightHandScanTitle);
+	}
+
+	public  boolean isLeftHandScanTitleDisplyed() {
+		return isElementDisplayed(leftHandScanTitle);
+	}
+
+	public  boolean isThumbsScanTitleDisplyed() {
+		return isElementDisplayed(thumbsScanTitle);
+	}
+
+	public  boolean isFaceScanTitleDisplyed() {
+		return isElementDisplayed(faceScanTitle);
+	}
+
+	public  boolean isExceptionScanTitleDisplyed() {
+		return isElementDisplayed(exceptionScanTitle);
+	}
+
+	public  boolean isIrisScan() {
+		return isElementDisplayed(irisCapturerHeader,2000);
+	}
+
+	public  boolean isRightHandScan() {
+		return isElementDisplayed(rightHandCapturerHeader,2000);
+	}
+
+	public  boolean isLeftHandScan() {
+		return isElementDisplayed(leftHandCapturerHeader,2000);
+	}
+
+	public  boolean isThumbsScan() {
+		return isElementDisplayed(thumbsCapturerHeader,2000);
+	}
+
+	public  boolean isFaceScan() {
+		return isElementDisplayed(faceCapturerHeader,2000);
+	}
+
+	public  boolean isExceptionScan() {
+		return isElementDisplayed(exceptionCapturerHeader,2000);
+	}
+
+	public  boolean isCommentHeaderDisplyed() {
+		return isElementDisplayed(commentsHeader);
+	}
 
-		public  boolean isExceptionCountDisplyed() {
-			if(!isElementDisplayedOnScreen(exceptionCount)) {
-				swipeOrScroll();
-				isElementDisplayed(exceptionCount);
-			}
-			return isElementDisplayed(exceptionCount);
+	public  boolean isExceptionCountDisplyed() {
+		if(!isElementDisplayedOnScreen(exceptionCount)) {
+			swipeOrScroll();
+			isElementDisplayed(exceptionCount);
 		}
+		return isElementDisplayed(exceptionCount);
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/BiometricDetailsPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/BiometricDetailsPageEnglish.java
index e226936ad..f368cd9c3 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/BiometricDetailsPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/BiometricDetailsPageEnglish.java
@@ -1,9 +1,12 @@
 package regclient.pages.english;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
@@ -12,12 +15,6 @@
 
 public class BiometricDetailsPageEnglish extends BiometricDetailsPage {
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"Applicant Biometrics\"))")
-	private WebElement applicantBiometricTitle;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"Authentication\"))")
-	private WebElement authenticationBiometricTitle;
-
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"Iris\"))")
 	private WebElement irisScanIcon;
 	
@@ -36,9 +33,6 @@ public class BiometricDetailsPageEnglish extends BiometricDetailsPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"Exception Scan\"))")
 	private WebElement exceptionScanIcon;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,\"Introducer Biometrics\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Iris Scan\"]")
-	private WebElement introducerIrisScanIcon;
-	
 	@AndroidFindBy(accessibility = "CONTINUE")
 	private WebElement continueButton;
 
@@ -46,12 +40,14 @@ public BiometricDetailsPageEnglish(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public  boolean isBiometricDetailsPageDisplayed() {
-		return isElementDisplayed(applicantBiometricTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
 	}
 		
+	@SuppressWarnings("deprecation")
 	public  boolean isAuthenticationBiometricTitleDisplayed() {
-		return isElementDisplayed(authenticationBiometricTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
 	}
 	
 	public ApplicantBiometricsPage clickOnIrisScan() {
@@ -86,10 +82,31 @@ public ApplicantBiometricsPage clickOnExceptionScanIcon() {
 	}
 	
 	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
-		while(!isElementDisplayedOnScreen(introducerIrisScanIcon)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerIrisScanIcon);
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Iris Scan\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerRightHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Right\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerLeftHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Left\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerThumbScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Thumbs\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerFaceScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Face\"]")));
 		return new IntroducerBiometricPageEnglish(driver);
 
 	}
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/ConsentPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/ConsentPageEnglish.java
index fc9e7c462..608fee3a4 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/ConsentPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/ConsentPageEnglish.java
@@ -4,7 +4,9 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
@@ -12,34 +14,24 @@
 
 public class ConsentPageEnglish extends ConsentPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Consent\"))")
-	private WebElement consentPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().className(\"android.widget.CheckBox\"))")
-	private WebElement termAndConditionCheckBox;
-
 	@AndroidFindBy(accessibility = "INFORMED")
 	private WebElement informedButton;
 	
 	@AndroidFindBy(accessibility = "CANCEL")
 	private WebElement cancelButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"I have read and accept terms and conditions to share my PII\"))")
-	private WebElement checkBoxDiscription;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Update UIN\"))")
-	private WebElement updateUINTitle;
 
 	public ConsentPageEnglish(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isConsentPageDisplayed() {
-		return isElementDisplayed(consentPage);
+			return isElementDisplayed(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));		
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isCheckBoxReadable() {
-		return isElementDisplayed(checkBoxDiscription);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("consent") + "\"))")));
 	}
 	
 	public  boolean isInformedButtonEnabled() {
@@ -57,8 +49,9 @@ public RegistrationTasksPage clickOnCancelButton() {
 		return new  RegistrationTasksPageEnglish(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
 	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/DemographicDetailsPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/DemographicDetailsPageEnglish.java
index 7b635e1ee..a9e27b4a1 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/DemographicDetailsPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/DemographicDetailsPageEnglish.java
@@ -1,166 +1,52 @@
 package regclient.pages.english;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.BaseTestCase;
+import regclient.api.FetchUiSpec;
+import regclient.page.BasePage;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.DocumentUploadPage;
+import regclient.utils.TestDataReader;
 
 
 public class DemographicDetailsPageEnglish extends DemographicDetailsPage {
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Full Name\"))")
-	private WebElement demographicDetailspage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Consent\"))")
-	private WebElement consentTitle;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Full Name\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement fullNameTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Full Name\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement fullNameTextBoxSecondLanguage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")
-	private WebElement ageTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine1TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine1TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine2TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine2TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine3TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine3TextBoxSecondLangauge;
-
 	@AndroidFindBy(accessibility = "Male")
 	private WebElement maleButton;
 
 	@AndroidFindBy(accessibility = "Female")
 	private WebElement femaleButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Civil Status\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectMaritalStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Residence Status\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectResidentStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Region\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectRegionStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Province\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectProvinceStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"City\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectCityStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Zone\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectZoneStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Postal\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectPostal;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"14022\")")
-	private WebElement selectPostalCode;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Non-Foreigner\")")
-	private WebElement nonForeignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Foreigner\")")
-	private WebElement foreignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Single\")")
-	private WebElement singleValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Rabat Sale Kenitra\")")
-	private WebElement rabatSaleKenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Kenitra\")]")
-	private WebElement kenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Rabat\")]")
-	private WebElement rabatValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Ben Mansour\")")
-	private WebElement benMansourFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Residence Status\")")
-	private WebElement residenceStatusHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Region\")")
-	private WebElement regionHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Province\")")
-	private WebElement provinceHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"City\")")
-	private WebElement cityHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Zone\")")
-	private WebElement zoneHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Postal\")")
-	private WebElement postalCodeHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Phone\")")
-	private WebElement mobileNumberHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Email\"))")
-	private WebElement emailHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Introducer Name\"))")
-	private WebElement introducerNameHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Introducer RID\"))")
-	private WebElement introducerRidHeader;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Phone\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText")
-	private WebElement mobileNumberTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Email\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement emailIdTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Introducer Name\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerNameTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Introducer Name\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement introducerNameTextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Introducer RID\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerRidTextBox;
-
 	@AndroidFindBy(accessibility = "CONTINUE")
 	private WebElement continueButton;
 
 	@AndroidFindBy(accessibility = "Invalid input")
 	private WebElement errorMessageInvalidInputText;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement calenderIcon;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement getSelectedDate;
-
 	@AndroidFindBy(accessibility = "Scrim")
 	private WebElement backgroundScreen;
 
+	@AndroidFindBy(accessibility = "FETCH DATA")
+	private WebElement fetchDataButton;
+
 
 	public DemographicDetailsPageEnglish(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isDemographicDetailsPageDisplayed() {
+		WebElement  demographicDetailspage = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))"));
 		return isElementDisplayed(demographicDetailspage);
 	}
 
@@ -168,296 +54,238 @@ public boolean isErrorMessageInvalidInputTextDisplayed() {
 		return isElementDisplayed(errorMessageInvalidInputText);
 	}
 
+	@SuppressWarnings("deprecation")
 	public  ConsentPage clickOnConsentPageTitle() {
+		WebElement  consentTitle = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));
 		clickOnElement(consentTitle);
 		return new ConsentPageEnglish(driver);
 	}
 
-	public  void enterFullName(String fullName) {
-		clickAndsendKeysToTextBox(fullNameTextBox,fullName);
-	}
+	public  DocumentUploadPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new DocumentuploadPageEnglish(driver);
 
-	public  void enterAddressLine1(String addressLine1) {
-		if(!isElementDisplayedOnScreen(addressLine1TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine1TextBox,addressLine1);
 	}
-
-	public  void enterAddressLine2(String addressLine2) {
-		if(!isElementDisplayedOnScreen(addressLine2TextBox)) {
-			swipeOrScroll();
+	
+	public  boolean isContinueButtonEnable() {
+		return isElementEnabled(continueButton);
+
+	}
+
+	public boolean isPreRegFetchDataTextBoxDisplay() {
+		return isElementDisplayed(fetchDataButton);
+	}
+
+	public void fillDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}
+				else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(3);
+					while(!isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"))) {
+						swipeOrScroll();
+					}
+					boolean isdisplayed =isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(3);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("")){	
+					if(!isElementDisplayed(maleButton)) {
+						swipeOrScroll();
+						clickOnElement(maleButton);		
+					}else
+						clickOnElement(maleButton);		
+
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			else if(id.equals("residenceStatus")) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(2);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(2);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
 		}
-		clickAndsendKeysToTextBox(addressLine2TextBox,addressLine2);
 	}
 
-	public  void enterAddressLine3(String addressLine3) {
-		if(!isElementDisplayedOnScreen(addressLine3TextBox)) {
-			swipeOrScroll();
+	public void editDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
 		}
-		clickAndsendKeysToTextBox(addressLine3TextBox,addressLine3);
-	}
-
-	public  void enterAge(String age) {
-		clickAndsendKeysToTextBox(ageTextBox,age);
-	}
-
-	public boolean checkFullNameSecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(fullNameTextBoxSecondLanguage)==null || getTextFromLocator(fullNameTextBoxSecondLanguage)=="" )
-			return	false;
-		else
-			return	true;
 	}
 
-	public boolean checkAddress1SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine1TextBoxSecondLangauge)==null || getTextFromLocator(addressLine1TextBoxSecondLangauge)=="" )
+	public boolean checkSecondLanguageTextBoxNotNull(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))==null || getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))=="" )
 			return	false;
 		else
 			return	true;
 	}
 
-	public boolean checkAddress2SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine2TextBoxSecondLangauge)==null || getTextFromLocator(addressLine2TextBoxSecondLangauge)=="" )
-			return	false;
-		else
+	public  boolean checkDateFormatAndCurrectDate(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View"))).equalsIgnoreCase(getCurrentDate())) 
 			return	true;
-	}
-
-	public boolean checkAddress3SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine3TextBoxSecondLangauge)==null || getTextFromLocator(addressLine3TextBoxSecondLangauge)=="" )
-			return	false;
-		else
-			return	true;
-	}
-
-	public boolean checkIntroducerNameTextBoxSecondLangaugeTextBoxNotNull() {
-		if(getTextFromLocator(introducerNameTextBoxSecondLangauge)==null || getTextFromLocator(introducerNameTextBoxSecondLangauge)=="" )
-			return	false;
 		else
-			return	true;
-	}
-	public boolean isResidenceStatusHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(residenceStatusHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusHeader);
-	}
-
-	public boolean isRegionHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(regionHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(regionHeader);
-	}
-
-	public boolean isProvinceHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(provinceHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(provinceHeader);
-	}
-
-	public boolean isCityHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(cityHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(cityHeader);
-	}
-
-	public boolean isPostalCodeHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(postalCodeHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(postalCodeHeader);
-	}
-
-	public boolean isMobileNumberHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(mobileNumberHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(mobileNumberHeader);
-	}
-
-	public boolean isZoneHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(zoneHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(zoneHeader);
-	}
-
-	public boolean isEmailHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(emailHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailHeader);
-	}
-
-	public boolean isIntroducerNameHeaderDisplayed() {
-		return isElementDisplayed(introducerNameHeader);
-	}
-
-	public boolean isIntroducerRidHeaderDisplayed() {
-		return isElementDisplayed(introducerRidHeader);
-	}
-
-	public  void selectGender(String gender) {
-		if(gender.equalsIgnoreCase("male"))
-			clickOnElement(maleButton);
-		if(gender.equalsIgnoreCase("female"))
-			clickOnElement(femaleButton);
-	}
-
-	public  void selectMaritalStatus() {
-		clickOnElement(selectMaritalStatus);
-		if(!isElementDisplayedOnScreen(singleValueFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectMaritalStatus);
-			clickOnElement(singleValueFromDropdown);
-		}else
-			clickOnElement(singleValueFromDropdown);
-	}
-
-	public  void selectResidenceStatus(String ResidenceStatus) {
-		clickOnElement(selectResidentStatus);
-		if(ResidenceStatus.equalsIgnoreCase("Foreigner")) {
-			if(!isElementDisplayedOnScreen(foreignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(foreignerValueFromDropdown);
-			}else
-				clickOnElement(foreignerValueFromDropdown);
-		}else {
-			if(!isElementDisplayedOnScreen(nonForeignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(nonForeignerValueFromDropdown);
-			}else
-				clickOnElement(nonForeignerValueFromDropdown);
-		}
-
+			return false;
 	}
-
-	public  void selectRegionStatus(String region) {
-		clickOnElement(selectRegionStatus);
-		if(region.equalsIgnoreCase("Rabat Sale Kenitra")) {
-			if(!isElementDisplayedOnScreen(rabatSaleKenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectRegionStatus);
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
-			}else {
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
+	
+	public void fillIntroducerDetailsInDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(id.equals("introducerName")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerUIN")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("UINminor"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
 			}
 		}
-
-	}
-
-	public  void selectProvinceStatus(String province) {
-		clickOnElement(selectProvinceStatus);
-		if(province.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(province.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectCityStatus(String city) {
-		clickOnElement(selectCityStatus);
-		if(city.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(city.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectZoneStatus() {
-		clickOnElement(selectZoneStatus);
-		if(!isElementDisplayedOnScreen(benMansourFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectZoneStatus);
-			clickOnElement(benMansourFromDropdown);
-		}else
-			clickOnElement(benMansourFromDropdown);
-	}
-
-	public  void selectPostalStatus() {
-		clickOnElement(selectPostal);
-		if(!isElementDisplayedOnScreen(selectPostalCode)) {
-			swipeOrScroll();
-			clickOnElement(selectPostal);
-			clickOnElement(selectPostalCode);
-		}else
-			clickOnElement(selectPostalCode);
-	}
-
-	public  DocumentUploadPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new DocumentuploadPageEnglish(driver);
-
-	}
-
-	public  void enterMobileNumber(String mobileNumber) {
-		if(!isElementDisplayedOnScreen(mobileNumberTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-		}else
-			clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-	}
-
-	public  void enterEmailID(String EmailID) {
-		if(!isElementDisplayedOnScreen(emailIdTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-		}else
-			clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-	}
-
-	public  void enterIntroducerName(String introducerName) {
-		if(!isElementDisplayedOnScreen(introducerNameTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-		}else
-			clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-	}
-
-	public  void enterIntroducerRid(String introducerRid) {
-		if(!isElementDisplayedOnScreen(introducerRidTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-		}else
-			clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-	}
-
-	public  void selectCurrentCalenderDate() {
-		clickOnElement(calenderIcon);		
-	}
-
-	public  void closeCalender() {
-		clickOnElement(backgroundScreen);		
-	}
-
-	public  boolean checkDateFormatAndCurrectDate() {
-		getTextFromLocator(getSelectedDate);
-		if(getTextFromLocator(getSelectedDate).equalsIgnoreCase(getCurrentDate())) 
-			return	true;
-		else
-			return false;
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/DocumentuploadPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/DocumentuploadPageEnglish.java
index 7dde9e831..cea8fc518 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/DocumentuploadPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/DocumentuploadPageEnglish.java
@@ -1,9 +1,16 @@
 package regclient.pages.english;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.CameraPage;
 import regclient.page.DocumentUploadPage;
@@ -11,255 +18,167 @@
 
 public class DocumentuploadPageEnglish extends DocumentUploadPage {
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Document Upload\"))")
-	private WebElement doccumentUploadPage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.Button\")")
-	private WebElement identityProofScanButton;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement addressProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Identity Proof\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement identityProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Relationship Proof\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement relationshipProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB Proof\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement dobProofSelectValue;
-
 	@AndroidFindBy(accessibility = "Scrim")
 	private WebElement PopUpCloseButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonAddressProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Identity Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonIdentityProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonDobProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Relationship Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonRelationshipProof;
-
 	@AndroidFindBy(accessibility = "Back")
 	private WebElement backButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView")
-	private WebElement previewCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[2]")
-	private WebElement previewSecondCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[3]")
-	private WebElement previewThirdCaptureImage;
-
 	@AndroidFindBy(accessibility = "CONTINUE")
 	private WebElement continueButton;
 
 	@AndroidFindBy(accessibility = "DELETE")
 	private WebElement deleteButton;
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"DOB Proof\"))")
-	private WebElement dobsHeader;
+	@AndroidFindBy(accessibility = "SAVE")
+	private WebElement saveButton;
+
+	@AndroidFindBy(accessibility = "RETAKE")
+	private WebElement retakeButton;
 
-	@AndroidFindBy(className= "android.widget.ImageView")
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.view.View\").instance(8)")
+	private WebElement imageleftCorner;
+
+	@AndroidFindBy(className = "android.widget.ImageView")
 	private WebElement captureImage;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement addressProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Identity Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement identityProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement dobProofReferenceNumberTextbox;
 
 	public DocumentuploadPageEnglish(AppiumDriver driver) {
 		super(driver);
 	}
 
-
-
-	public void selectAddressProof() {
-		while(!isElementDisplayedOnScreen(addressProofSelectValue) || !isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(addressProofSelectValue);	
-		}
-	}
-
-	public void selectIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofSelectValue)|| !isElementDisplayedOnScreen(scanButtonIdentityProof) ) {
-			swipeOrScroll();
-		}
-		clickOnElement(identityProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(identityProofSelectValue);	
-		}
-	}
-
-	public void selectDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofSelectValue) || !isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(dobProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(dobProofSelectValue);	
-		}
-	}
-
-	public void selectRelationshipProof() {
-		while(!isElementDisplayedOnScreen(relationshipProofSelectValue) || !isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(relationshipProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(relationshipProofSelectValue);	
-		}
-	}
-
-	public void selectOnCaptureImage() {
-		clickOnElement(previewCaptureImage);
-	}
-
-	public void closePopUpClose() {
-		clickOnElement(PopUpCloseButton);
-	}
-
-	public CameraPage clickOnAddressProofScanButton() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonAddressProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonDobProof() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonDobProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonIdentityProof() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonIdentityProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonRelationshipProof() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonRelationshipProof);
-		return new CameraPage(driver);
-	}
-
-	public void clickOnBackButton() {
-		clickOnElement(backButton);
-
-	}
-
-	public void clickOnDeleteButton() {
-		clickOnElement(deleteButton);
-
-	}
-
 	public  BiometricDetailsPage clickOnContinueButton() {
 		clickOnElement(continueButton);
 		return new BiometricDetailsPageEnglish(driver);
 	}
 
-	public  boolean isImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(captureImage);
-	}
-
-	public  boolean isSecondImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewSecondCaptureImage);
-	}
-
-	public  boolean isThirdImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewThirdCaptureImage);
-	}
-
-	public  boolean isDeleteButtonDisplyed() {
-		if(!isElementDisplayedOnScreen(deleteButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(deleteButton);
-	}
-
+	@SuppressWarnings("deprecation")
 	public boolean isDoccumentUploadPageDisplayed() {
-		return isElementDisplayed(doccumentUploadPage);
-	}
-
-	public boolean isDobHeaderDisplayed() {
-		return isElementDisplayed(dobsHeader);
-	}
-
-	public  boolean isScanButtonAddressProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonAddressProof);
-	}
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("Documents") + "\"))")));
+	}
+
+	public  DocumentUploadPage clickOnSaveButton() {
+		clickOnElement(saveButton);
+		return new DocumentuploadPageEnglish(driver);
+	}
+
+	public boolean isRetakeButtonDisplayed() {
+		return isElementDisplayed(retakeButton);
+	}
+
+	public void cropCaptureImage() {
+		isElementDisplayed(captureImage);
+		cropCaptureImage(imageleftCorner);
+	}
+
+	public void uploadDoccuments(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(type.equalsIgnoreCase("ReferenceNumber")) {
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")),"1234567890");
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}else {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}
+		}
+
+	}
+	public void uploadDoccumentsUpdate(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(type.equals("all") && !id.equals("proofOfException") && !id.equals("proofOfRelationship")) {
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+					swipeOrScroll();
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				}
+				clickOnElement(PopUpCloseButton);
+				waitTime(1);
+				boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				CameraPage cameraPage=new CameraPage(driver);
+				cameraPage.clickimage();
+				cameraPage.clickOkButton();
+				assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+				cropCaptureImage();
+				clickOnSaveButton();
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+				}
+			}
 
-	public  boolean isScanButtonIdentityProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
 		}
-		return isElementEnabled(scanButtonIdentityProof);
 	}
 
-	public  boolean isScanButtonDobProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonDobProof);
-	}
-
-	public  boolean isScanButtonRelationshipProoffEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonRelationshipProof);
-	}
-	
-	public  void enterReferenceNumberInAdressProof() {
-		if(!isElementDisplayedOnScreen(addressProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-		}else
-		clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(identityProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(dobProofReferenceNumberTextbox,"1234567890");
-	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/IntroducerBiometricPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/IntroducerBiometricPageEnglish.java
index 75c3ede2e..af12a04ee 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/IntroducerBiometricPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/IntroducerBiometricPageEnglish.java
@@ -3,16 +3,15 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
 
 
 public class IntroducerBiometricPageEnglish extends IntroducerBiometricPage {
 		
-		@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Introducer Biometrics')]")
-		private WebElement introducerBiometricPageTitle;
-		
 		@AndroidFindBy(accessibility = "Iris Scan")
 		private WebElement irisScanButton;
 		
@@ -131,8 +130,9 @@ public BiometricDetailsPage clickOnBackButton() {
 			return new BiometricDetailsPageEnglish(driver);
 		}
 		
+		@SuppressWarnings("deprecation")
 		public  boolean isIntroducerBiometricsPageDisplyed() {
-			return isElementDisplayed(introducerBiometricPageTitle);
+			return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId("introducerBiometrics")+"\")")));
 		}
 		
 		public  boolean isExceptionTypeTitleDisplyed() {
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/LoginPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/LoginPageEnglish.java
index 35743525e..0e2366a31 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/LoginPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/LoginPageEnglish.java
@@ -5,6 +5,8 @@
 import regclient.page.LoginPage;
 import regclient.page.RegistrationTasksPage;
 
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
 import java.time.Duration;
 
 import org.openqa.selenium.WebElement;
@@ -23,6 +25,9 @@ public LoginPageEnglish(AppiumDriver driver) {
 
 	@AndroidFindBy(accessibility = "NEXT")
 	private WebElement nextButton;
+	
+	@AndroidFindBy(accessibility = "Machine not found!")
+	private WebElement machineNotFound;
 
 	@AndroidFindBy(xpath = "//android.widget.EditText")
 	private WebElement passwordTextBox;
@@ -95,7 +100,7 @@ public LoginPageEnglish(AppiumDriver driver) {
 
 	@AndroidFindBy(accessibility = "Sync Completed Successfully")
 	private WebElement syncCompletedSuccessfullyMessage;
-	
+
 	@AndroidFindBy(accessibility = "COPY TEXT")
 	private WebElement copyTextButton;
 
@@ -107,7 +112,7 @@ public  void enterUserName(String username) {
 	public  void clickOnCopyTextButton() {
 		clickOnElement(copyTextButton);
 	}
-	
+
 	public  void clickOnNextButton() {
 		clickOnElement(nextButton);
 	}
@@ -149,6 +154,10 @@ public boolean isUserNameHeaderDisplayed() {
 	public boolean isWelcomeMessageDisplayed() {
 		return isElementDisplayed(welcomeMessageEnglish);
 	}
+	
+	public boolean isMachineNotFoundMessageDisplayed() {
+		return isElementDisplayed(machineNotFound);
+	}
 
 	public boolean isWelcomeMessageInSelectedLanguageDisplayed() {
 		return isElementDisplayed(welcomeMessageEnglish);
@@ -187,12 +196,20 @@ public void selectLanguage() {
 	public boolean isSyncCompletedSuccessfullyMessageDisplayed() {
 		return isElementDisplayed(syncCompletedSuccessfullyMessage,2000);
 	}
-	
+
 	public void clickandHold() {
 		clickAndHold();
 	}
-	
-	public String getMachineDetails() {
-		 return getMachineDetails();
+
+	public  void getMachineDetails()  {
+		try {		
+			getMachineDetail();
+		} catch (UnsupportedFlavorException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}catch (InterruptedException e) {
+			e.printStackTrace();
+		}
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/ManageApplicationsPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/ManageApplicationsPageEnglish.java
index fa0217cfe..6484422c1 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/ManageApplicationsPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/ManageApplicationsPageEnglish.java
@@ -100,8 +100,14 @@ public  void clickOnUploadButton() {
 	public boolean isPacketUploadDone(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
-		if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
-			return false;
+		if(element.getAttribute("contentDescription").contains("NOT UPLOADED")) {
+			waitTime(10);
+			element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+			if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
+				return false;
+			else
+				return true;
+		}
 		else
 			return true;
 	}
@@ -123,6 +129,15 @@ public boolean isPacketSynned(String AID) {
 		else
 			return false;
 	}
+	
+	public boolean isPacketRejected(String AID) {
+		waitTime(2);
+		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+		if(element.getAttribute("contentDescription").contains("REJECTED"))
+			return true;
+		else
+			return false;
+	}
 
 	public  void clickClientStatusDropdown() {
 		clickOnElement(clientStatusDropdown);
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/OperationalTaskPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/OperationalTaskPageEnglish.java
index 187cade19..666da33ea 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/OperationalTaskPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/OperationalTaskPageEnglish.java
@@ -21,6 +21,9 @@ public class OperationalTaskPageEnglish extends OperationalTaskPage{
 	
 	@AndroidFindBy(accessibility = "Application Upload")
 	private WebElement applicationUploadTitle;
+	
+	@AndroidFindBy(accessibility = "Pending Approval")
+	private WebElement pendingApprovalTitle;
 
 	public OperationalTaskPageEnglish(AppiumDriver driver) {
 		super(driver);
@@ -32,7 +35,7 @@ public  SupervisorBiometricVerificationpage clickOnUpdateOperatorBiometricsButto
 	}
 
 	public boolean isOperationalTaskPageLoaded() {
-		return isElementDisplayed(systemStorageUsageTitle);
+		return true;
 	}
 
 	public  void clickSynchronizeDataButton() {
@@ -58,6 +61,17 @@ public boolean isApplicationUploadTitleDisplayed() {
 		}
 		return isElementDisplayed(applicationUploadTitle);
 	}
+	
+	public  void clickPendingApprovalTitle() {
+		clickOnElement(pendingApprovalTitle);
+	}
+	
+	public boolean isPendingApprovalTitleDisplayed() {
+		if(!isElementDisplayedOnScreen(pendingApprovalTitle)) {
+			swipeOrScroll();
+		}
+		return isElementDisplayed(pendingApprovalTitle);
+	}
 
 	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/PendingApprovalEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/PendingApprovalEnglish.java
new file mode 100644
index 000000000..01cdc99cc
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/pages/english/PendingApprovalEnglish.java
@@ -0,0 +1,160 @@
+/**
+ * 
+ */
+package regclient.pages.english;
+
+import static org.testng.Assert.assertTrue;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.page.PendingApproval;
+
+public class PendingApprovalEnglish extends PendingApproval{
+
+	@AndroidFindBy(accessibility = "Pending Approval")
+	private WebElement pendingApprovalTitle;
+
+	@AndroidFindBy(accessibility = "APPROVE")
+	private WebElement approveButton;
+	
+	@AndroidFindBy(accessibility = "REJECT")
+	private WebElement rejectButton;
+
+	@AndroidFindBy(accessibility = "Scrim")
+	private WebElement backGroundScreen;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.CheckBox\").instance(0)")
+	private WebElement searchCheckBoxButton;
+
+	@AndroidFindBy(accessibility = "SUBMIT")
+	private WebElement submitButton;
+
+	@AndroidFindBy(accessibility = "Supervisor's Authentication")
+	private WebElement supervisorAuthenticationTitle;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
+	private WebElement userNameTextBox;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
+	private WebElement passwordTextBox;
+	
+	@AndroidFindBy(xpath = "//*[contains(@content-desc,\"Pending Approval\")]//preceding-sibling::android.widget.Button")
+	private WebElement backButton;
+	
+	@AndroidFindBy(accessibility = "Sl.no Application ID Reg. Date Client Status Review Status Operator ID")
+	private WebElement pageAttributes ;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"CREATED\")")
+	private WebElement clientStatus;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Pending\").instance(1)")
+	private WebElement reviewStatus;
+	
+	@AndroidFindBy(xpath = "//android.widget.EditText")
+	private WebElement applicationIdTextbox;
+	
+	@AndroidFindBy(accessibility = "Reject Packet?")
+	private WebElement rejectPacketTitle;
+	
+	@AndroidFindBy(accessibility = "Please select a value")
+	private WebElement rejectReasonDropdown;
+
+	public PendingApprovalEnglish(AppiumDriver driver) {
+		super(driver);
+	}
+
+	public boolean isPendingApprovalTitleDisplayed() {
+		return isElementDisplayed(pendingApprovalTitle);		
+	}
+
+	@SuppressWarnings("deprecation")
+	public void clickOnAID(String AID) {
+		clickOnElement(findElementWithRetry(MobileBy.AccessibilityId(AID)));
+	}
+
+	public void clickOnApproveButton() {
+		clickOnElement(approveButton);
+	}
+
+	public void clickOnClosePopUpButton() {
+		clickOnElement(backGroundScreen);
+	}
+
+	public void clickOnCheckBox() {
+		clickOnElement(searchCheckBoxButton);
+	}
+
+	public void clickOnSubmitButton() {
+		clickOnElement(submitButton);
+	}
+
+	public boolean isSupervisorAuthenticationTitleDisplayed() {
+		return isElementDisplayed(supervisorAuthenticationTitle);		
+	}
+
+	public  void enterUserName(String username) {
+		sendKeysToTextBox(userNameTextBox,username);
+	}
+
+	public  void enterPassword(String password) {
+		sendKeysToTextBox(passwordTextBox,password);
+	}
+	
+	public void clickOnBackButton() {
+		clickOnElement(backButton);
+	}
+
+	public boolean isApprovalButtonDisplayed() {
+		return isElementDisplayed(approveButton);		
+	}
+	
+	public boolean isRejectButtonDisplayed() {
+		return isElementDisplayed(rejectButton);		
+	}
+	
+	public boolean isPageAttributesDisplayed() {
+		return isElementDisplayed(pageAttributes);		
+	}
+	
+	public boolean isClientStatusDisplayed() {
+		return isElementDisplayed(clientStatus);		
+	}
+
+	public boolean isReviewStatusDisplayed() {
+		return isElementDisplayed(reviewStatus);		
+	}
+	
+	public  void enterAID(String AID) {
+		clickAndsendKeysToTextBox(applicationIdTextbox,AID);
+	}
+	
+	public void clickOnRejectButton() {
+		clickOnElement(rejectButton);
+	}
+	
+	public boolean isRejectPacketTitleDisplayed() {
+		return isElementDisplayed(rejectPacketTitle);		
+	}
+	
+	public void selectRejectionReasonDropdown() {
+		boolean isdisplayed =isElementDisplayed(rejectReasonDropdown);
+		assertTrue(isdisplayed,"Verify if "+rejectReasonDropdown+" header is displayed");
+		clickOnElement(rejectReasonDropdown);
+		waitTime(2);
+		if(!isElementDisplayed(rejectReasonDropdown)) {				
+			clickOnElement(findElement(By.className("android.view.View")));
+		}else {
+			clickOnElement(rejectReasonDropdown);
+			waitTime(2);
+			clickOnElement(findElement(By.className("android.view.View")));
+		}	
+	}
+	
+	public boolean isSubmitButtonEnabled() {
+		return isElementEnabled(submitButton);		
+	}
+}
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/PreviewPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/PreviewPageEnglish.java
index ba3c663ae..05d8c2508 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/PreviewPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/PreviewPageEnglish.java
@@ -3,19 +3,15 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AuthenticationPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.PreviewPage;
 
 
 public class PreviewPageEnglish extends PreviewPage {
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Update UIN\"))")
-	private WebElement updateUINTitle;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"New Registration\"))")
-	private WebElement newRegistrationTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Demographic Information\"))")
 	private WebElement demographicInformationInPreviewPage;
@@ -25,9 +21,6 @@ public class PreviewPageEnglish extends PreviewPage {
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Documents\"))")
 	private WebElement documentsInformationInPreviewPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Demographic Details\"))")
-	private WebElement demographicDetailsTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Biometrics\"))")
 	private WebElement biometricsInformationInPreviewPage;
@@ -65,20 +58,24 @@ public boolean isBiometricsInformationInPreviewPagePageDisplayed() {
 		return isElementDisplayed(biometricsInformationInPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isNewRegistrationTitleDisplayed() {
-		return isElementDisplayed(newRegistrationTitle);
+		return isElementDisplayed(findElement(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("NEW") + "\"))")));
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
 	
 	public boolean isApplicationIDPreviewPagePageDisplayed() {
+		waitTime(1);
 		return isElementDisplayed(applicationIDPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
 		return new DemographicDetailsPageEnglish(driver);
 	}
 	
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/RegistrationTasksPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/RegistrationTasksPageEnglish.java
index 8032ad0d0..6077316a7 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/RegistrationTasksPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/RegistrationTasksPageEnglish.java
@@ -28,11 +28,14 @@ public class RegistrationTasksPageEnglish  extends RegistrationTasksPage{
 	@AndroidFindBy(accessibility = "New Registration")
 	private WebElement newRegistrationButton;
 	
-	@AndroidFindBy(accessibility = "Update UIN")
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Update\")")
 	private WebElement updateUinButton;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.ImageView\").instance(0)")
-	private WebElement synchronizeDataButton ;
+	
+	@AndroidFindBy(accessibility = "Lost UIN")
+	private WebElement lostUinButton;
+	
+	@AndroidFindBy(accessibility = "Biometric correction")
+	private WebElement biometricCorrectionButton;
 
 	@AndroidFindBy(xpath = "//android.widget.Toast[@text=\"Policy key Sync Completed\"]")
 	private WebElement policykeySyncCompletedMessage ;
@@ -42,6 +45,9 @@ public class RegistrationTasksPageEnglish  extends RegistrationTasksPage{
 
 	@AndroidFindBy(xpath = "//android.widget.Toast[@text=\"Script Sync Completed\"]")
 	private WebElement scriptSyncCompletedMessage ;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Synchronize Data\")")
+	private WebElement synchronizeDataButton ;
 
 	public RegistrationTasksPageEnglish(AppiumDriver driver) {
 		super(driver);
@@ -57,7 +63,7 @@ public  void clickOnSynchronizeDataButton() {
 	}
 
 	public boolean isRegistrationTasksPageLoaded() {
-		return isElementDisplayed(registrationTasksTitle);
+		return isElementDisplayed(registrationTasksTitle,2000);
 	}
 
 	public boolean isOperationalTaskDisplayed() {
@@ -99,5 +105,30 @@ public  SelectLanguagePage clickUpdateMyUINButton() {
 		clickOnElement(updateUinButton);
 		return new SelectLanguagePageEnglish(driver);
 	}
+	
+	public boolean isUpdateUINTitleDisplayed() {
+		return isElementDisplayed(updateUinButton);
+	}
+	
+	public boolean isLostUINTitleDisplayed() {
+		return isElementDisplayed(lostUinButton);
+	}
+	
+	public boolean isBiometricCorrectionTitleDisplayed() {
+		return isElementDisplayed(biometricCorrectionButton);
+	}
+	
+	public  void clickSynchronizeDataButton() {
+		clickOnElement(synchronizeDataButton);
+		waitTime(50);
+	}
+	
+	public boolean checkLastSyncDate() {
+		String contentDesc = synchronizeDataButton.getAttribute("content-desc");
+		if(contentDesc.contains("Synchronize Data\n"+getCurrentDateWord()+","))
+			return true;
+		else
+			return false;
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/SupervisorBiometricVerificationpageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/SupervisorBiometricVerificationpageEnglish.java
index c2b10eb23..1d0b75bf9 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/SupervisorBiometricVerificationpageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/SupervisorBiometricVerificationpageEnglish.java
@@ -4,6 +4,7 @@
 
 import io.appium.java_client.AppiumDriver;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.page.BiometricDetailsPage;
 import regclient.page.SupervisorBiometricVerificationpage;
 
 public class SupervisorBiometricVerificationpageEnglish extends SupervisorBiometricVerificationpage{
@@ -376,4 +377,8 @@ public boolean isOperatorOnboardedPopupLoaded() {
 	public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
+	
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/UpdateOperatorBiometricspageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/UpdateOperatorBiometricspageEnglish.java
index 76a2b287a..77004d4ef 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/UpdateOperatorBiometricspageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/UpdateOperatorBiometricspageEnglish.java
@@ -376,4 +376,7 @@ public void clickOnVerifyAndSaveButton() {
 		
 	}
 
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/english/UpdateUINPageEnglish.java b/uitest-regclient/src/main/java/regclient/pages/english/UpdateUINPageEnglish.java
index ed7adc784..0b5f0a91a 100644
--- a/uitest-regclient/src/main/java/regclient/pages/english/UpdateUINPageEnglish.java
+++ b/uitest-regclient/src/main/java/regclient/pages/english/UpdateUINPageEnglish.java
@@ -1,294 +1,64 @@
 package regclient.pages.english;
 
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.UpdateUINPage;
 
 public class UpdateUINPageEnglish extends UpdateUINPage{
-	
-	@AndroidFindBy(accessibility = "Update UIN")
-	private WebElement updateUINTitle;
-	
+
 	@AndroidFindBy(xpath = "//android.widget.EditText")
 	private WebElement UINNumberTextBox;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Consent\")")
-	private WebElement consentButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"PreferredLanguage\")")
-	private WebElement preferredLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Full Name\")")
-	private WebElement fullNameButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"DOB\")")
-	private WebElement DOBButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Gender\")")
-	private WebElement genderButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Address\")")
-	private WebElement addressButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Marital Status\")")
-	private WebElement maritalStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ApplicantLanguage\")")
-	private WebElement applicantLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ResidenceStatus\")")
-	private WebElement residenceStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Location\")")
-	private WebElement locationButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Phone\")")
-	private WebElement phoneButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Email\")")
-	private WebElement emailButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"IntroducerDetails\")")
-	private WebElement introducerDetailsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Biometrics\")")
-	private WebElement biometricsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Documents\")")
-	private WebElement documentsButton;
-	
+
 	@AndroidFindBy(accessibility = "CONTINUE")
 	private WebElement continueButton;
 
+	@AndroidFindBy(accessibility = "Please enter a valid UIN")
+	private WebElement invalidUINErrorMessage;
+
 	public UpdateUINPageEnglish(AppiumDriver driver) {
 		super(driver);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public boolean isUpdateMyUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
-	
 	public  void enterUIN(String UIN) {
 		clickAndsendKeysToTextBox(UINNumberTextBox,UIN);
 	}
-	
-	public  void clickOnConsentButton() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(consentButton);
-	}
-	
-	public boolean isConsentTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(consentButton);
-	}
-	
-	public  void clickOnPreferredLanguageButton() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(preferredLanguageButton);
-	}
-	
-	public boolean isPreferredLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(preferredLanguageButton);
-	}
-		
-	public  void clickOnFullNameButton() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(fullNameButton);
-	}
-	
-	public boolean isFullNameTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(fullNameButton);
-	}
-	
-	
-	public  void clickOnDOBButton() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(DOBButton);
-	}
-	
-	public boolean isDOBTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(DOBButton);
-	}
-	
-	public  void clickOnGenderButton() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(genderButton);
-	}
-	
-	public boolean isnGenderTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(genderButton);
-	}
-	
-	public  void clickOnAddressButton() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressButton);
-	}
-	
-	public boolean isAddressTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(addressButton);
-	}
-	
-	public  void clickOnMaritalStatusButton() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(maritalStatusButton);
-	}
-	
-	public boolean isMaritalStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(maritalStatusButton);
-	}
-	
-	public  void clickOnApplicantLanguageButton() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(applicantLanguageButton);
-	}
-	
-	public boolean isApplicantLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(applicantLanguageButton);
-	}
-	
-	public  void clickOnResidenceStatusButton() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(residenceStatusButton);
-	}
-	
-	public boolean isResidenceStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusButton);
-	}
-	
-	public  void clickOnLocationButton() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(locationButton);
-	}
-	
-	public boolean isLocationTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(locationButton);
-	}
-	
-	public  void clickOnPhoneButton() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(phoneButton);
-	}
-	
-	public boolean isPhoneTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(phoneButton);
-	}
-	
-	public  void clickOnEmailButton() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(emailButton);
-	}
-	
-	public boolean isEmailTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailButton);
-	}
-	
-	public  void clickOnIntroducerDetailsButton() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerDetailsButton);
-	}
-	
-	public boolean isIntroducerDetailsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(introducerDetailsButton);
-	}
-	
-	public  void clickOnBiometricsButton() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(biometricsButton);
-	}
-	
-	public boolean isnBiometricsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(biometricsButton);
-	}
-	
-	public  void clickOnDocumentsButton() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(documentsButton);
-	}
-	
-	public boolean isDocumentsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(documentsButton);
-	}
 
 	public  ConsentPage clickOnContinueButton() {
 		clickOnElement(continueButton);
 		return new ConsentPageEnglish(driver);
 	}
+
+	public boolean isInvalidUINErrorMessageDisplayed() {
+		return isElementDisplayed(invalidUINErrorMessage);
+	}
+
+	public void selectUpdateValue(String page) {
+		List groupLabelList=FetchUiSpec.getAllGroupLabelUsingId(page);
+		for(String title : groupLabelList) {
+			WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+title+"\")"));
+			assertTrue(isElementDisplayed(webelement),"Verify if "+title+" title is displayed in update uin page");
+			clickOnElement(webelement);			
+		}		
+	}
+
+	public void selectUpdateIntroducerDetails() {
+		WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getGroupValueUsingId("introducerName")+"\")"));
+		assertTrue(isElementDisplayed(webelement),"Verify if "+FetchUiSpec.getGroupValueUsingId("introducerName")+" title is displayed in update uin page");
+		clickOnElement(webelement);			
+	}				
+
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/AcknowledgementPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/AcknowledgementPageFrench.java
index edb413a54..ed00434a5 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/AcknowledgementPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/AcknowledgementPageFrench.java
@@ -3,10 +3,13 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AcknowledgementPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 import regclient.pages.english.RegistrationTasksPageEnglish;
 
 public class AcknowledgementPageFrench extends AcknowledgementPage{
@@ -32,8 +35,6 @@ public class AcknowledgementPageFrench extends AcknowledgementPage{
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Biométrie\"))")
 	private WebElement biometricsInformationInAcknowledgementPage;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Détails démographiques\"))")
-	private WebElement demographicDetailsTitle;
 	
 	public AcknowledgementPageFrench(AppiumDriver driver) {
 		super(driver);
@@ -69,17 +70,13 @@ public boolean isBiometricsInformationInAcknowledgementPageDisplayed() {
 		return isElementDisplayed(biometricsInformationInAcknowledgementPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageFrench(driver);
-	}
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
+	}	
 	
 	public String getAID() {
 		return getTextFromLocator(applicationID);
 	}
-	
-	
-
-	
-
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/ApplicantBiometricsPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/ApplicantBiometricsPageFrench.java
index e3e52d8ec..b0470fc39 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/ApplicantBiometricsPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/ApplicantBiometricsPageFrench.java
@@ -3,14 +3,14 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class ApplicantBiometricsPageFrench extends ApplicantBiometricsPage{
-
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Applicant Biometrics')]")
-	private WebElement applicantBiometricsPageTitle;
 	
 	@AndroidFindBy(accessibility = "Iris ANALYSE")
 	private WebElement irisScanButton;
@@ -99,8 +99,6 @@ public class ApplicantBiometricsPageFrench extends ApplicantBiometricsPage{
 	@AndroidFindBy(xpath = "//android.view.View[@content-desc=\"Des exceptions\"]/following-sibling::android.view.View[@content-desc=\"1\"]")
 	private WebElement exceptionCount;
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Authentication')]")
-	private WebElement authenticationBiometricsPageTitle;
 	
 	public ApplicantBiometricsPageFrench(AppiumDriver driver) {
 		super(driver);
@@ -116,29 +114,29 @@ public  void enterCommentsInTextBox(String comments) {
 	public void clickOnScanButton() {
 		clickOnElement(scanButton);
 	}	
-	
+
 	public void clickOnExceptionTypePermanentButton() {
 		if(!isElementDisplayedOnScreen(permanentButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(permanentButton);
 	}
-	
+
 	public void clickOnExceptionTypeTemporaryButton() {
 		if(!isElementDisplayedOnScreen(temporaryButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(temporaryButton);	
 	}
-	
+
 	public void markOneEyeException() {
 		clickOnElement(oneEyeException);
 	}
-	
+
 	public void markOneFingureException() {
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(firstFingureExceptionImage);
 		clickOnElement(secondFingureExceptionImage);
@@ -146,109 +144,115 @@ public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(forthFingureExceptionImage);
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void clickOnClosePopUp() {
 		clickOnElement(popUpCloseButton);
 	}
-	
+
 	public void clickOnMarkExceptionButton() {
 		clickOnElement(markExceptionButton);
 	}
-	
+
 	public void clickOnIrisScanButton() {
 		clickOnElement(irisScanButton);
 	}
-	
+
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageFrench(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
 	public void clickOnZoomButton() {
 		clickOnElement(zoomButton);
 	}
-	
+
 	public void clickOnIrisScanTitle() {
 		clickOnElement(irisScanButtonTitle);
 	}
-	
+
 	public void clickOnRightHandScanTitle() {
 		clickOnElement(rightHandScanTitle);
 	}
-	
+
 	public void clickOnleftHandScanTitle() {
 		clickOnElement(leftHandScanTitle);
 	}
-	
+
 	public void clickOnThumbsScanTitle() {
 		clickOnElement(thumbsScanTitle);
 	}
-	
+
 	public void closeScanCapturePopUp() {
 		driver.navigate().back();
 	}
-	
+
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageFrench(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  boolean isApplicantBiometricsPageDisplyed() {
-		return isElementDisplayed(applicantBiometricsPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
 	}
-	
+
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricsPageDisplyed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
+	}
+
 	public  boolean isExceptionTypeTitleDisplyed() {
 		return isElementDisplayed(exceptionTypeTitle);
 	}
-	
+
 	public  boolean isRightHandScanTitleDisplyed() {
 		return isElementDisplayed(rightHandScanTitle);
 	}
-	
+
 	public  boolean isLeftHandScanTitleDisplyed() {
 		return isElementDisplayed(leftHandScanTitle);
 	}
-	
+
 	public  boolean isThumbsScanTitleDisplyed() {
 		return isElementDisplayed(thumbsScanTitle);
 	}
-	
+
 	public  boolean isFaceScanTitleDisplyed() {
 		return isElementDisplayed(faceScanTitle);
 	}
-	
+
 	public  boolean isExceptionScanTitleDisplyed() {
 		return isElementDisplayed(exceptionScanTitle);
 	}
-	
+
 	public  boolean isIrisScan() {
 		return isElementDisplayed(irisCapturerHeader,2000);
 	}
-	
+
 	public  boolean isRightHandScan() {
 		return isElementDisplayed(rightHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isLeftHandScan() {
 		return isElementDisplayed(leftHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isThumbsScan() {
 		return isElementDisplayed(thumbsCapturerHeader,2000);
 	}
-	
+
 	public  boolean isFaceScan() {
 		return isElementDisplayed(faceCapturerHeader,2000);
 	}
-	
+
 	public  boolean isExceptionScan() {
 		return isElementDisplayed(exceptionCapturerHeader,2000);
 	}
-	
+
 	public  boolean isCommentHeaderDisplyed() {
 		return isElementDisplayed(commentsHeader);
 	}
-	
+
 	public  boolean isExceptionCountDisplyed() {
 		if(!isElementDisplayedOnScreen(exceptionCount)) {
 			swipeOrScroll();
@@ -256,8 +260,4 @@ public  boolean isExceptionCountDisplyed() {
 		}
 		return isElementDisplayed(exceptionCount);
 	}
-	
-	public  boolean isAuthenticationBiometricsPageDisplyed() {
-		return isElementDisplayed(authenticationBiometricsPageTitle);
-	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/BiometricDetailsPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/BiometricDetailsPageFrench.java
index 67ef9d1aa..d78166010 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/BiometricDetailsPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/BiometricDetailsPageFrench.java
@@ -1,20 +1,23 @@
 package regclient.pages.french;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.ApplicantBiometricsPageEnglish;
+import regclient.pages.english.IntroducerBiometricPageEnglish;
+import regclient.pages.english.PreviewPageEnglish;
 
 
 public class BiometricDetailsPageFrench extends BiometricDetailsPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"Applicant Biometrics\"))")
-	private WebElement applicantBiometricTitle;
-
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"Iris\"))")
 	private WebElement irisScanIcon;
 	
@@ -39,63 +42,83 @@ public class BiometricDetailsPageFrench extends BiometricDetailsPage{
 	@AndroidFindBy(accessibility = "CONTINUER")
 	private WebElement continueButton;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"Authentication\"))")
-	private WebElement authenticationBiometricTitle;
-	
 	public BiometricDetailsPageFrench(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public  boolean isBiometricDetailsPageDisplayed() {
-		return isElementDisplayed(applicantBiometricTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
+	}
+		
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricTitleDisplayed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
 	}
-
-	
 	
 	public ApplicantBiometricsPage clickOnIrisScan() {
 		clickOnElement(irisScanIcon);
-		return new ApplicantBiometricsPageFrench(driver);
-	}
-	
-	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
-		while(!isElementDisplayedOnScreen(introducerIrisScanIcon)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerIrisScanIcon);
-		return new IntroducerBiometricPageFrench(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnRightHandScanIcon() {
 		clickOnElement(rightHandScanIcon);
-		return new ApplicantBiometricsPageFrench(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnLeftHandScanIcon() {
 		clickOnElement(leftHandScanIcon);
-		return new ApplicantBiometricsPageFrench(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnThumbsScanIcon() {
 		clickOnElement(thumbsScanIcon);
-		return new ApplicantBiometricsPageFrench(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnFaceScanIcon() {
 		clickOnElement(faceScanIcon);
-		return new ApplicantBiometricsPageFrench(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnExceptionScanIcon() {
 		clickOnElement(exceptionScanIcon);
-		return new ApplicantBiometricsPageFrench(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
+
 	}
 	
-	public  PreviewPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new PreviewPageFrench(driver);
+	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Iris Scan\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
 	}
 	
-	public  boolean isAuthenticationBiometricTitleDisplayed() {
-		return isElementDisplayed(authenticationBiometricTitle);
+	public IntroducerBiometricPage clickOnIntroducerRightHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Right\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerLeftHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Left\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerThumbScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Thumbs\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerFaceScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Face\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public  PreviewPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new PreviewPageEnglish(driver);
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/ConsentPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/ConsentPageFrench.java
index f9bd0a695..01938bcd8 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/ConsentPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/ConsentPageFrench.java
@@ -3,19 +3,17 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
+import regclient.pages.english.RegistrationTasksPageEnglish;
 
 
 public class ConsentPageFrench extends ConsentPage{
-	
-	@AndroidFindBy(accessibility = "Consentement")
-	private WebElement consentPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().className(\"android.widget.CheckBox\"))")
-	private WebElement termAndConditionCheckBox;
 
 	@AndroidFindBy(accessibility = "INFORMÉ")
 	private WebElement informedButton;
@@ -23,44 +21,38 @@ public class ConsentPageFrench extends ConsentPage{
 	@AndroidFindBy(accessibility = "ANNULER")
 	private WebElement cancelButton;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"/J'ai lu et j'accepte les termes et conditions pour partager mes PII \"))")
-	private WebElement checkBoxDiscription;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Mettre à jour l'UIN\"))")
-	private WebElement updateUINTitle;
-
-
-
 	public ConsentPageFrench(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isConsentPageDisplayed() {
-		return isElementDisplayed(consentPage);
+			return isElementDisplayed(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));		
 	}
 
-
+	@SuppressWarnings("deprecation")
 	public boolean isCheckBoxReadable() {
-		return isElementDisplayed(checkBoxDiscription);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("consent") + "\"))")));
 	}
 	
-
 	public  boolean isInformedButtonEnabled() {
 		return isElementEnabled(informedButton);
 	}
 
 	public  DemographicDetailsPage clickOnInformedButton() {
 		clickOnElement(informedButton);
-		return new DemographicDetailsPageFrench(driver);
+		return new DemographicDetailsPageEnglish(driver);
 	}
-	
+
+
 	public RegistrationTasksPage clickOnCancelButton() {
 		clickOnElement(cancelButton);
-		return new  RegistrationTasksPageFrench(driver);
+		return new  RegistrationTasksPageEnglish(driver);
 	}
-
+	
+	@SuppressWarnings("deprecation")
 	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/DemographicDetailsPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/DemographicDetailsPageFrench.java
index 52e330992..293e125e4 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/DemographicDetailsPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/DemographicDetailsPageFrench.java
@@ -1,464 +1,291 @@
 package regclient.pages.french;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.BaseTestCase;
+import regclient.api.FetchUiSpec;
+import regclient.page.BasePage;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.DocumentUploadPage;
 import regclient.pages.english.ConsentPageEnglish;
 import regclient.pages.english.DocumentuploadPageEnglish;
+import regclient.utils.TestDataReader;
 
 public class DemographicDetailsPageFrench extends DemographicDetailsPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Nom complet\"))")
-	private WebElement demographicDetailspage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Consentement\"))")
-	private WebElement consentTitle;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
-	private WebElement fullNameTextBox;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
-	private WebElement fullNameTextBoxSecondLanguage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(2)")
-	private WebElement ageTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine1TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine2TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine3TextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine1TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine2TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"addressLine3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine3TextBoxSecondLangauge;
-
 	@AndroidFindBy(accessibility = "Mâle")
 	private WebElement maleButton;
 
 	@AndroidFindBy(accessibility = "Femelle")
 	private WebElement femaleButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"État civil\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectMaritalStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Statut de résidence\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectResidentStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Région\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectRegionStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Province\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectProvinceStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Ville\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectCityStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Zone\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectZoneStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Postale\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectPostal;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"14022\")")
-	private WebElement selectPostalCode;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Non-étranger\")")
-	private WebElement nonForeignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Étrangère\")")
-	private WebElement foreignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Seule\")")
-	private WebElement singleValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Rabat-Salé-Kénitra\")")
-	private WebElement rabatSaleKenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Kénitra\")]")
-	private WebElement kenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Rabat\")]")
-	private WebElement rabatValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Ben Mansour\")")
-	private WebElement benMansourFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Statut de résidence\")")
-	private WebElement residenceStatusHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Région\")")
-	private WebElement regionHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Province\")")
-	private WebElement provinceHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Ville\")")
-	private WebElement cityHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Zone\")")
-	private WebElement zoneHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Postale\")")
-	private WebElement postalCodeHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Téléphoner\")")
-	private WebElement mobileNumberHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"E-mail\")")
-	private WebElement emailHeader;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"nom del'introducteur\")")
-	private WebElement introducerNameHeader;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Introducteur RID\")")
-	private WebElement introducerRidHeader;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Téléphoner\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText")
-	private WebElement mobileNumberTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"E-mail\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement emailIdTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"nom del'introducteur\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerNameTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"nom del'introducteur\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement introducerNameTextBoxSecondLangauge;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Introducteur RID\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerRidTextBox;
-
 	@AndroidFindBy(accessibility = "CONTINUER")
 	private WebElement continueButton;
 	
 	@AndroidFindBy(accessibility = "Entrée invalide")
 	private WebElement errorMessageInvalidInputText;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement calenderIcon;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement getSelectedDate;
-	
+
 	@AndroidFindBy(accessibility = "Fond")
 	private WebElement backgroundScreen;
 	
+	@AndroidFindBy(accessibility = "FETCH DATA")
+	private WebElement fetchDataButton;
+	
 	public DemographicDetailsPageFrench(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isDemographicDetailsPageDisplayed() {
+		WebElement  demographicDetailspage = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))"));
 		return isElementDisplayed(demographicDetailspage);
 	}
-	
+
 	public boolean isErrorMessageInvalidInputTextDisplayed() {
 		return isElementDisplayed(errorMessageInvalidInputText);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  ConsentPage clickOnConsentPageTitle() {
+		WebElement  consentTitle = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));
 		clickOnElement(consentTitle);
 		return new ConsentPageEnglish(driver);
 	}
 
-	public  void enterFullName(String fullName) {
-		clickAndsendKeysToTextBox(fullNameTextBox,fullName);
-	}
-
-	public  void enterAddressLine1(String addressLine1) {
-		if(!isElementDisplayedOnScreen(addressLine1TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine1TextBox,addressLine1);
-	}
-
-	public  void enterAddressLine2(String addressLine2) {
-		if(!isElementDisplayedOnScreen(addressLine2TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine2TextBox,addressLine2);
-	}
-
-	public  void enterAddressLine3(String addressLine3) {
-		if(!isElementDisplayedOnScreen(addressLine3TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine3TextBox,addressLine3);
-	}
-
-	public  void enterAge(String age) {
-		clickAndsendKeysToTextBox(ageTextBox,age);
-	}
-
-	public boolean checkFullNameSecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(fullNameTextBoxSecondLanguage)==null || getTextFromLocator(fullNameTextBoxSecondLanguage)=="" )
-			return	false;
-		else
-			return	true;
-	}
-
-	public boolean isResidenceStatusHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(residenceStatusHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusHeader);
-	}
-
-	public boolean isRegionHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(regionHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(regionHeader);
-	}
-
-	public boolean isProvinceHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(provinceHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(provinceHeader);
-	}
-
-	public boolean isCityHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(cityHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(cityHeader);
-	}
-
-	public boolean isPostalCodeHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(postalCodeHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(postalCodeHeader);
-	}
-
-	public boolean isMobileNumberHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(mobileNumberHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(mobileNumberHeader);
-	}
-
-	public boolean isZoneHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(zoneHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(zoneHeader);
-	}
+	public  DocumentUploadPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new DocumentuploadPageEnglish(driver);
 
-	public boolean isEmailHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(emailHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailHeader);
-	}
-	
-	public boolean isIntroducerNameHeaderDisplayed() {
-		return isElementDisplayed(introducerNameHeader);
 	}
 	
-	public boolean isIntroducerRidHeaderDisplayed() {
-		return isElementDisplayed(introducerRidHeader);
-	}
-
-	public  void selectGender(String gender) {
-		if(gender.equalsIgnoreCase("male"))
-			clickOnElement(maleButton);
-		if(gender.equalsIgnoreCase("female"))
-			clickOnElement(femaleButton);
-	}
-
-	public  void selectMaritalStatus() {
-		clickOnElement(selectMaritalStatus);
-		if(!isElementDisplayedOnScreen(singleValueFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectMaritalStatus);
-			clickOnElement(singleValueFromDropdown);
-		}else
-			clickOnElement(singleValueFromDropdown);
-	}
-
-	public  void selectResidenceStatus(String ResidenceStatus) {
-		clickOnElement(selectResidentStatus);
-		if(ResidenceStatus.equalsIgnoreCase("Foreigner")) {
-			if(!isElementDisplayedOnScreen(foreignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(foreignerValueFromDropdown);
-			}else
-				clickOnElement(foreignerValueFromDropdown);
-		}else {
-			if(!isElementDisplayedOnScreen(nonForeignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(nonForeignerValueFromDropdown);
-			}else
-				clickOnElement(nonForeignerValueFromDropdown);
+	public  boolean isContinueButtonEnable() {
+		return isElementEnabled(continueButton);
+
+	}
+
+	public boolean isPreRegFetchDataTextBoxDisplay() {
+		return isElementDisplayed(fetchDataButton);
+	}
+
+	public void fillDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}
+				else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(3);
+					while(!isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"))) {
+						swipeOrScroll();
+					}
+					boolean isdisplayed =isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(3);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("")){	
+					if(!isElementDisplayed(maleButton)) {
+						swipeOrScroll();
+						clickOnElement(maleButton);		
+					}else
+						clickOnElement(maleButton);		
+
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			else if(id.equals("residenceStatus")) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(2);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(2);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
 		}
-
 	}
 
-	public  void selectRegionStatus(String region) {
-		clickOnElement(selectRegionStatus);
-		if(region.equalsIgnoreCase("Rabat Sale Kenitra")) {
-			if(!isElementDisplayedOnScreen(rabatSaleKenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectRegionStatus);
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
-			}else {
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
+	public void editDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
 			}
 		}
-
-	}
-
-	public  void selectProvinceStatus(String province) {
-		clickOnElement(selectProvinceStatus);
-		if(province.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(province.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectCityStatus(String city) {
-		clickOnElement(selectCityStatus);
-		if(city.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(city.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectZoneStatus() {
-		clickOnElement(selectZoneStatus);
-		if(!isElementDisplayedOnScreen(benMansourFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectZoneStatus);
-			clickOnElement(benMansourFromDropdown);
-		}else
-			clickOnElement(benMansourFromDropdown);
-	}
-
-	public  void selectPostalStatus() {
-		clickOnElement(selectPostal);
-		if(!isElementDisplayedOnScreen(selectPostalCode)) {
-			swipeOrScroll();
-			clickOnElement(selectPostal);
-			clickOnElement(selectPostalCode);
-		}else
-			clickOnElement(selectPostalCode);
-	}
-
-	public  DocumentUploadPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new DocumentuploadPageEnglish(driver);
-
 	}
 
-	public  void enterMobileNumber(String mobileNumber) {
-		if(!isElementDisplayedOnScreen(mobileNumberTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-		}else
-		clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-	}
-
-	public  void enterEmailID(String EmailID) {
-		if(!isElementDisplayedOnScreen(emailIdTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-		}else
-		clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-	}
-	
-	public  void enterIntroducerName(String introducerName) {
-		if(!isElementDisplayedOnScreen(introducerNameTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-		}else
-		clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-	}
-	
-	public  void enterIntroducerRid(String introducerRid) {
-		if(!isElementDisplayedOnScreen(introducerRidTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-		}else
-		clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-	}
-	
-	public  void selectCurrentCalenderDate() {
-		clickOnElement(calenderIcon);		
-	}
-	
-	public  void closeCalender() {
-		clickOnElement(backgroundScreen);		
-	}
-	
-	public  boolean checkDateFormatAndCurrectDate() {
-		getTextFromLocator(getSelectedDate);
-		if(getTextFromLocator(getSelectedDate).equalsIgnoreCase(getCurrentDate())) 
-			return	true;
-		else
-			return false;
-	}
-	
-	public boolean checkAddress1SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine1TextBoxSecondLangauge)==null || getTextFromLocator(addressLine1TextBoxSecondLangauge)=="" )
+	public boolean checkSecondLanguageTextBoxNotNull(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))==null || getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))=="" )
 			return	false;
 		else
 			return	true;
 	}
 
-	public boolean checkAddress2SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine2TextBoxSecondLangauge)==null || getTextFromLocator(addressLine2TextBoxSecondLangauge)=="" )
-			return	false;
-		else
+	public  boolean checkDateFormatAndCurrectDate(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View"))).equalsIgnoreCase(getCurrentDate())) 
 			return	true;
-	}
-
-	public boolean checkAddress3SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine3TextBoxSecondLangauge)==null || getTextFromLocator(addressLine3TextBoxSecondLangauge)=="" )
-			return	false;
 		else
-			return	true;
+			return false;
 	}
-
-	public boolean checkIntroducerNameTextBoxSecondLangaugeTextBoxNotNull() {
-		if(getTextFromLocator(introducerNameTextBoxSecondLangauge)==null || getTextFromLocator(introducerNameTextBoxSecondLangauge)=="" )
-			return	false;
-		else
-			return	true;
+	
+	public void fillIntroducerDetailsInDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(id.equals("introducerName")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerUIN")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("UINminor"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
+		}
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/DocumentUploadPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/DocumentUploadPageFrench.java
index 871170ae8..cb5fbb8f5 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/DocumentUploadPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/DocumentUploadPageFrench.java
@@ -1,262 +1,185 @@
 package regclient.pages.french;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.CameraPage;
 import regclient.page.DocumentUploadPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
+import regclient.pages.english.DocumentuploadPageEnglish;
 
 public class DocumentUploadPageFrench extends DocumentUploadPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Des documents\"))")
-	private WebElement doccumentUploadPage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.Button\")")
-	private WebElement identityProofScanButton;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement addressProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Identity Proof\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement identityProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Relationship Proof\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement relationshipProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB Proof\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement dobProofSelectValue;
-
 	@AndroidFindBy(accessibility = "Fond")
 	private WebElement PopUpCloseButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonAddressProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Identity Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonIdentityProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonDobProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Relationship Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonRelationshipProof;
-
 	@AndroidFindBy(accessibility = "Retour")
 	private WebElement backButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView")
-	private WebElement previewCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[2]")
-	private WebElement previewSecondCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[3]")
-	private WebElement previewThirdCaptureImage;
-
 	@AndroidFindBy(accessibility = "CONTINUER")
 	private WebElement continueButton;
 
 	@AndroidFindBy(accessibility = "SUPPRIMER")
 	private WebElement deleteButton;
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"DOB Proof\"))")
-	private WebElement dobsHeader;
-
 	@AndroidFindBy(xpath = "//android.widget.ImageView")
 	private WebElement captureImage;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Address Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement addressProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"Identity Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement identityProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB Proof\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement dobProofReferenceNumberTextbox;
+	@AndroidFindBy(accessibility = "SAUVEGARDER")
+	private WebElement saveButton;
+
+	@AndroidFindBy(accessibility = "REPRENDRE")
+	private WebElement retakeButton;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.view.View\").instance(8)")
+	private WebElement imageleftCorner;
 	
 	public DocumentUploadPageFrench(AppiumDriver driver) {
 		super(driver);
 	}
 	
-	public void selectAddressProof() {
-		while(!isElementDisplayedOnScreen(addressProofSelectValue) || !isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(addressProofSelectValue);	
-		}
-	}
-
-	public void selectIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofSelectValue)|| !isElementDisplayedOnScreen(scanButtonIdentityProof) ) {
-			swipeOrScroll();
-		}
-		clickOnElement(identityProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(identityProofSelectValue);	
-		}
-	}
-
-	public void selectDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofSelectValue) || !isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(dobProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(dobProofSelectValue);	
-		}
-	}
-
-	public void selectRelationshipProof() {
-		while(!isElementDisplayedOnScreen(relationshipProofSelectValue) || !isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(relationshipProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(relationshipProofSelectValue);	
-		}
-	}
-
-	public void selectOnCaptureImage() {
-		clickOnElement(previewCaptureImage);
-	}
-
-	public void closePopUpClose() {
-		clickOnElement(PopUpCloseButton);
-	}
-
-	public CameraPage clickOnAddressProofScanButton() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonAddressProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonDobProof() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonDobProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonIdentityProof() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonIdentityProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonRelationshipProof() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonRelationshipProof);
-		return new CameraPage(driver);
-	}
-
-	public void clickOnBackButton() {
-		clickOnElement(backButton);
-
-	}
-
-	public void clickOnDeleteButton() {
-		clickOnElement(deleteButton);
-
-	}
-
 	public  BiometricDetailsPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new BiometricDetailsPageFrench(driver);
-	}
-
-	public  boolean isImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(captureImage);
-	}
-
-	public  boolean isSecondImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewSecondCaptureImage);
-	}
-
-	public  boolean isThirdImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewThirdCaptureImage);
-	}
-
-	public  boolean isDeleteButtonDisplyed() {
-		if(!isElementDisplayedOnScreen(deleteButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(deleteButton);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isDoccumentUploadPageDisplayed() {
-		return isElementDisplayed(doccumentUploadPage);
-	}
-
-	public boolean isDobHeaderDisplayed() {
-		return isElementDisplayed(dobsHeader);
-	}
-
-	public  boolean isScanButtonAddressProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonAddressProof);
-	}
-
-	public  boolean isScanButtonIdentityProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonIdentityProof);
-	}
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("Documents") + "\"))")));
+	}
+
+	public  DocumentUploadPage clickOnSaveButton() {
+		clickOnElement(saveButton);
+		return new DocumentuploadPageEnglish(driver);
+	}
+
+	public boolean isRetakeButtonDisplayed() {
+		return isElementDisplayed(retakeButton);
+	}
+
+	public void cropCaptureImage() {
+		isElementDisplayed(captureImage);
+		cropCaptureImage(imageleftCorner);
+	}
+
+	public void uploadDoccuments(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(type.equalsIgnoreCase("ReferenceNumber")) {
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")),"1234567890");
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}else {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}
+		}
+
+	}
+	public void uploadDoccumentsUpdate(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(type.equals("all") && !id.equals("proofOfException") && !id.equals("proofOfRelationship")) {
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+					swipeOrScroll();
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				}
+				clickOnElement(PopUpCloseButton);
+				waitTime(1);
+				boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				CameraPage cameraPage=new CameraPage(driver);
+				cameraPage.clickimage();
+				cameraPage.clickOkButton();
+				assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+				cropCaptureImage();
+				clickOnSaveButton();
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+				}
+			}
 
-	public  boolean isScanButtonDobProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
 		}
-		return isElementEnabled(scanButtonDobProof);
 	}
 
-	public  boolean isScanButtonRelationshipProoffEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonRelationshipProof);
-	}
-	
-	public  void enterReferenceNumberInAdressProof() {
-		if(!isElementDisplayedOnScreen(addressProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-		}else
-		clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(identityProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(dobProofReferenceNumberTextbox,"1234567890");
-	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/IntroducerBiometricPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/IntroducerBiometricPageFrench.java
index b743e3fd0..5bcd44a7e 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/IntroducerBiometricPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/IntroducerBiometricPageFrench.java
@@ -3,14 +3,14 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class IntroducerBiometricPageFrench extends IntroducerBiometricPage{
-
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'Introducteur Biométrie')]")
-	private WebElement introducerBiometricPageTitle;
 	
 	@AndroidFindBy(accessibility = "Iris ANALYSE")
 	private WebElement irisScanButton;
@@ -34,7 +34,7 @@ public class IntroducerBiometricPageFrench extends IntroducerBiometricPage{
 	private WebElement oneEyeException;
 	
 	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.ImageView\").instance(2)")
-	private WebElement firstFingureExceptionImage;
+	private WebElement firstFingureException;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Main droite ANALYSE\"))")
 	private WebElement rightHandScanTitle;
@@ -94,7 +94,7 @@ public void markOneEyeException() {
 	}
 	
 	public void markOneFingureException() {
-		clickOnElement(firstFingureExceptionImage);
+		clickOnElement(firstFingureException);
 	}
 	
 	public void clickOnClosePopUp() {
@@ -111,7 +111,7 @@ public void clickOnIrisScanButton() {
 	
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageFrench(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
 	public void clickOnZoomButton() {
@@ -136,11 +136,12 @@ public void closeScanCapturePopUp() {
 	
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageFrench(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public  boolean isIntroducerBiometricsPageDisplyed() {
-		return isElementDisplayed(introducerBiometricPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId("introducerBiometrics")+"\")")));
 	}
 	
 	public  boolean isExceptionTypeTitleDisplyed() {
@@ -190,4 +191,6 @@ public  boolean isFaceScan() {
 	public  boolean isExceptionScan() {
 		return isElementDisplayed(exceptionCapturerHeader,2000);
 	}
+
+
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/LoginPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/LoginPageFrench.java
index 6d00361fe..f2beaa523 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/LoginPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/LoginPageFrench.java
@@ -1,5 +1,7 @@
 package regclient.pages.french;
 
+import java.time.Duration;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
@@ -72,6 +74,7 @@ public  void clickOnBackButton() {
 	}
 
 	public  void enterPassword(String password) {
+		retryFindElement(passwordTextBox,Duration.ofSeconds(10));
 		clickAndsendKeysToTextBox(passwordTextBox,password);
 	}
 
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/ManageApplicationsPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/ManageApplicationsPageFrench.java
index f64cb98c6..c812c2298 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/ManageApplicationsPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/ManageApplicationsPageFrench.java
@@ -86,7 +86,7 @@ public boolean isSearchAIDDisplayed(String AID) {
 		waitTime(2);
 		return isElementDisplayed(driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]")));
 	}
-	
+
 	public boolean isZeroApplicationDisplayed() {
 		waitTime(2);
 		return isElementDisplayed(displayZeroApplication);
@@ -94,18 +94,24 @@ public boolean isZeroApplicationDisplayed() {
 
 	public  void clickOnUploadButton() {
 		clickOnElement(uploadButton);
-		waitTime(20);
+		waitTime(10);
 	}
 
 	public boolean isPacketUploadDone(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
-		if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
-			return false;
+		if(element.getAttribute("contentDescription").contains("NOT UPLOADED")) {
+			waitTime(10);
+			element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+			if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
+				return false;
+			else
+				return true;
+		}
 		else
 			return true;
 	}
-	
+
 	public boolean isPacketApproved(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -114,7 +120,7 @@ public boolean isPacketApproved(String AID) {
 		else
 			return false;
 	}
-	
+
 	public boolean isPacketSynned(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -123,6 +129,15 @@ public boolean isPacketSynned(String AID) {
 		else
 			return false;
 	}
+	
+	public boolean isPacketRejected(String AID) {
+		waitTime(2);
+		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+		if(element.getAttribute("contentDescription").contains("REJECTED"))
+			return true;
+		else
+			return false;
+	}
 
 	public  void clickClientStatusDropdown() {
 		clickOnElement(clientStatusDropdown);
@@ -163,21 +178,21 @@ public  void clickDismissButton() {
 	public  void clickOnSearchCheckBox() {
 		clickOnElement(searchCheckBoxButton);
 	}
-	
+
 	public  void selectApprovedValueDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(approvedOption);
 	}	
-	
+
 	public  void selectSyncedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(syncedOption);
 	}
-	
+
 	public  void selectUploadedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(uploadedOption);
-		
+
 	}
 
 	public boolean isReceivedDropdownOptionDisplayed() {
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/OperationalTaskPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/OperationalTaskPageFrench.java
index 8d92cddf7..17ce0bbe1 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/OperationalTaskPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/OperationalTaskPageFrench.java
@@ -21,6 +21,9 @@ public class OperationalTaskPageFrench extends OperationalTaskPage{
 	
 	@AndroidFindBy(accessibility = "Téléchargement d'application")
 	private WebElement applicationUploadTitle;
+	
+	@AndroidFindBy(accessibility = "En attente de validation")
+	private WebElement pendingApprovalTitle;
 
 
 	public OperationalTaskPageFrench(AppiumDriver driver) {
@@ -61,5 +64,15 @@ public boolean isApplicationUploadTitleDisplayed() {
 		return isElementDisplayed(applicationUploadTitle);
 	}
 
+	public  void clickPendingApprovalTitle() {
+		clickOnElement(pendingApprovalTitle);
+	}
+	
+	public boolean isPendingApprovalTitleDisplayed() {
+		if(!isElementDisplayedOnScreen(pendingApprovalTitle)) {
+			swipeOrScroll();
+		}
+		return isElementDisplayed(pendingApprovalTitle);
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/PendingApprovalFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/PendingApprovalFrench.java
new file mode 100644
index 000000000..f747da797
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/pages/french/PendingApprovalFrench.java
@@ -0,0 +1,161 @@
+/**
+ * 
+ */
+package regclient.pages.french;
+
+import static org.testng.Assert.assertTrue;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.page.PendingApproval;
+
+public class PendingApprovalFrench extends PendingApproval{
+
+	@AndroidFindBy(accessibility = "En attente de validation")
+	private WebElement pendingApprovalTitle;
+
+	@AndroidFindBy(accessibility = "APPROUVER")
+	private WebElement approveButton;
+
+	@AndroidFindBy(accessibility = "Fond")
+	private WebElement backGroundScreen;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.CheckBox\").instance(0)")
+	private WebElement searchCheckBoxButton;
+
+	@AndroidFindBy(accessibility = "SOUMETTRE")
+	private WebElement submitButton;
+
+	@AndroidFindBy(accessibility = "Authentification du superviseur")
+	private WebElement supervisorAuthenticationTitle;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
+	private WebElement userNameTextBox;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
+	private WebElement passwordTextBox;
+	
+	@AndroidFindBy(xpath = "//*[contains(@content-desc,\"En attente de validation\")]//preceding-sibling::android.widget.Button")
+	private WebElement backButton;
+	
+	@AndroidFindBy(accessibility = "REJECT")
+	private WebElement rejectButton;
+	
+	@AndroidFindBy(accessibility = "Sl.no Application ID Reg. Date Client Status Review Status Operator ID")
+	private WebElement pageAttributes ;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"CREATED\")")
+	private WebElement clientStatus;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Pending\").instance(1)")
+	private WebElement reviewStatus;
+	
+	@AndroidFindBy(xpath = "//android.widget.EditText")
+	private WebElement applicationIdTextbox;
+	
+	@AndroidFindBy(accessibility = "Reject Packet?")
+	private WebElement rejectPacketTitle;
+	
+	@AndroidFindBy(accessibility = "Please select a value")
+	private WebElement rejectReasonDropdown;
+
+	public PendingApprovalFrench(AppiumDriver driver) {
+		super(driver);
+	}
+
+	public boolean isPendingApprovalTitleDisplayed() {
+		return isElementDisplayed(pendingApprovalTitle);		
+	}
+
+	@SuppressWarnings("deprecation")
+	public void clickOnAID(String AID) {
+		clickOnElement(findElementWithRetry(MobileBy.AccessibilityId(AID)));
+	}
+
+	public void clickOnApproveButton() {
+		clickOnElement(approveButton);
+	}
+
+	public void clickOnClosePopUpButton() {
+		clickOnElement(backGroundScreen);
+	}
+
+	public void clickOnCheckBox() {
+		clickOnElement(searchCheckBoxButton);
+	}
+
+	public void clickOnSubmitButton() {
+		clickOnElement(submitButton);
+	}
+
+	public boolean isSupervisorAuthenticationTitleDisplayed() {
+		return isElementDisplayed(supervisorAuthenticationTitle);		
+	}
+
+	public  void enterUserName(String username) {
+		sendKeysToTextBox(userNameTextBox,username);
+	}
+
+	public  void enterPassword(String password) {
+		sendKeysToTextBox(passwordTextBox,password);
+	}
+	
+	public void clickOnBackButton() {
+		clickOnElement(backButton);
+	}
+
+	public boolean isApprovalButtonDisplayed() {
+		return isElementDisplayed(approveButton);		
+	}
+	
+	public boolean isRejectButtonDisplayed() {
+		return isElementDisplayed(rejectButton);		
+	}
+	
+	public boolean isPageAttributesDisplayed() {
+		return isElementDisplayed(pageAttributes);		
+	}
+	
+	public boolean isClientStatusDisplayed() {
+		return isElementDisplayed(clientStatus);		
+	}
+
+	public boolean isReviewStatusDisplayed() {
+		return isElementDisplayed(reviewStatus);		
+	}
+	
+	public  void enterAID(String AID) {
+		clickAndsendKeysToTextBox(applicationIdTextbox,AID);
+	}
+	
+	public void clickOnRejectButton() {
+		clickOnElement(rejectButton);
+	}
+	
+	public boolean isRejectPacketTitleDisplayed() {
+		return isElementDisplayed(rejectPacketTitle);		
+	}
+	
+	public void selectRejectionReasonDropdown() {
+		boolean isdisplayed =isElementDisplayed(rejectReasonDropdown);
+		assertTrue(isdisplayed,"Verify if "+rejectReasonDropdown+" header is displayed");
+		clickOnElement(rejectReasonDropdown);
+		waitTime(2);
+		if(!isElementDisplayed(rejectReasonDropdown)) {				
+			clickOnElement(findElement(By.className("android.view.View")));
+		}else {
+			clickOnElement(rejectReasonDropdown);
+			waitTime(2);
+			clickOnElement(findElement(By.className("android.view.View")));
+		}	
+	}
+	
+	public boolean isSubmitButtonEnabled() {
+		return isElementEnabled(submitButton);		
+	}
+
+}
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/PreviewPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/PreviewPageFrench.java
index 93b696cad..433490217 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/PreviewPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/PreviewPageFrench.java
@@ -3,16 +3,17 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AuthenticationPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.AuthenticationPageEnglish;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 
 
 public class PreviewPageFrench extends PreviewPage{
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Nouvelle inscription\"))")
-	private WebElement newRegistrationTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Informations démographiques\"))")
 	private WebElement demographicInformationInPreviewPage;
@@ -22,9 +23,6 @@ public class PreviewPageFrench extends PreviewPage{
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Documents\"))")
 	private WebElement documentsInformationInPreviewPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"Détails démographiques\"))")
-	private WebElement demographicDetailsTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Biométrie\"))")
 	private WebElement biometricsInformationInPreviewPage;
@@ -41,16 +39,13 @@ public class PreviewPageFrench extends PreviewPage{
 	@AndroidFindBy(accessibility = "CONTINUER")
 	private WebElement continueButton;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"Mettre à jour l'UIN\"))")
-	private WebElement updateUINTitle;
-	
 	public PreviewPageFrench(AppiumDriver driver) {
 		super(driver);
 	}
 	
 	public  AuthenticationPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new AuthenticationPageFrench(driver);
+		return new AuthenticationPageEnglish(driver);
 	}
 	
 	public boolean isDemographicInformationInPreviewPageDisplayed() {
@@ -65,17 +60,23 @@ public boolean isBiometricsInformationInPreviewPagePageDisplayed() {
 		return isElementDisplayed(biometricsInformationInPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isNewRegistrationTitleDisplayed() {
-		return isElementDisplayed(newRegistrationTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("NEW") + "\"))")));
+	}
+	
+	public boolean updateUINTitleDisplayed() {
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
 	
 	public boolean isApplicationIDPreviewPagePageDisplayed() {
 		return isElementDisplayed(applicationIDPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageFrench(driver);
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
 	}
 	
 	public boolean isBothIrisImageDisplayed() {
@@ -85,17 +86,13 @@ public boolean isBothIrisImageDisplayed() {
 	public boolean isSingleIrisImageDisplayed() {
 		return isElementDisplayed(singleIrisImage);
 	}
-
+	
 	public boolean isFingerExceptionText() {
 		return isElementDisplayed(fingerExceptionText);
 	}
-	
+
 	public String getAID() {
 		String applicationID = getTextFromLocator(applicationIDPreviewPage).replaceAll(".*Application ID (\\d+).*", "$1");
 		return applicationID;
 	}
-	
-	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
-	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/RegistrationTasksPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/RegistrationTasksPageFrench.java
index 8fae01630..9e8f58e1b 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/RegistrationTasksPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/RegistrationTasksPageFrench.java
@@ -46,6 +46,12 @@ public RegistrationTasksPageFrench(AppiumDriver driver) {
 	@AndroidFindBy(accessibility = "Mettre à jour l'UIN")
 	private WebElement updateUinButton;
 	
+	@AndroidFindBy(accessibility = "UIN perdu")
+	private WebElement lostUinButton;
+	
+	@AndroidFindBy(accessibility = "Correction biométrique")
+	private WebElement biometricCorrectionButton;
+	
 	public  SelectLanguagePage clickOnNewRegistrationButton() {
 		clickOnElement(newRegistrationButton);
 		return new SelectLanguagePageFrench(driver);
@@ -98,4 +104,29 @@ public  SelectLanguagePage clickUpdateMyUINButton() {
 		clickOnElement(updateUinButton);
 		return new SelectLanguagePageFrench(driver);
 	}
+	
+	public boolean isUpdateUINTitleDisplayed() {
+		return isElementDisplayed(updateUinButton);
+	}
+	
+	public boolean isLostUINTitleDisplayed() {
+		return isElementDisplayed(lostUinButton);
+	}
+	
+	public boolean isBiometricCorrectionTitleDisplayed() {
+		return isElementDisplayed(biometricCorrectionButton);
+	}
+	
+	public  void clickSynchronizeDataButton() {
+		clickOnElement(synchronizeDataButton);
+		waitTime(50);
+	}
+	
+	public boolean checkLastSyncDate() {
+		String contentDesc = synchronizeDataButton.getAttribute("content-desc");
+		if(contentDesc.contains("Synchronize Data\n"+getCurrentDateWord()+","))
+			return true;
+		else
+			return false;
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/SupervisorBiometricVerificationpageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/SupervisorBiometricVerificationpageFrench.java
index 52baadddc..5cbb8b20a 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/SupervisorBiometricVerificationpageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/SupervisorBiometricVerificationpageFrench.java
@@ -374,4 +374,7 @@ public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
 
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/UpdateOperatorBiometricspageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/UpdateOperatorBiometricspageFrench.java
index 329667a0b..ae4322092 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/UpdateOperatorBiometricspageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/UpdateOperatorBiometricspageFrench.java
@@ -369,11 +369,9 @@ public boolean isOperatorBiometricsUpdatedPopupLoaded() {
 	public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
-
-	public boolean isSupervisorBiometricVerificationPageLoaded() {
-		// TODO Auto-generated method stub
-		return false;
+	
+	public void clickOnBackButton() {
+		driver.navigate().back();
 	}
 
-
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/french/UpdateUINPageFrench.java b/uitest-regclient/src/main/java/regclient/pages/french/UpdateUINPageFrench.java
index fb53ab24f..da11bb989 100644
--- a/uitest-regclient/src/main/java/regclient/pages/french/UpdateUINPageFrench.java
+++ b/uitest-regclient/src/main/java/regclient/pages/french/UpdateUINPageFrench.java
@@ -1,294 +1,64 @@
 package regclient.pages.french;
 
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.UpdateUINPage;
+import regclient.pages.english.ConsentPageEnglish;
 
 public class UpdateUINPageFrench extends UpdateUINPage{
 	
-	@AndroidFindBy(accessibility = "Mettre à jour l'UIN")
-	private WebElement updateUINTitle;
-	
 	@AndroidFindBy(xpath = "//android.widget.EditText")
 	private WebElement UINNumberTextBox;
 	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Consentement\")")
-	private WebElement consentButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"langue préférée\")")
-	private WebElement preferredLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Nom complet\")")
-	private WebElement fullNameButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Date de naissance\")")
-	private WebElement DOBButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Genre\")")
-	private WebElement genderButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Adresse\")")
-	private WebElement addressButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"État civil\")")
-	private WebElement maritalStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Langue du candidat\")")
-	private WebElement applicantLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Statut de résidence\")")
-	private WebElement residenceStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Emplacement\")")
-	private WebElement locationButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Téléphone\")")
-	private WebElement phoneButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"E-mail\")")
-	private WebElement emailButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Détails de l'introducteur\")")
-	private WebElement introducerDetailsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Biométrie\")")
-	private WebElement biometricsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Documents\")")
-	private WebElement documentsButton;
-	
 	@AndroidFindBy(accessibility = "CONTINUER")
 	private WebElement continueButton;
+	
+	@AndroidFindBy(accessibility = "Veuillez saisir un UIN valide")
+	private WebElement invalidUINErrorMessage;
 
 	public UpdateUINPageFrench(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isUpdateMyUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
-	
 	public  void enterUIN(String UIN) {
 		clickAndsendKeysToTextBox(UINNumberTextBox,UIN);
 	}
-	
-	public  void clickOnConsentButton() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(consentButton);
-	}
-	
-	public boolean isConsentTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(consentButton);
-	}
-	
-	public  void clickOnPreferredLanguageButton() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(preferredLanguageButton);
-	}
-	
-	public boolean isPreferredLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(preferredLanguageButton);
-	}
-		
-	public  void clickOnFullNameButton() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(fullNameButton);
-	}
-	
-	public boolean isFullNameTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(fullNameButton);
-	}
-	
-	
-	public  void clickOnDOBButton() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(DOBButton);
-	}
-	
-	public boolean isDOBTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(DOBButton);
-	}
-	
-	public  void clickOnGenderButton() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(genderButton);
-	}
-	
-	public boolean isnGenderTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(genderButton);
-	}
-	
-	public  void clickOnAddressButton() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressButton);
-	}
-	
-	public boolean isAddressTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(addressButton);
-	}
-	
-	public  void clickOnMaritalStatusButton() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(maritalStatusButton);
-	}
-	
-	public boolean isMaritalStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(maritalStatusButton);
-	}
-	
-	public  void clickOnApplicantLanguageButton() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(applicantLanguageButton);
-	}
-	
-	public boolean isApplicantLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(applicantLanguageButton);
-	}
-	
-	public  void clickOnResidenceStatusButton() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(residenceStatusButton);
-	}
-	
-	public boolean isResidenceStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusButton);
-	}
-	
-	public  void clickOnLocationButton() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(locationButton);
-	}
-	
-	public boolean isLocationTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(locationButton);
-	}
-	
-	public  void clickOnPhoneButton() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(phoneButton);
-	}
-	
-	public boolean isPhoneTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(phoneButton);
-	}
-	
-	public  void clickOnEmailButton() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(emailButton);
-	}
-	
-	public boolean isEmailTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailButton);
-	}
-	
-	public  void clickOnIntroducerDetailsButton() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerDetailsButton);
-	}
-	
-	public boolean isIntroducerDetailsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(introducerDetailsButton);
-	}
-	
-	public  void clickOnBiometricsButton() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(biometricsButton);
+
+	public  ConsentPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new ConsentPageEnglish(driver);
 	}
 	
-	public boolean isnBiometricsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(biometricsButton);
+	public boolean isInvalidUINErrorMessageDisplayed() {
+		return isElementDisplayed(invalidUINErrorMessage);
 	}
 	
-	public  void clickOnDocumentsButton() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(documentsButton);
+	public void selectUpdateValue(String page) {
+		List groupLabelList=FetchUiSpec.getAllGroupLabelUsingId(page);
+		for(String title : groupLabelList) {
+				WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+title+"\")"));
+				assertTrue(isElementDisplayed(webelement),"Verify if "+title+" title is displayed in update uin page");
+				clickOnElement(webelement);			
+			}		
 	}
 	
-	public boolean isDocumentsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(documentsButton);
-	}
-
-	public  ConsentPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new ConsentPageFrench(driver);
+	public void selectUpdateIntroducerDetails() {
+		WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getGroupValueUsingId("introducerName")+"\")"));
+		assertTrue(isElementDisplayed(webelement),"Verify if "+FetchUiSpec.getGroupValueUsingId("introducerName")+" title is displayed in update uin page");
+		clickOnElement(webelement);			
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/AcknowledgementPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/AcknowledgementPageHindi.java
index 5aff8446a..9e1714b42 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/AcknowledgementPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/AcknowledgementPageHindi.java
@@ -3,10 +3,13 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AcknowledgementPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 import regclient.pages.english.RegistrationTasksPageEnglish;
 
 public class AcknowledgementPageHindi extends AcknowledgementPage {
@@ -31,10 +34,7 @@ public class AcknowledgementPageHindi extends AcknowledgementPage {
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"बॉयोमेट्रिक्स\"))")
 	private WebElement biometricsInformationInAcknowledgementPage;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"जनसांख्यिकीय विवरण\"))")
-	private WebElement demographicDetailsTitle;
-	
+		
 
 	public AcknowledgementPageHindi(AppiumDriver driver) {
 		super(driver);
@@ -70,15 +70,13 @@ public boolean isBiometricsInformationInAcknowledgementPageDisplayed() {
 		return isElementDisplayed(biometricsInformationInAcknowledgementPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageHindi(driver);
-	}
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
+	}	
 	
 	public String getAID() {
 		return getTextFromLocator(applicationID);
 	}
-	
-
-	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/ApplicantBiometricsPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/ApplicantBiometricsPageHindi.java
index 2771b03b7..fd6ff6824 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/ApplicantBiometricsPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/ApplicantBiometricsPageHindi.java
@@ -3,15 +3,15 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class ApplicantBiometricsPageHindi extends ApplicantBiometricsPage{
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'आवेदक बायोमेट्रिक्स')]")
-	private WebElement applicantBiometricsPageTitle;
-	
 	@AndroidFindBy(accessibility = "आईरिस स्कैन")
 	private WebElement irisScanButton;
 	
@@ -99,9 +99,6 @@ public class ApplicantBiometricsPageHindi extends ApplicantBiometricsPage{
 	@AndroidFindBy(xpath = "//android.view.View[@content-desc=\"अस्तित्वाएं\"]/following-sibling::android.view.View[@content-desc=\"1\"]")
 	private WebElement exceptionCount;
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'प्रमाणीकरण बायोमेट्रिक्स')]")
-	private WebElement authenticationBiometricsPageTitle;
-	
 	public ApplicantBiometricsPageHindi(AppiumDriver driver) {
 		super(driver);
 	}
@@ -116,29 +113,29 @@ public  void enterCommentsInTextBox(String comments) {
 	public void clickOnScanButton() {
 		clickOnElement(scanButton);
 	}	
-	
+
 	public void clickOnExceptionTypePermanentButton() {
 		if(!isElementDisplayedOnScreen(permanentButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(permanentButton);
 	}
-	
+
 	public void clickOnExceptionTypeTemporaryButton() {
 		if(!isElementDisplayedOnScreen(temporaryButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(temporaryButton);	
 	}
-	
+
 	public void markOneEyeException() {
 		clickOnElement(oneEyeException);
 	}
-	
+
 	public void markOneFingureException() {
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(firstFingureExceptionImage);
 		clickOnElement(secondFingureExceptionImage);
@@ -146,105 +143,111 @@ public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(forthFingureExceptionImage);
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void clickOnClosePopUp() {
 		clickOnElement(popUpCloseButton);
 	}
-	
+
 	public void clickOnMarkExceptionButton() {
 		clickOnElement(markExceptionButton);
 	}
-	
+
 	public void clickOnIrisScanButton() {
 		clickOnElement(irisScanButton);
 	}
-	
+
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageHindi(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
 	public void clickOnZoomButton() {
 		clickOnElement(zoomButton);
 	}
-	
+
 	public void clickOnIrisScanTitle() {
 		clickOnElement(irisScanButtonTitle);
 	}
-	
+
 	public void clickOnRightHandScanTitle() {
 		clickOnElement(rightHandScanTitle);
 	}
-	
+
 	public void clickOnleftHandScanTitle() {
 		clickOnElement(leftHandScanTitle);
 	}
-	
+
 	public void clickOnThumbsScanTitle() {
 		clickOnElement(thumbsScanTitle);
 	}
-	
+
 	public void closeScanCapturePopUp() {
 		driver.navigate().back();
 	}
-	
+
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageHindi(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  boolean isApplicantBiometricsPageDisplyed() {
-		return isElementDisplayed(applicantBiometricsPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
 	}
-	
+
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricsPageDisplyed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
+	}
+
 	public  boolean isExceptionTypeTitleDisplyed() {
 		return isElementDisplayed(exceptionTypeTitle);
 	}
-	
+
 	public  boolean isRightHandScanTitleDisplyed() {
 		return isElementDisplayed(rightHandScanTitle);
 	}
-	
+
 	public  boolean isLeftHandScanTitleDisplyed() {
 		return isElementDisplayed(leftHandScanTitle);
 	}
-	
+
 	public  boolean isThumbsScanTitleDisplyed() {
 		return isElementDisplayed(thumbsScanTitle);
 	}
-	
+
 	public  boolean isFaceScanTitleDisplyed() {
 		return isElementDisplayed(faceScanTitle);
 	}
-	
+
 	public  boolean isExceptionScanTitleDisplyed() {
 		return isElementDisplayed(exceptionScanTitle);
 	}
-	
+
 	public  boolean isIrisScan() {
 		return isElementDisplayed(irisCapturerHeader,2000);
 	}
-	
+
 	public  boolean isRightHandScan() {
 		return isElementDisplayed(rightHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isLeftHandScan() {
 		return isElementDisplayed(leftHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isThumbsScan() {
 		return isElementDisplayed(thumbsCapturerHeader,2000);
 	}
-	
+
 	public  boolean isFaceScan() {
 		return isElementDisplayed(faceCapturerHeader,2000);
 	}
-	
+
 	public  boolean isExceptionScan() {
 		return isElementDisplayed(exceptionCapturerHeader,2000);
 	}
-	
+
 	public  boolean isCommentHeaderDisplyed() {
 		return isElementDisplayed(commentsHeader);
 	}
@@ -256,8 +259,4 @@ public  boolean isExceptionCountDisplyed() {
 		}
 		return isElementDisplayed(exceptionCount);
 	}
-	
-	public  boolean isAuthenticationBiometricsPageDisplyed() {
-		return isElementDisplayed(authenticationBiometricsPageTitle);
-	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/BiometricDetailsPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/BiometricDetailsPageHindi.java
index 2b60e8518..523c572d4 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/BiometricDetailsPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/BiometricDetailsPageHindi.java
@@ -1,19 +1,22 @@
 package regclient.pages.hindi;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.ApplicantBiometricsPageEnglish;
+import regclient.pages.english.IntroducerBiometricPageEnglish;
+import regclient.pages.english.PreviewPageEnglish;
 
 public class BiometricDetailsPageHindi extends BiometricDetailsPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"आवेदक बायोमेट्रिक्स\"))")
-	private WebElement applicantBiometricTitle;
-
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"आईरिस स्कैन\"))")
 	private WebElement irisScanIcon;
 	
@@ -38,64 +41,83 @@ public class BiometricDetailsPageHindi extends BiometricDetailsPage{
 	@AndroidFindBy(accessibility = "जारी रखें")
 	private WebElement continueButton;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"प्रमाणीकरण बायोमेट्रिक्स\"))")
-	private WebElement authenticationBiometricTitle;
-	
-	
 	public BiometricDetailsPageHindi(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public  boolean isBiometricDetailsPageDisplayed() {
-		return isElementDisplayed(applicantBiometricTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
+	}
+		
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricTitleDisplayed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
 	}
-
-	
 	
 	public ApplicantBiometricsPage clickOnIrisScan() {
 		clickOnElement(irisScanIcon);
-		return new ApplicantBiometricsPageHindi(driver);
-	}
-	
-	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
-		while(!isElementDisplayedOnScreen(introducerIrisScanIcon)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerIrisScanIcon);
-		return new IntroducerBiometricPageHindi(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnRightHandScanIcon() {
 		clickOnElement(rightHandScanIcon);
-		return new ApplicantBiometricsPageHindi(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnLeftHandScanIcon() {
 		clickOnElement(leftHandScanIcon);
-		return new ApplicantBiometricsPageHindi(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnThumbsScanIcon() {
 		clickOnElement(thumbsScanIcon);
-		return new ApplicantBiometricsPageHindi(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnFaceScanIcon() {
 		clickOnElement(faceScanIcon);
-		return new ApplicantBiometricsPageHindi(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnExceptionScanIcon() {
 		clickOnElement(exceptionScanIcon);
-		return new ApplicantBiometricsPageHindi(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
+
 	}
 	
-	public  PreviewPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new PreviewPageHindi(driver);
+	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Iris Scan\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
 	}
+	
+	public IntroducerBiometricPage clickOnIntroducerRightHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Right\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
 
-	public  boolean isAuthenticationBiometricTitleDisplayed() {
-		return isElementDisplayed(authenticationBiometricTitle);
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerLeftHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Left\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerThumbScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Thumbs\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerFaceScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Face\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public  PreviewPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new PreviewPageEnglish(driver);
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/ConsentPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/ConsentPageHindi.java
index 6671e6536..80b18ffef 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/ConsentPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/ConsentPageHindi.java
@@ -3,43 +3,36 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
+import regclient.pages.english.RegistrationTasksPageEnglish;
 
 
 public class ConsentPageHindi extends ConsentPage{
 
-	@AndroidFindBy(accessibility = "सहमति")
-	private WebElement consentPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().className(\"android.widget.CheckBox\"))")
-	private WebElement termAndConditionCheckBox;
-
 	@AndroidFindBy(accessibility = "सूचित")
 	private WebElement informedButton;
-	
+
 	@AndroidFindBy(accessibility = "रद्द करना")
 	private WebElement cancelButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"मैंने अपना पीआईआई साझा करने के लिए नियम और शर्तें पढ़ ली हैं और स्वीकार करता हूं \"))")
-	private WebElement checkBoxDiscription;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"UIN अपडेट करें\"))")
-	private WebElement updateUINTitle;
-
-	
+
 	public ConsentPageHindi(AppiumDriver driver) {
 		super(driver);
-}
-	
+	}
+
+	@SuppressWarnings("deprecation")
 	public boolean isConsentPageDisplayed() {
-		return isElementDisplayed(consentPage);
+		return isElementDisplayed(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));		
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isCheckBoxReadable() {
-		return isElementDisplayed(checkBoxDiscription);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("consent") + "\"))")));
 	}
 
 	public  boolean isInformedButtonEnabled() {
@@ -48,16 +41,18 @@ public  boolean isInformedButtonEnabled() {
 
 	public  DemographicDetailsPage clickOnInformedButton() {
 		clickOnElement(informedButton);
-		return new DemographicDetailsPageHindi(driver);
+		return new DemographicDetailsPageEnglish(driver);
 	}
 
 
 	public RegistrationTasksPage clickOnCancelButton() {
 		clickOnElement(cancelButton);
-		return new  RegistrationTasksPageHindi(driver);
+		return new  RegistrationTasksPageEnglish(driver);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
+
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/DemographicDetailsPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/DemographicDetailsPageHindi.java
index c13160196..fc932ef08 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/DemographicDetailsPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/DemographicDetailsPageHindi.java
@@ -1,464 +1,290 @@
 package regclient.pages.hindi;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
+import regclient.page.BasePage;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.DocumentUploadPage;
 import regclient.pages.english.ConsentPageEnglish;
 import regclient.pages.english.DocumentuploadPageEnglish;
+import regclient.utils.TestDataReader;
 
 public class DemographicDetailsPageHindi extends DemographicDetailsPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"पूरा नाम\"))")
-	private WebElement demographicDetailspage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"सहमति\"))")
-	private WebElement consentTitle;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
-	private WebElement fullNameTextBox;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
-	private WebElement fullNameTextBoxSecondLanguage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(2)")
-	private WebElement ageTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"स्थायी पता 1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine1TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"अस्थायी पता2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine2TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"अस्थायी पता3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine3TextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"स्थायी पता 1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine1TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"अस्थायी पता2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine2TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"अस्थायी पता3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine3TextBoxSecondLangauge;
-
 	@AndroidFindBy(accessibility = "नर")
 	private WebElement maleButton;
 
 	@AndroidFindBy(accessibility = "महिला")
 	private WebElement femaleButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"नागरिक स्थिति\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectMaritalStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"आवास की स्थिति\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectResidentStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ऊपरी क्षेत्र\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectRegionStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"प्रांत\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectProvinceStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"शहर\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectCityStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"/क्षेत्र\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectZoneStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"डाक का\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectPostal;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"14022\")")
-	private WebElement selectPostalCode;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"गैर-विदेशी\")")
-	private WebElement nonForeignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"परदेशी\")")
-	private WebElement foreignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"अकेला\")")
-	private WebElement singleValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"रबात बिक्री केनित्र\")")
-	private WebElement rabatSaleKenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"केनिट्रा\")]")
-	private WebElement kenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"रबात\")]")
-	private WebElement rabatValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"बेन मंसूर\")")
-	private WebElement benMansourFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"आवास की स्थिति\")")
-	private WebElement residenceStatusHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ऊपरी क्षेत्र\")")
-	private WebElement regionHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"प्रांत\")")
-	private WebElement provinceHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"शहर\")")
-	private WebElement cityHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"/क्षेत्र\")")
-	private WebElement zoneHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"डाक का\")")
-	private WebElement postalCodeHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"फ़ोन\")")
-	private WebElement mobileNumberHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ईमेल\")")
-	private WebElement emailHeader;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"परिचयकर्ता का नाम\")")
-	private WebElement introducerNameHeader;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"परिचयकर्ता RID\")")
-	private WebElement introducerRidHeader;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"फ़ोन\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText")
-	private WebElement mobileNumberTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ईमेल\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement emailIdTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"परिचयकर्ता का नाम\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerNameTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"परिचयकर्ता का नाम\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement introducerNameTextBoxSecondLangauge;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"परिचयकर्ता RID\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerRidTextBox;
-
 	@AndroidFindBy(accessibility = "जारी रखें")
 	private WebElement continueButton;
 	
 	@AndroidFindBy(accessibility = "अमान्य निवेश")
 	private WebElement errorMessageInvalidInputText;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement calenderIcon;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement getSelectedDate;
-	
 	@AndroidFindBy(accessibility = "स्क्रिम")
 	private WebElement backgroundScreen;
 	
+	@AndroidFindBy(accessibility = "FETCH DATA")
+	private WebElement fetchDataButton;
+	
 	public DemographicDetailsPageHindi(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isDemographicDetailsPageDisplayed() {
+		WebElement  demographicDetailspage = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))"));
 		return isElementDisplayed(demographicDetailspage);
 	}
-	
+
 	public boolean isErrorMessageInvalidInputTextDisplayed() {
 		return isElementDisplayed(errorMessageInvalidInputText);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  ConsentPage clickOnConsentPageTitle() {
+		WebElement  consentTitle = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));
 		clickOnElement(consentTitle);
 		return new ConsentPageEnglish(driver);
 	}
 
-	public  void enterFullName(String fullName) {
-		clickAndsendKeysToTextBox(fullNameTextBox,fullName);
-	}
-
-	public  void enterAddressLine1(String addressLine1) {
-		if(!isElementDisplayedOnScreen(addressLine1TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine1TextBox,addressLine1);
-	}
-
-	public  void enterAddressLine2(String addressLine2) {
-		if(!isElementDisplayedOnScreen(addressLine2TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine2TextBox,addressLine2);
-	}
-
-	public  void enterAddressLine3(String addressLine3) {
-		if(!isElementDisplayedOnScreen(addressLine3TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine3TextBox,addressLine3);
-	}
-
-	public  void enterAge(String age) {
-		clickAndsendKeysToTextBox(ageTextBox,age);
-	}
-
-	public boolean checkFullNameSecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(fullNameTextBoxSecondLanguage)==null || getTextFromLocator(fullNameTextBoxSecondLanguage)=="" )
-			return	false;
-		else
-			return	true;
-	}
-
-	public boolean isResidenceStatusHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(residenceStatusHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusHeader);
-	}
-
-	public boolean isRegionHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(regionHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(regionHeader);
-	}
-
-	public boolean isProvinceHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(provinceHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(provinceHeader);
-	}
-
-	public boolean isCityHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(cityHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(cityHeader);
-	}
-
-	public boolean isPostalCodeHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(postalCodeHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(postalCodeHeader);
-	}
-
-	public boolean isMobileNumberHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(mobileNumberHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(mobileNumberHeader);
-	}
-
-	public boolean isZoneHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(zoneHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(zoneHeader);
-	}
+	public  DocumentUploadPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new DocumentuploadPageEnglish(driver);
 
-	public boolean isEmailHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(emailHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailHeader);
-	}
-	
-	public boolean isIntroducerNameHeaderDisplayed() {
-		return isElementDisplayed(introducerNameHeader);
 	}
 	
-	public boolean isIntroducerRidHeaderDisplayed() {
-		return isElementDisplayed(introducerRidHeader);
-	}
-
-	public  void selectGender(String gender) {
-		if(gender.equalsIgnoreCase("male"))
-			clickOnElement(maleButton);
-		if(gender.equalsIgnoreCase("female"))
-			clickOnElement(femaleButton);
-	}
-
-	public  void selectMaritalStatus() {
-		clickOnElement(selectMaritalStatus);
-		if(!isElementDisplayedOnScreen(singleValueFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectMaritalStatus);
-			clickOnElement(singleValueFromDropdown);
-		}else
-			clickOnElement(singleValueFromDropdown);
-	}
-
-	public  void selectResidenceStatus(String ResidenceStatus) {
-		clickOnElement(selectResidentStatus);
-		if(ResidenceStatus.equalsIgnoreCase("Foreigner")) {
-			if(!isElementDisplayedOnScreen(foreignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(foreignerValueFromDropdown);
-			}else
-				clickOnElement(foreignerValueFromDropdown);
-		}else {
-			if(!isElementDisplayedOnScreen(nonForeignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(nonForeignerValueFromDropdown);
-			}else
-				clickOnElement(nonForeignerValueFromDropdown);
+	public  boolean isContinueButtonEnable() {
+		return isElementEnabled(continueButton);
+
+	}
+
+	public boolean isPreRegFetchDataTextBoxDisplay() {
+		return isElementDisplayed(fetchDataButton);
+	}
+
+	public void fillDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}
+				else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(3);
+					while(!isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"))) {
+						swipeOrScroll();
+					}
+					boolean isdisplayed =isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(3);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("")){	
+					if(!isElementDisplayed(maleButton)) {
+						swipeOrScroll();
+						clickOnElement(maleButton);		
+					}else
+						clickOnElement(maleButton);		
+
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			else if(id.equals("residenceStatus")) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(2);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(2);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
 		}
-
 	}
 
-	public  void selectRegionStatus(String region) {
-		clickOnElement(selectRegionStatus);
-		if(region.equalsIgnoreCase("Rabat Sale Kenitra")) {
-			if(!isElementDisplayedOnScreen(rabatSaleKenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectRegionStatus);
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
-			}else {
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
+	public void editDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
 			}
 		}
-
-	}
-
-	public  void selectProvinceStatus(String province) {
-		clickOnElement(selectProvinceStatus);
-		if(province.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(province.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectCityStatus(String city) {
-		clickOnElement(selectCityStatus);
-		if(city.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(city.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectZoneStatus() {
-		clickOnElement(selectZoneStatus);
-		if(!isElementDisplayedOnScreen(benMansourFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectZoneStatus);
-			clickOnElement(benMansourFromDropdown);
-		}else
-			clickOnElement(benMansourFromDropdown);
-	}
-
-	public  void selectPostalStatus() {
-		clickOnElement(selectPostal);
-		if(!isElementDisplayedOnScreen(selectPostalCode)) {
-			swipeOrScroll();
-			clickOnElement(selectPostal);
-			clickOnElement(selectPostalCode);
-		}else
-			clickOnElement(selectPostalCode);
 	}
 
-	public  DocumentUploadPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new DocumentuploadPageEnglish(driver);
-
-	}
-
-	public  void enterMobileNumber(String mobileNumber) {
-		if(!isElementDisplayedOnScreen(mobileNumberTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-		}else
-		clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-	}
-
-	public  void enterEmailID(String EmailID) {
-		if(!isElementDisplayedOnScreen(emailIdTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-		}else
-		clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-	}
-	
-	public  void enterIntroducerName(String introducerName) {
-		if(!isElementDisplayedOnScreen(introducerNameTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-		}else
-		clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-	}
-	
-	public  void enterIntroducerRid(String introducerRid) {
-		if(!isElementDisplayedOnScreen(introducerRidTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-		}else
-		clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-	}
-	
-	public  void selectCurrentCalenderDate() {
-		clickOnElement(calenderIcon);		
-	}
-	
-	public  void closeCalender() {
-		clickOnElement(backgroundScreen);		
-	}
-	
-	public  boolean checkDateFormatAndCurrectDate() {
-		getTextFromLocator(getSelectedDate);
-		if(getTextFromLocator(getSelectedDate).equalsIgnoreCase(getCurrentDate())) 
-			return	true;
-		else
-			return false;
-	}
-	
-	public boolean checkAddress1SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine1TextBoxSecondLangauge)==null || getTextFromLocator(addressLine1TextBoxSecondLangauge)=="" )
+	public boolean checkSecondLanguageTextBoxNotNull(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))==null || getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))=="" )
 			return	false;
 		else
 			return	true;
 	}
 
-	public boolean checkAddress2SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine2TextBoxSecondLangauge)==null || getTextFromLocator(addressLine2TextBoxSecondLangauge)=="" )
-			return	false;
-		else
+	public  boolean checkDateFormatAndCurrectDate(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View"))).equalsIgnoreCase(getCurrentDate())) 
 			return	true;
-	}
-
-	public boolean checkAddress3SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine3TextBoxSecondLangauge)==null || getTextFromLocator(addressLine3TextBoxSecondLangauge)=="" )
-			return	false;
 		else
-			return	true;
+			return false;
 	}
-
-	public boolean checkIntroducerNameTextBoxSecondLangaugeTextBoxNotNull() {
-		if(getTextFromLocator(introducerNameTextBoxSecondLangauge)==null || getTextFromLocator(introducerNameTextBoxSecondLangauge)=="" )
-			return	false;
-		else
-			return	true;
+	
+	public void fillIntroducerDetailsInDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(id.equals("introducerName")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerUIN")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("UINminor"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
+		}
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/DocumentUploadPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/DocumentUploadPageHindi.java
index c8ea60066..8c82d802f 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/DocumentUploadPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/DocumentUploadPageHindi.java
@@ -1,263 +1,184 @@
 package regclient.pages.hindi;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.CameraPage;
 import regclient.page.DocumentUploadPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
+import regclient.pages.english.DocumentuploadPageEnglish;
 
 public class DocumentUploadPageHindi extends DocumentUploadPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"दस्तावेज़ अपलोड\"))")
-	private WebElement doccumentUploadPage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.Button\")")
-	private WebElement identityProofScanButton;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"निवास प्रमाण पत्र\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement addressProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"पहचान प्रमाण\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement identityProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"संबंध प्रमाण\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement relationshipProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"जन्मतिथि प्रमाण\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement dobProofSelectValue;
-
 	@AndroidFindBy(accessibility = "स्क्रिम")
 	private WebElement PopUpCloseButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"निवास प्रमाण पत्र\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonAddressProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"पहचान प्रमाण\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonIdentityProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"जन्मतिथि प्रमाण\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonDobProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"संबंध प्रमाण\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonRelationshipProof;
-
 	@AndroidFindBy(accessibility = "वापस जाएं")
 	private WebElement backButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"निवास प्रमाण पत्र\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView")
-	private WebElement previewCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"निवास प्रमाण पत्र\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[2]")
-	private WebElement previewSecondCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"निवास प्रमाण पत्र\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[3]")
-	private WebElement previewThirdCaptureImage;
-
 	@AndroidFindBy(accessibility = "जारी रखें")
 	private WebElement continueButton;
 
 	@AndroidFindBy(accessibility = "मिटाना")
 	private WebElement deleteButton;
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"जन्मतिथि प्रमाण\"))")
-	private WebElement dobsHeader;
-
 	@AndroidFindBy(xpath = "//android.widget.ImageView")
 	private WebElement captureImage;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"निवास प्रमाण पत्र\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement addressProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"पहचान प्रमाण\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement identityProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"जन्मतिथि प्रमाण\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement dobProofReferenceNumberTextbox;
+	@AndroidFindBy(accessibility = "बचाना")
+	private WebElement saveButton;
 
+	@AndroidFindBy(accessibility = "फिर से लेना")
+	private WebElement retakeButton;
 
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.view.View\").instance(8)")
+	private WebElement imageleftCorner;
+	
 	public DocumentUploadPageHindi(AppiumDriver driver) {
 		super(driver);
 	}
 
-	public void selectAddressProof() {
-		while(!isElementDisplayedOnScreen(addressProofSelectValue) || !isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(addressProofSelectValue);	
-		}
-	}
-
-	public void selectIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofSelectValue)|| !isElementDisplayedOnScreen(scanButtonIdentityProof) ) {
-			swipeOrScroll();
-		}
-		clickOnElement(identityProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(identityProofSelectValue);	
-		}
-	}
-
-	public void selectDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofSelectValue) || !isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(dobProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(dobProofSelectValue);	
-		}
-	}
-
-	public void selectRelationshipProof() {
-		while(!isElementDisplayedOnScreen(relationshipProofSelectValue) || !isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(relationshipProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(relationshipProofSelectValue);	
-		}
-	}
-
-	public void selectOnCaptureImage() {
-		clickOnElement(previewCaptureImage);
-	}
-
-	public void closePopUpClose() {
-		clickOnElement(PopUpCloseButton);
-	}
-
-	public CameraPage clickOnAddressProofScanButton() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonAddressProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonDobProof() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonDobProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonIdentityProof() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonIdentityProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonRelationshipProof() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonRelationshipProof);
-		return new CameraPage(driver);
-	}
-
-	public void clickOnBackButton() {
-		clickOnElement(backButton);
-
-	}
-
-	public void clickOnDeleteButton() {
-		clickOnElement(deleteButton);
-
-	}
-
 	public  BiometricDetailsPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new BiometricDetailsPageHindi(driver);
-	}
-
-	public  boolean isImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(captureImage);
-	}
-
-	public  boolean isSecondImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewSecondCaptureImage);
-	}
-
-	public  boolean isThirdImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewThirdCaptureImage);
-	}
-
-	public  boolean isDeleteButtonDisplyed() {
-		if(!isElementDisplayedOnScreen(deleteButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(deleteButton);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isDoccumentUploadPageDisplayed() {
-		return isElementDisplayed(doccumentUploadPage);
-	}
-
-	public boolean isDobHeaderDisplayed() {
-		return isElementDisplayed(dobsHeader);
-	}
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("Documents") + "\"))")));
+	}
+
+	public  DocumentUploadPage clickOnSaveButton() {
+		clickOnElement(saveButton);
+		return new DocumentuploadPageEnglish(driver);
+	}
+
+	public boolean isRetakeButtonDisplayed() {
+		return isElementDisplayed(retakeButton);
+	}
+
+	public void cropCaptureImage() {
+		isElementDisplayed(captureImage);
+		cropCaptureImage(imageleftCorner);
+	}
+
+	public void uploadDoccuments(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(type.equalsIgnoreCase("ReferenceNumber")) {
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")),"1234567890");
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}else {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}
+		}
+
+	}
+	public void uploadDoccumentsUpdate(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(type.equals("all") && !id.equals("proofOfException") && !id.equals("proofOfRelationship")) {
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+					swipeOrScroll();
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				}
+				clickOnElement(PopUpCloseButton);
+				waitTime(1);
+				boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				CameraPage cameraPage=new CameraPage(driver);
+				cameraPage.clickimage();
+				cameraPage.clickOkButton();
+				assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+				cropCaptureImage();
+				clickOnSaveButton();
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+				}
+			}
 
-	public  boolean isScanButtonAddressProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonAddressProof);
-	}
-
-	public  boolean isScanButtonIdentityProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonIdentityProof);
-	}
-
-	public  boolean isScanButtonDobProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonDobProof);
-	}
-
-	public  boolean isScanButtonRelationshipProoffEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonRelationshipProof);
-	}
-	
-	public  void enterReferenceNumberInAdressProof() {
-		if(!isElementDisplayedOnScreen(addressProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-		}else
-		clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(identityProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofReferenceNumberTextbox)) {
-			swipeOrScroll();
 		}
-		clickAndsendKeysToTextBox(dobProofReferenceNumberTextbox,"1234567890");
 	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/IntroducerBiometricPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/IntroducerBiometricPageHindi.java
index cb7e463bb..7123d48ed 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/IntroducerBiometricPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/IntroducerBiometricPageHindi.java
@@ -3,15 +3,15 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class IntroducerBiometricPageHindi extends IntroducerBiometricPage{
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'परिचयकर्ता बायोमेट्रिक्स')]")
-	private WebElement introducerBiometricPageTitle;
-	
 	@AndroidFindBy(accessibility = "आईरिस स्कैन")
 	private WebElement irisScanButton;
 	
@@ -103,7 +103,7 @@ public void clickOnIrisScanButton() {
 	
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageHindi(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
 	public void clickOnZoomButton() {
@@ -128,11 +128,12 @@ public void closeScanCapturePopUp() {
 	
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageHindi(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public  boolean isIntroducerBiometricsPageDisplyed() {
-		return isElementDisplayed(introducerBiometricPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId("introducerBiometrics")+"\")")));
 	}
 	
 	public  boolean isExceptionTypeTitleDisplyed() {
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/LoginPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/LoginPageHindi.java
index ec85f08a4..705c05a18 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/LoginPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/LoginPageHindi.java
@@ -4,6 +4,9 @@
 import io.appium.java_client.pagefactory.AndroidFindBy;
 import regclient.page.LoginPage;
 import regclient.page.RegistrationTasksPage;
+
+import java.time.Duration;
+
 import org.openqa.selenium.WebElement;
 
 public class LoginPageHindi extends LoginPage {
@@ -71,6 +74,7 @@ public  void clickOnBackButton() {
 	}
 
 	public  void enterPassword(String password) {
+		retryFindElement(passwordTextBox,Duration.ofSeconds(10));
 		clickAndsendKeysToTextBox(passwordTextBox,password);
 	}
 
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/ManageApplicationsPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/ManageApplicationsPageHindi.java
index ca93755d9..256917572 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/ManageApplicationsPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/ManageApplicationsPageHindi.java
@@ -86,7 +86,7 @@ public boolean isSearchAIDDisplayed(String AID) {
 		waitTime(2);
 		return isElementDisplayed(driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]")));
 	}
-	
+
 	public boolean isZeroApplicationDisplayed() {
 		waitTime(2);
 		return isElementDisplayed(displayZeroApplication);
@@ -94,18 +94,24 @@ public boolean isZeroApplicationDisplayed() {
 
 	public  void clickOnUploadButton() {
 		clickOnElement(uploadButton);
-		waitTime(20);
+		waitTime(10);
 	}
 
 	public boolean isPacketUploadDone(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
-		if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
-			return false;
+		if(element.getAttribute("contentDescription").contains("NOT UPLOADED")) {
+			waitTime(10);
+			element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+			if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
+				return false;
+			else
+				return true;
+		}
 		else
 			return true;
 	}
-	
+
 	public boolean isPacketApproved(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -114,7 +120,7 @@ public boolean isPacketApproved(String AID) {
 		else
 			return false;
 	}
-	
+
 	public boolean isPacketSynned(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -123,6 +129,15 @@ public boolean isPacketSynned(String AID) {
 		else
 			return false;
 	}
+	
+	public boolean isPacketRejected(String AID) {
+		waitTime(2);
+		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+		if(element.getAttribute("contentDescription").contains("REJECTED"))
+			return true;
+		else
+			return false;
+	}
 
 	public  void clickClientStatusDropdown() {
 		clickOnElement(clientStatusDropdown);
@@ -163,21 +178,21 @@ public  void clickDismissButton() {
 	public  void clickOnSearchCheckBox() {
 		clickOnElement(searchCheckBoxButton);
 	}
-	
+
 	public  void selectApprovedValueDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(approvedOption);
 	}	
-	
+
 	public  void selectSyncedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(syncedOption);
 	}
-	
+
 	public  void selectUploadedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(uploadedOption);
-		
+
 	}
 
 	public boolean isReceivedDropdownOptionDisplayed() {
@@ -195,7 +210,7 @@ public boolean isAcceptedDropdownOptionDisplayed() {
 	public boolean isDeletionDropdownOptionDisplayed() {
 		return isElementDisplayed(deletionValueDropdown);
 	}
-	
+
 	public void clickOnBackButton() {
 		driver.navigate().back();
 	}
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/OperationalTaskPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/OperationalTaskPageHindi.java
index 0685f9552..f260a25a6 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/OperationalTaskPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/OperationalTaskPageHindi.java
@@ -20,6 +20,9 @@ public class OperationalTaskPageHindi extends OperationalTaskPage{
 
 	@AndroidFindBy(accessibility = "आवेदन अपलोड करें")
 	private WebElement applicationUploadTitle;
+	
+	@AndroidFindBy(accessibility = "लंबित अनुमोदन")
+	private WebElement pendingApprovalTitle;
 
 	public OperationalTaskPageHindi(AppiumDriver driver) {
 		super(driver);
@@ -60,4 +63,14 @@ public boolean isApplicationUploadTitleDisplayed() {
 		return isElementDisplayed(applicationUploadTitle);
 	}
 
+	public  void clickPendingApprovalTitle() {
+		clickOnElement(pendingApprovalTitle);
+	}
+	
+	public boolean isPendingApprovalTitleDisplayed() {
+		if(!isElementDisplayedOnScreen(pendingApprovalTitle)) {
+			swipeOrScroll();
+		}
+		return isElementDisplayed(pendingApprovalTitle);
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/PendingApprovalHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/PendingApprovalHindi.java
new file mode 100644
index 000000000..1eed65cbe
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/PendingApprovalHindi.java
@@ -0,0 +1,161 @@
+/**
+ * 
+ */
+package regclient.pages.hindi;
+
+import static org.testng.Assert.assertTrue;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.page.PendingApproval;
+
+public class PendingApprovalHindi extends PendingApproval{
+
+	@AndroidFindBy(accessibility = "लंबित अनुमोदन")
+	private WebElement pendingApprovalTitle;
+
+	@AndroidFindBy(accessibility = "मंज़ूरी देना")
+	private WebElement approveButton;
+
+	@AndroidFindBy(accessibility = "स्क्रिम")
+	private WebElement backGroundScreen;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.CheckBox\").instance(0)")
+	private WebElement searchCheckBoxButton;
+
+	@AndroidFindBy(accessibility = "जमा करना")
+	private WebElement submitButton;
+
+	@AndroidFindBy(accessibility = "पर्यवेक्षक का प्रमाणीकरण")
+	private WebElement supervisorAuthenticationTitle;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
+	private WebElement userNameTextBox;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
+	private WebElement passwordTextBox;
+	
+	@AndroidFindBy(xpath = "//*[contains(@content-desc,\"लंबित अनुमोदन\")]//preceding-sibling::android.widget.Button")
+	private WebElement backButton;
+	
+	@AndroidFindBy(accessibility = "REJECT")
+	private WebElement rejectButton;
+	
+	@AndroidFindBy(accessibility = "Sl.no Application ID Reg. Date Client Status Review Status Operator ID")
+	private WebElement pageAttributes ;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"CREATED\")")
+	private WebElement clientStatus;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Pending\").instance(1)")
+	private WebElement reviewStatus;
+	
+	@AndroidFindBy(xpath = "//android.widget.EditText")
+	private WebElement applicationIdTextbox;
+	
+	@AndroidFindBy(accessibility = "Reject Packet?")
+	private WebElement rejectPacketTitle;
+	
+	@AndroidFindBy(accessibility = "Please select a value")
+	private WebElement rejectReasonDropdown;
+
+	public PendingApprovalHindi(AppiumDriver driver) {
+		super(driver);
+	}
+
+	public boolean isPendingApprovalTitleDisplayed() {
+		return isElementDisplayed(pendingApprovalTitle);		
+	}
+
+	@SuppressWarnings("deprecation")
+	public void clickOnAID(String AID) {
+		clickOnElement(findElementWithRetry(MobileBy.AccessibilityId(AID)));
+	}
+
+	public void clickOnApproveButton() {
+		clickOnElement(approveButton);
+	}
+
+	public void clickOnClosePopUpButton() {
+		clickOnElement(backGroundScreen);
+	}
+
+	public void clickOnCheckBox() {
+		clickOnElement(searchCheckBoxButton);
+	}
+
+	public void clickOnSubmitButton() {
+		clickOnElement(submitButton);
+	}
+
+	public boolean isSupervisorAuthenticationTitleDisplayed() {
+		return isElementDisplayed(supervisorAuthenticationTitle);		
+	}
+
+	public  void enterUserName(String username) {
+		sendKeysToTextBox(userNameTextBox,username);
+	}
+
+	public  void enterPassword(String password) {
+		sendKeysToTextBox(passwordTextBox,password);
+	}
+	
+	public void clickOnBackButton() {
+		clickOnElement(backButton);
+	}
+
+	public boolean isApprovalButtonDisplayed() {
+		return isElementDisplayed(approveButton);		
+	}
+	
+	public boolean isRejectButtonDisplayed() {
+		return isElementDisplayed(rejectButton);		
+	}
+	
+	public boolean isPageAttributesDisplayed() {
+		return isElementDisplayed(pageAttributes);		
+	}
+	
+	public boolean isClientStatusDisplayed() {
+		return isElementDisplayed(clientStatus);		
+	}
+
+	public boolean isReviewStatusDisplayed() {
+		return isElementDisplayed(reviewStatus);		
+	}
+	
+	public  void enterAID(String AID) {
+		clickAndsendKeysToTextBox(applicationIdTextbox,AID);
+	}
+	
+	public void clickOnRejectButton() {
+		clickOnElement(rejectButton);
+	}
+	
+	public boolean isRejectPacketTitleDisplayed() {
+		return isElementDisplayed(rejectPacketTitle);		
+	}
+	
+	public void selectRejectionReasonDropdown() {
+		boolean isdisplayed =isElementDisplayed(rejectReasonDropdown);
+		assertTrue(isdisplayed,"Verify if "+rejectReasonDropdown+" header is displayed");
+		clickOnElement(rejectReasonDropdown);
+		waitTime(2);
+		if(!isElementDisplayed(rejectReasonDropdown)) {				
+			clickOnElement(findElement(By.className("android.view.View")));
+		}else {
+			clickOnElement(rejectReasonDropdown);
+			waitTime(2);
+			clickOnElement(findElement(By.className("android.view.View")));
+		}	
+	}
+	
+	public boolean isSubmitButtonEnabled() {
+		return isElementEnabled(submitButton);		
+	}
+
+}
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/PreviewPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/PreviewPageHindi.java
index b65364029..4e77f687c 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/PreviewPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/PreviewPageHindi.java
@@ -3,15 +3,16 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AuthenticationPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.AuthenticationPageEnglish;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 
 public class PreviewPageHindi extends PreviewPage{
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"नया पंजीकरण\"))")
-	private WebElement newRegistrationTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"जनसांख्यिकीय जानकारी\"))")
 	private WebElement demographicInformationInPreviewPage;
@@ -22,9 +23,6 @@ public class PreviewPageHindi extends PreviewPage{
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"दस्तावेज़\"))")
 	private WebElement documentsInformationInPreviewPage;
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"जनसांख्यिकीय विवरण\"))")
-	private WebElement demographicDetailsTitle;
-	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"बॉयोमेट्रिक्स\"))")
 	private WebElement biometricsInformationInPreviewPage;
 	
@@ -40,16 +38,13 @@ public class PreviewPageHindi extends PreviewPage{
 	@AndroidFindBy(accessibility = "जारी रखें")
 	private WebElement continueButton;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"UIN अपडेट करें\"))")
-	private WebElement updateUINTitle;
-	
 	public PreviewPageHindi(AppiumDriver driver) {
 		super(driver);
 	}
 	
 	public  AuthenticationPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new AuthenticationPageHindi(driver);
+		return new AuthenticationPageEnglish(driver);
 	}
 	
 	public boolean isDemographicInformationInPreviewPageDisplayed() {
@@ -64,17 +59,23 @@ public boolean isBiometricsInformationInPreviewPagePageDisplayed() {
 		return isElementDisplayed(biometricsInformationInPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isNewRegistrationTitleDisplayed() {
-		return isElementDisplayed(newRegistrationTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("NEW") + "\"))")));
+	}
+	
+	public boolean updateUINTitleDisplayed() {
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
 	
 	public boolean isApplicationIDPreviewPagePageDisplayed() {
 		return isElementDisplayed(applicationIDPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageHindi(driver);
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
 	}
 	
 	public boolean isBothIrisImageDisplayed() {
@@ -84,17 +85,13 @@ public boolean isBothIrisImageDisplayed() {
 	public boolean isSingleIrisImageDisplayed() {
 		return isElementDisplayed(singleIrisImage);
 	}
-
+	
 	public boolean isFingerExceptionText() {
 		return isElementDisplayed(fingerExceptionText);
 	}
-	
+
 	public String getAID() {
 		String applicationID = getTextFromLocator(applicationIDPreviewPage).replaceAll(".*Application ID (\\d+).*", "$1");
 		return applicationID;
 	}
-	
-	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
-	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/RegistrationTasksPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/RegistrationTasksPageHindi.java
index 68d03b282..74f252e2a 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/RegistrationTasksPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/RegistrationTasksPageHindi.java
@@ -42,6 +42,12 @@ public class RegistrationTasksPageHindi  extends RegistrationTasksPage{
 	
 	@AndroidFindBy(accessibility = "UIN अपडेट करें")
 	private WebElement updateUinButton;
+	
+	@AndroidFindBy(accessibility = "खोया यूआईएन")
+	private WebElement lostUinButton;
+	
+	@AndroidFindBy(accessibility = "Biometric correction")
+	private WebElement biometricCorrectionButton;
 
 	public RegistrationTasksPageHindi(AppiumDriver driver) {
 		super(driver);
@@ -99,5 +105,30 @@ public  SelectLanguagePage clickUpdateMyUINButton() {
 		clickOnElement(updateUinButton);
 		return new SelectLanguagePageHindi(driver);
 	}	
+	
+	public boolean isUpdateUINTitleDisplayed() {
+		return isElementDisplayed(updateUinButton);
+	}
+	
+	public boolean isLostUINTitleDisplayed() {
+		return isElementDisplayed(lostUinButton);
+	}
+	
+	public boolean isBiometricCorrectionTitleDisplayed() {
+		return isElementDisplayed(biometricCorrectionButton);
+	}
+	
+	public  void clickSynchronizeDataButton() {
+		clickOnElement(synchronizeDataButton);
+		waitTime(50);
+	}
+	
+	public boolean checkLastSyncDate() {
+		String contentDesc = synchronizeDataButton.getAttribute("content-desc");
+		if(contentDesc.contains("Synchronize Data\n"+getCurrentDateWord()+","))
+			return true;
+		else
+			return false;
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/SupervisorBiometricVerificationpageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/SupervisorBiometricVerificationpageHindi.java
index bc33d56bb..3783c54c7 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/SupervisorBiometricVerificationpageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/SupervisorBiometricVerificationpageHindi.java
@@ -387,4 +387,8 @@ public boolean isOperatorOnboardedPopupLoaded() {
 	public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
+	
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/UpdateOperatorBiometricspageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/UpdateOperatorBiometricspageHindi.java
index df2208b99..e44eb0f02 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/UpdateOperatorBiometricspageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/UpdateOperatorBiometricspageHindi.java
@@ -384,4 +384,8 @@ public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
 	
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
+	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/hindi/UpdateUINPageHindi.java b/uitest-regclient/src/main/java/regclient/pages/hindi/UpdateUINPageHindi.java
index 67d873260..7aedefe2d 100644
--- a/uitest-regclient/src/main/java/regclient/pages/hindi/UpdateUINPageHindi.java
+++ b/uitest-regclient/src/main/java/regclient/pages/hindi/UpdateUINPageHindi.java
@@ -1,294 +1,64 @@
 package regclient.pages.hindi;
 
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.UpdateUINPage;
+import regclient.pages.english.ConsentPageEnglish;
 
 public class UpdateUINPageHindi extends UpdateUINPage{
 	
-	@AndroidFindBy(accessibility = "UIN अपडेट करें")
-	private WebElement updateUINTitle;
-	
 	@AndroidFindBy(xpath = "//android.widget.EditText")
 	private WebElement UINNumberTextBox;
 	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"पसहमति\")")
-	private WebElement consentButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"पसंदीदा भाषा\")")
-	private WebElement preferredLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"पूरा नाम\")")
-	private WebElement fullNameButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"जन्म तिथि\")")
-	private WebElement DOBButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"लिंग\")")
-	private WebElement genderButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"पता\")")
-	private WebElement addressButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"वैवाहिक स्थिति\")")
-	private WebElement maritalStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"आवेदक की भाषा\")")
-	private WebElement applicantLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"आवास की स्थिति\")")
-	private WebElement residenceStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"स्थानर\")")
-	private WebElement locationButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"फ़ोन\")")
-	private WebElement phoneButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ईमेल\")")
-	private WebElement emailButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"परिचयकर्ता विवरण\")")
-	private WebElement introducerDetailsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"बॉयोमेट्रिक्स\")")
-	private WebElement biometricsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"दस्तावेज़\")")
-	private WebElement documentsButton;
-	
 	@AndroidFindBy(accessibility = "जारी रखें")
 	private WebElement continueButton;
+	
+	@AndroidFindBy(accessibility = "कृपया एक वैध यूआईएन दर्ज करें")
+	private WebElement invalidUINErrorMessage;
 
 	public UpdateUINPageHindi(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isUpdateMyUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
-	
 	public  void enterUIN(String UIN) {
 		clickAndsendKeysToTextBox(UINNumberTextBox,UIN);
 	}
-	
-	public  void clickOnConsentButton() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(consentButton);
-	}
-	
-	public boolean isConsentTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(consentButton);
-	}
-	
-	public  void clickOnPreferredLanguageButton() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(preferredLanguageButton);
-	}
-	
-	public boolean isPreferredLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(preferredLanguageButton);
-	}
-		
-	public  void clickOnFullNameButton() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(fullNameButton);
-	}
-	
-	public boolean isFullNameTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(fullNameButton);
-	}
-	
-	
-	public  void clickOnDOBButton() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(DOBButton);
-	}
-	
-	public boolean isDOBTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(DOBButton);
-	}
-	
-	public  void clickOnGenderButton() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(genderButton);
-	}
-	
-	public boolean isnGenderTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(genderButton);
-	}
-	
-	public  void clickOnAddressButton() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressButton);
-	}
-	
-	public boolean isAddressTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(addressButton);
-	}
-	
-	public  void clickOnMaritalStatusButton() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(maritalStatusButton);
-	}
-	
-	public boolean isMaritalStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(maritalStatusButton);
-	}
-	
-	public  void clickOnApplicantLanguageButton() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(applicantLanguageButton);
-	}
-	
-	public boolean isApplicantLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(applicantLanguageButton);
-	}
-	
-	public  void clickOnResidenceStatusButton() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(residenceStatusButton);
-	}
-	
-	public boolean isResidenceStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusButton);
-	}
-	
-	public  void clickOnLocationButton() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(locationButton);
-	}
-	
-	public boolean isLocationTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(locationButton);
-	}
-	
-	public  void clickOnPhoneButton() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(phoneButton);
-	}
-	
-	public boolean isPhoneTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(phoneButton);
-	}
-	
-	public  void clickOnEmailButton() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(emailButton);
-	}
-	
-	public boolean isEmailTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailButton);
-	}
-	
-	public  void clickOnIntroducerDetailsButton() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerDetailsButton);
-	}
-	
-	public boolean isIntroducerDetailsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(introducerDetailsButton);
-	}
-	
-	public  void clickOnBiometricsButton() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(biometricsButton);
+
+	public  ConsentPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new ConsentPageEnglish(driver);
 	}
 	
-	public boolean isnBiometricsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(biometricsButton);
+	public boolean isInvalidUINErrorMessageDisplayed() {
+		return isElementDisplayed(invalidUINErrorMessage);
 	}
 	
-	public  void clickOnDocumentsButton() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(documentsButton);
+	public void selectUpdateValue(String page) {
+		List groupLabelList=FetchUiSpec.getAllGroupLabelUsingId(page);
+		for(String title : groupLabelList) {
+				WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+title+"\")"));
+				assertTrue(isElementDisplayed(webelement),"Verify if "+title+" title is displayed in update uin page");
+				clickOnElement(webelement);			
+			}		
 	}
 	
-	public boolean isDocumentsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(documentsButton);
-	}
-
-	public  ConsentPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new ConsentPageHindi(driver);
+	public void selectUpdateIntroducerDetails() {
+		WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getGroupValueUsingId("introducerName")+"\")"));
+		assertTrue(isElementDisplayed(webelement),"Verify if "+FetchUiSpec.getGroupValueUsingId("introducerName")+" title is displayed in update uin page");
+		clickOnElement(webelement);			
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/AcknowledgementPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/AcknowledgementPageKannada.java
index 2a0bb17ce..77d4206aa 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/AcknowledgementPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/AcknowledgementPageKannada.java
@@ -3,10 +3,13 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AcknowledgementPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 import regclient.pages.english.RegistrationTasksPageEnglish;
 
 public class AcknowledgementPageKannada extends AcknowledgementPage {
@@ -32,9 +35,6 @@ public class AcknowledgementPageKannada extends AcknowledgementPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"ಬಯೋಮೆಟ್ರಿಕ್ಸ್\"))")
 	private WebElement biometricsInformationInAcknowledgementPage;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"ಜನಸಂಖ್ಯಾ ವಿವರಗಳು\"))")
-	private WebElement demographicDetailsTitle;
-	
 	public AcknowledgementPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
@@ -69,10 +69,11 @@ public boolean isBiometricsInformationInAcknowledgementPageDisplayed() {
 		return isElementDisplayed(biometricsInformationInAcknowledgementPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageKannada(driver);
-	}
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
+	}	
 	
 	public String getAID() {
 		return getTextFromLocator(applicationID);
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/ApplicantBiometricsPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/ApplicantBiometricsPageKannada.java
index 95dc195b2..dafb3ec6e 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/ApplicantBiometricsPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/ApplicantBiometricsPageKannada.java
@@ -3,15 +3,15 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class ApplicantBiometricsPageKannada extends ApplicantBiometricsPage {
 
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'ಅರ್ಜಿದಾರ ಬಯೋಮೆಟ್ರಿಕ್ಸ್')]")
-	private WebElement applicantBiometricsPageTitle;
-	
 	@AndroidFindBy(accessibility = "ಐರಿಸ್ ಸ್ಕ್ಯಾನ್")
 	private WebElement irisScanButton;
 	
@@ -99,9 +99,6 @@ public class ApplicantBiometricsPageKannada extends ApplicantBiometricsPage {
 	@AndroidFindBy(xpath = "//android.view.View[@content-desc=\"ಅಂಶಗಳು\"]/following-sibling::android.view.View[@content-desc=\"1\"]")
 	private WebElement exceptionCount;
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'ಅಥೆನ್ ಟಿಕೇಶನ್ ಬಯೋಮೆಟ್ರಿಕ್ಸ್')]")
-	private WebElement authenticationBiometricsPageTitle;
-	
 	public ApplicantBiometricsPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
@@ -116,29 +113,29 @@ public  void enterCommentsInTextBox(String comments) {
 	public void clickOnScanButton() {
 		clickOnElement(scanButton);
 	}	
-	
+
 	public void clickOnExceptionTypePermanentButton() {
 		if(!isElementDisplayedOnScreen(permanentButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(permanentButton);
 	}
-	
+
 	public void clickOnExceptionTypeTemporaryButton() {
 		if(!isElementDisplayedOnScreen(temporaryButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(temporaryButton);	
 	}
-	
+
 	public void markOneEyeException() {
 		clickOnElement(oneEyeException);
 	}
-	
+
 	public void markOneFingureException() {
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(firstFingureExceptionImage);
 		clickOnElement(secondFingureExceptionImage);
@@ -146,105 +143,111 @@ public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(forthFingureExceptionImage);
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void clickOnClosePopUp() {
 		clickOnElement(popUpCloseButton);
 	}
-	
+
 	public void clickOnMarkExceptionButton() {
 		clickOnElement(markExceptionButton);
 	}
-	
+
 	public void clickOnIrisScanButton() {
 		clickOnElement(irisScanButton);
 	}
-	
+
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageKannada(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
 	public void clickOnZoomButton() {
 		clickOnElement(zoomButton);
 	}
-	
+
 	public void clickOnIrisScanTitle() {
 		clickOnElement(irisScanButtonTitle);
 	}
-	
+
 	public void clickOnRightHandScanTitle() {
 		clickOnElement(rightHandScanTitle);
 	}
-	
+
 	public void clickOnleftHandScanTitle() {
 		clickOnElement(leftHandScanTitle);
 	}
-	
+
 	public void clickOnThumbsScanTitle() {
 		clickOnElement(thumbsScanTitle);
 	}
-	
+
 	public void closeScanCapturePopUp() {
 		driver.navigate().back();
 	}
-	
+
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageKannada(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  boolean isApplicantBiometricsPageDisplyed() {
-		return isElementDisplayed(applicantBiometricsPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
 	}
-	
+
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricsPageDisplyed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
+	}
+
 	public  boolean isExceptionTypeTitleDisplyed() {
 		return isElementDisplayed(exceptionTypeTitle);
 	}
-	
+
 	public  boolean isRightHandScanTitleDisplyed() {
 		return isElementDisplayed(rightHandScanTitle);
 	}
-	
+
 	public  boolean isLeftHandScanTitleDisplyed() {
 		return isElementDisplayed(leftHandScanTitle);
 	}
-	
+
 	public  boolean isThumbsScanTitleDisplyed() {
 		return isElementDisplayed(thumbsScanTitle);
 	}
-	
+
 	public  boolean isFaceScanTitleDisplyed() {
 		return isElementDisplayed(faceScanTitle);
 	}
-	
+
 	public  boolean isExceptionScanTitleDisplyed() {
 		return isElementDisplayed(exceptionScanTitle);
 	}
-	
+
 	public  boolean isIrisScan() {
 		return isElementDisplayed(irisCapturerHeader,2000);
 	}
-	
+
 	public  boolean isRightHandScan() {
 		return isElementDisplayed(rightHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isLeftHandScan() {
 		return isElementDisplayed(leftHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isThumbsScan() {
 		return isElementDisplayed(thumbsCapturerHeader,2000);
 	}
-	
+
 	public  boolean isFaceScan() {
 		return isElementDisplayed(faceCapturerHeader,2000);
 	}
-	
+
 	public  boolean isExceptionScan() {
 		return isElementDisplayed(exceptionCapturerHeader,2000);
 	}
-	
+
 	public  boolean isCommentHeaderDisplyed() {
 		return isElementDisplayed(commentsHeader);
 	}
@@ -256,8 +259,4 @@ public  boolean isExceptionCountDisplyed() {
 		}
 		return isElementDisplayed(exceptionCount);
 	}
-	
-	public  boolean isAuthenticationBiometricsPageDisplyed() {
-		return isElementDisplayed(authenticationBiometricsPageTitle);
-	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/BiometricDetailsPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/BiometricDetailsPageKannada.java
index 6da095c91..3a1effdaa 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/BiometricDetailsPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/BiometricDetailsPageKannada.java
@@ -1,18 +1,21 @@
 package regclient.pages.kannada;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.ApplicantBiometricsPageEnglish;
+import regclient.pages.english.IntroducerBiometricPageEnglish;
+import regclient.pages.english.PreviewPageEnglish;
 
 public class BiometricDetailsPageKannada extends BiometricDetailsPage {
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"ಅರ್ಜಿದಾರ ಬಯೋಮೆಟ್ರಿಕ್ಸ್\"))")
-	private WebElement applicantBiometricTitle;
 
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"ಐರಿಸ್ ಸ್ಕ್ಯಾನ್\"))")
 	private WebElement irisScanIcon;
@@ -37,65 +40,84 @@ public class BiometricDetailsPageKannada extends BiometricDetailsPage {
 	
 	@AndroidFindBy(accessibility = "ಮುಂದುವರಿಸಿ")
 	private WebElement continueButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"ಅಥೆನ್ ಟಿಕೇಶನ್ ಬಯೋಮೆಟ್ರಿಕ್ಸ್\"))")
-	private WebElement authenticationBiometricTitle;
 
 	public BiometricDetailsPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public  boolean isBiometricDetailsPageDisplayed() {
-		return isElementDisplayed(applicantBiometricTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
+	}
+		
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricTitleDisplayed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
 	}
-
-	
 	
 	public ApplicantBiometricsPage clickOnIrisScan() {
 		clickOnElement(irisScanIcon);
-		return new ApplicantBiometricsPageKannada(driver);
-	}
-	
-	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
-		while(!isElementDisplayedOnScreen(introducerIrisScanIcon)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerIrisScanIcon);
-		return new IntroducerBiometricPageKannada(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnRightHandScanIcon() {
 		clickOnElement(rightHandScanIcon);
-		return new ApplicantBiometricsPageKannada(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnLeftHandScanIcon() {
 		clickOnElement(leftHandScanIcon);
-		return new ApplicantBiometricsPageKannada(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnThumbsScanIcon() {
 		clickOnElement(thumbsScanIcon);
-		return new ApplicantBiometricsPageKannada(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnFaceScanIcon() {
 		clickOnElement(faceScanIcon);
-		return new ApplicantBiometricsPageKannada(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnExceptionScanIcon() {
 		clickOnElement(exceptionScanIcon);
-		return new ApplicantBiometricsPageKannada(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
+
 	}
 	
-	public  PreviewPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new PreviewPageKannada(driver);
+	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Iris Scan\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
 	}
 	
-	public  boolean isAuthenticationBiometricTitleDisplayed() {
-		return isElementDisplayed(authenticationBiometricTitle);
+	public IntroducerBiometricPage clickOnIntroducerRightHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Right\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerLeftHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Left\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerThumbScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Thumbs\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
 	}
+	
+	public IntroducerBiometricPage clickOnIntroducerFaceScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Face\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
 
+	}
+	
+	public  PreviewPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new PreviewPageEnglish(driver);
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/ConsentPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/ConsentPageKannada.java
index faf9d29dd..ab260147a 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/ConsentPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/ConsentPageKannada.java
@@ -3,61 +3,56 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
+import regclient.pages.english.RegistrationTasksPageEnglish;
 
 
 public class ConsentPageKannada extends ConsentPage{
 
-	@AndroidFindBy(accessibility = "ಒಪ್ಪಿಗೆ")
-	private WebElement consentPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().className(\"android.widget.CheckBox\"))")
-	private WebElement termAndConditionCheckBox;
-
 	@AndroidFindBy(accessibility = "ಮಾಹಿತಿ ನೀಡಲಾಗಿದೆ")
 	private WebElement informedButton;
 
 	@AndroidFindBy(accessibility = "ರದ್ದುಮಾಡು")
 	private WebElement cancelButton;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"ನನ್ನ ಪಿಐಐ ಹಂಚಿಕೊಳ್ಳಲು ನಾನು ನಿಯಮಗಳು ಮತ್ತು ಷರತ್ತುಗಳನ್ನು ಓದಿದ್ದೇನೆ ಮತ್ತು ಸ್ವೀಕರಿಸಿದ್ದೇನೆ\"))")
-	private WebElement checkBoxDiscription;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"UIN ನವೀಕರಿಸಿ\"))")
-	private WebElement updateUINTitle;
-
-	
 	public ConsentPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isConsentPageDisplayed() {
-		return isElementDisplayed(consentPage);
+			return isElementDisplayed(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));		
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isCheckBoxReadable() {
-		return isElementDisplayed(checkBoxDiscription);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("consent") + "\"))")));
 	}
-
+	
 	public  boolean isInformedButtonEnabled() {
 		return isElementEnabled(informedButton);
 	}
 
 	public  DemographicDetailsPage clickOnInformedButton() {
 		clickOnElement(informedButton);
-		return new DemographicDetailsPageKannada(driver);
+		return new DemographicDetailsPageEnglish(driver);
 	}
-	
+
+
 	public RegistrationTasksPage clickOnCancelButton() {
 		clickOnElement(cancelButton);
-		return new  RegistrationTasksPageKannada(driver);
+		return new  RegistrationTasksPageEnglish(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
-
+	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/DemographicDetailsPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/DemographicDetailsPageKannada.java
index 5622355b5..637501bf7 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/DemographicDetailsPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/DemographicDetailsPageKannada.java
@@ -1,465 +1,292 @@
 package regclient.pages.kannada;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
+import regclient.page.BasePage;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.DocumentUploadPage;
 import regclient.pages.english.ConsentPageEnglish;
 import regclient.pages.english.DocumentuploadPageEnglish;
+import regclient.utils.TestDataReader;
 
 public class DemographicDetailsPageKannada extends DemographicDetailsPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"ಪೂರ್ಣ ಹೆಸರು\"))")
-	private WebElement demographicDetailspage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"ಒಪ್ಪಿಗೆ\"))")
-	private WebElement consentTitle;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
-	private WebElement fullNameTextBox;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
-	private WebElement fullNameTextBoxSecondLanguage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(2)")
-	private WebElement ageTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಶಾಶ್ವತ ವಿಳಾಸ1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine1TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ತಾತ್ಕಾಲಿಕ ವಿಳಾಸ 2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine2TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ತಾತ್ಕಾಲಿಕ ವಿಳಾಸ 3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine3TextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಶಾಶ್ವತ ವಿಳಾಸ1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine1TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ತಾತ್ಕಾಲಿಕ ವಿಳಾಸ 2\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine2TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ತಾತ್ಕಾಲಿಕ ವಿಳಾಸ 3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine3TextBoxSecondLangauge;
-
-	@AndroidFindBy(accessibility = "ಪುರುಷ")
+		@AndroidFindBy(accessibility = "ಪುರುಷ")
 	private WebElement maleButton;
 
 	@AndroidFindBy(accessibility = "ಹೆಣ್ಣು")
 	private WebElement femaleButton;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ನಾಗರಿಕ ಸ್ಥಿತಿ\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectMaritalStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ನಿವಾಸ ಸ್ಥಿತಿ\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectResidentStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಪ್ರದೇಶ\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectRegionStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಪ್ರಾಂತ್ಯ\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectProvinceStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಸಿಟಿ\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectCityStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ವಲಯ\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectZoneStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಅಂಚೆ\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectPostal;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"14022\")")
-	private WebElement selectPostalCode;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ವಿದೇಶಿಯರಲ್ಲದವರು\")")
-	private WebElement nonForeignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ವಿದೇಶಿಗ\")")
-	private WebElement foreignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಏಕ\")")
-	private WebElement singleValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ರಬತ್ ಸಲೆ ಕೆನಿತ್ರ\")")
-	private WebElement rabatSaleKenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಕೆನಿತ್ರಾ\")]")
-	private WebElement kenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ರಬತ್\")]")
-	private WebElement rabatValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಬಿನ್ ಮನ್ಸೂರ್\")")
-	private WebElement benMansourFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ನಿವಾಸ ಸ್ಥಿತಿ\")")
-	private WebElement residenceStatusHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಪ್ರದೇಶ\")")
-	private WebElement regionHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಪ್ರಾಂತ್ಯ\")")
-	private WebElement provinceHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಸಿಟಿ\")")
-	private WebElement cityHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ವಲಯ\")")
-	private WebElement zoneHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಅಂಚೆ\")")
-	private WebElement postalCodeHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಫೋನ್\")")
-	private WebElement mobileNumberHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಇಮೇಲ್\")")
-	private WebElement emailHeader;
 	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಪರಿಚಯಕಾರರ ಹೆಸರು\")")
-	private WebElement introducerNameHeader;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಪರಿಚಯಕಾರ ಆರ್ಐಡಿ\")")
-	private WebElement introducerRidHeader;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಫೋನ್\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText")
-	private WebElement mobileNumberTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಇಮೇಲ್\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement emailIdTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಪರಿಚಯಕಾರರ ಹೆಸರು\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerNameTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಪರಿಚಯಕಾರರ ಹೆಸರು\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement introducerNameTextBoxSecondLangauge;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಪರಿಚಯಕಾರ ಆರ್ಐಡಿ\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerRidTextBox;
-
 	@AndroidFindBy(accessibility = "ಮುಂದುವರಿಸಿ")
 	private WebElement continueButton;
 	
 	@AndroidFindBy(accessibility = "ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್")
 	private WebElement errorMessageInvalidInputText;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement calenderIcon;
-	
 	@AndroidFindBy(accessibility = "ಸ್ಕ್ರಿಮ್")
 	private WebElement backgroundScreen;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement getSelectedDate;
+	@AndroidFindBy(accessibility = "FETCH DATA")
+	private WebElement fetchDataButton;
 
 
 	public DemographicDetailsPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
 
+
+	@SuppressWarnings("deprecation")
 	public boolean isDemographicDetailsPageDisplayed() {
+		WebElement  demographicDetailspage = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))"));
 		return isElementDisplayed(demographicDetailspage);
 	}
-	
+
 	public boolean isErrorMessageInvalidInputTextDisplayed() {
 		return isElementDisplayed(errorMessageInvalidInputText);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  ConsentPage clickOnConsentPageTitle() {
+		WebElement  consentTitle = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));
 		clickOnElement(consentTitle);
 		return new ConsentPageEnglish(driver);
 	}
 
-	public  void enterFullName(String fullName) {
-		clickAndsendKeysToTextBox(fullNameTextBox,fullName);
-	}
-
-	public  void enterAddressLine1(String addressLine1) {
-		if(!isElementDisplayedOnScreen(addressLine1TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine1TextBox,addressLine1);
-	}
-
-	public  void enterAddressLine2(String addressLine2) {
-		if(!isElementDisplayedOnScreen(addressLine2TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine2TextBox,addressLine2);
-	}
-
-	public  void enterAddressLine3(String addressLine3) {
-		if(!isElementDisplayedOnScreen(addressLine3TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine3TextBox,addressLine3);
-	}
-
-	public  void enterAge(String age) {
-		clickAndsendKeysToTextBox(ageTextBox,age);
-	}
-
-	public boolean checkFullNameSecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(fullNameTextBoxSecondLanguage)==null || getTextFromLocator(fullNameTextBoxSecondLanguage)=="" )
-			return	false;
-		else
-			return	true;
-	}
-
-	public boolean isResidenceStatusHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(residenceStatusHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusHeader);
-	}
-
-	public boolean isRegionHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(regionHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(regionHeader);
-	}
-
-	public boolean isProvinceHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(provinceHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(provinceHeader);
-	}
-
-	public boolean isCityHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(cityHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(cityHeader);
-	}
-
-	public boolean isPostalCodeHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(postalCodeHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(postalCodeHeader);
-	}
-
-	public boolean isMobileNumberHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(mobileNumberHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(mobileNumberHeader);
-	}
-
-	public boolean isZoneHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(zoneHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(zoneHeader);
-	}
+	public  DocumentUploadPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new DocumentuploadPageEnglish(driver);
 
-	public boolean isEmailHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(emailHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailHeader);
-	}
-	
-	public boolean isIntroducerNameHeaderDisplayed() {
-		return isElementDisplayed(introducerNameHeader);
 	}
 	
-	public boolean isIntroducerRidHeaderDisplayed() {
-		return isElementDisplayed(introducerRidHeader);
-	}
-
-	public  void selectGender(String gender) {
-		if(gender.equalsIgnoreCase("male"))
-			clickOnElement(maleButton);
-		if(gender.equalsIgnoreCase("female"))
-			clickOnElement(femaleButton);
-	}
-
-	public  void selectMaritalStatus() {
-		clickOnElement(selectMaritalStatus);
-		if(!isElementDisplayedOnScreen(singleValueFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectMaritalStatus);
-			clickOnElement(singleValueFromDropdown);
-		}else
-			clickOnElement(singleValueFromDropdown);
-	}
-
-	public  void selectResidenceStatus(String ResidenceStatus) {
-		clickOnElement(selectResidentStatus);
-		if(ResidenceStatus.equalsIgnoreCase("Foreigner")) {
-			if(!isElementDisplayedOnScreen(foreignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(foreignerValueFromDropdown);
-			}else
-				clickOnElement(foreignerValueFromDropdown);
-		}else {
-			if(!isElementDisplayedOnScreen(nonForeignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(nonForeignerValueFromDropdown);
-			}else
-				clickOnElement(nonForeignerValueFromDropdown);
+	public  boolean isContinueButtonEnable() {
+		return isElementEnabled(continueButton);
+
+	}
+
+	public boolean isPreRegFetchDataTextBoxDisplay() {
+		return isElementDisplayed(fetchDataButton);
+	}
+
+	public void fillDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}
+				else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(3);
+					while(!isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"))) {
+						swipeOrScroll();
+					}
+					boolean isdisplayed =isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(3);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("")){	
+					if(!isElementDisplayed(maleButton)) {
+						swipeOrScroll();
+						clickOnElement(maleButton);		
+					}else
+						clickOnElement(maleButton);		
+
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			else if(id.equals("residenceStatus")) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(2);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(2);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
 		}
-
 	}
 
-	public  void selectRegionStatus(String region) {
-		clickOnElement(selectRegionStatus);
-		if(region.equalsIgnoreCase("Rabat Sale Kenitra")) {
-			if(!isElementDisplayedOnScreen(rabatSaleKenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectRegionStatus);
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
-			}else {
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
+	public void editDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
 			}
 		}
-
-	}
-
-	public  void selectProvinceStatus(String province) {
-		clickOnElement(selectProvinceStatus);
-		if(province.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(province.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectCityStatus(String city) {
-		clickOnElement(selectCityStatus);
-		if(city.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(city.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectZoneStatus() {
-		clickOnElement(selectZoneStatus);
-		if(!isElementDisplayedOnScreen(benMansourFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectZoneStatus);
-			clickOnElement(benMansourFromDropdown);
-		}else
-			clickOnElement(benMansourFromDropdown);
-	}
-
-	public  void selectPostalStatus() {
-		clickOnElement(selectPostal);
-		if(!isElementDisplayedOnScreen(selectPostalCode)) {
-			swipeOrScroll();
-			clickOnElement(selectPostal);
-			clickOnElement(selectPostalCode);
-		}else
-			clickOnElement(selectPostalCode);
 	}
 
-	public  DocumentUploadPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new DocumentuploadPageEnglish(driver);
-
-	}
-
-	public  void enterMobileNumber(String mobileNumber) {
-		if(!isElementDisplayedOnScreen(mobileNumberTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-		}else
-		clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-	}
-
-	public  void enterEmailID(String EmailID) {
-		if(!isElementDisplayedOnScreen(emailIdTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-		}else
-		clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-	}
-	
-	public  void enterIntroducerName(String introducerName) {
-		if(!isElementDisplayedOnScreen(introducerNameTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-		}else
-		clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-	}
-	
-	public  void enterIntroducerRid(String introducerRid) {
-		if(!isElementDisplayedOnScreen(introducerRidTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-		}else
-		clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-	}
-	
-	public  void selectCurrentCalenderDate() {
-		clickOnElement(calenderIcon);		
-	}
-	
-	public  void closeCalender() {
-		clickOnElement(backgroundScreen);		
-	}
-	
-	public  boolean checkDateFormatAndCurrectDate() {
-		getTextFromLocator(getSelectedDate);
-		if(getTextFromLocator(getSelectedDate).equalsIgnoreCase(getCurrentDate())) 
-			return	true;
-		else
-			return false;
-	}
-	
-	public boolean checkAddress1SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine1TextBoxSecondLangauge)==null || getTextFromLocator(addressLine1TextBoxSecondLangauge)=="" )
+	public boolean checkSecondLanguageTextBoxNotNull(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))==null || getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))=="" )
 			return	false;
 		else
 			return	true;
 	}
 
-	public boolean checkAddress2SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine2TextBoxSecondLangauge)==null || getTextFromLocator(addressLine2TextBoxSecondLangauge)=="" )
-			return	false;
-		else
+	public  boolean checkDateFormatAndCurrectDate(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View"))).equalsIgnoreCase(getCurrentDate())) 
 			return	true;
-	}
-
-	public boolean checkAddress3SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine3TextBoxSecondLangauge)==null || getTextFromLocator(addressLine3TextBoxSecondLangauge)=="" )
-			return	false;
 		else
-			return	true;
+			return false;
 	}
-
-	public boolean checkIntroducerNameTextBoxSecondLangaugeTextBoxNotNull() {
-		if(getTextFromLocator(introducerNameTextBoxSecondLangauge)==null || getTextFromLocator(introducerNameTextBoxSecondLangauge)=="" )
-			return	false;
-		else
-			return	true;
+	
+	public void fillIntroducerDetailsInDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(id.equals("introducerName")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerUIN")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("UINminor"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
+		}
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/DocumentuploadPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/DocumentuploadPageKannada.java
index ddd9918d6..7a7bc754b 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/DocumentuploadPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/DocumentuploadPageKannada.java
@@ -1,263 +1,185 @@
 package regclient.pages.kannada;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.CameraPage;
 import regclient.page.DocumentUploadPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
+import regclient.pages.english.DocumentuploadPageEnglish;
 
 
 public class DocumentuploadPageKannada extends DocumentUploadPage{
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"ಡಾಕ್ಯುಮೆಂಟ್ ಅಪ್ಲೋಡ್\"))")
-	private WebElement doccumentUploadPage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.Button\")")
-	private WebElement identityProofScanButton;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ವಿಳಾಸ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement addressProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಗುರುತಿನ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement identityProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಸಂಬಂಧ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement relationshipProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB ಪ್ರೂಫ್\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement dobProofSelectValue;
 
 	@AndroidFindBy(accessibility = "ಸ್ಕ್ರಿಮ್")
 	private WebElement PopUpCloseButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ವಿಳಾಸ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonAddressProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಗುರುತಿನ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonIdentityProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB ಪ್ರೂಫ್\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonDobProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಸಂಬಂಧ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonRelationshipProof;
-
 	@AndroidFindBy(accessibility = "ಹಿಂತಿರುಗಿ")
 	private WebElement backButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ವಿಳಾಸ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView")
-	private WebElement previewCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ವಿಳಾಸ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[2]")
-	private WebElement previewSecondCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ವಿಳಾಸ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[3]")
-	private WebElement previewThirdCaptureImage;
-
 	@AndroidFindBy(accessibility = "ಮುಂದುವರಿಸಿ")
 	private WebElement continueButton;
 
 	@AndroidFindBy(accessibility = "ಅಳಿಸಿ")
 	private WebElement deleteButton;
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"DOB ಪ್ರೂಫ್\"))")
-	private WebElement dobsHeader;
-
 	@AndroidFindBy(xpath = "//android.widget.ImageView")
 	private WebElement captureImage;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ವಿಳಾಸ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement addressProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ಗುರುತಿನ ಪುರಾವೆ\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement identityProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB ಪ್ರೂಫ್\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement dobProofReferenceNumberTextbox;
+	@AndroidFindBy(accessibility = "ಉಳಿಸಿ")
+	private WebElement saveButton;
+
+	@AndroidFindBy(accessibility = "ರೀಟೇಕ್")
+	private WebElement retakeButton;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.view.View\").instance(8)")
+	private WebElement imageleftCorner;
 
 	public DocumentuploadPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
 	
-	public void selectAddressProof() {
-		while(!isElementDisplayedOnScreen(addressProofSelectValue) || !isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(addressProofSelectValue);	
-		}
-	}
-
-	public void selectIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofSelectValue)|| !isElementDisplayedOnScreen(scanButtonIdentityProof) ) {
-			swipeOrScroll();
-		}
-		clickOnElement(identityProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(identityProofSelectValue);	
-		}
-	}
-
-	public void selectDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofSelectValue) || !isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(dobProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(dobProofSelectValue);	
-		}
-	}
-
-	public void selectRelationshipProof() {
-		while(!isElementDisplayedOnScreen(relationshipProofSelectValue) || !isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(relationshipProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(relationshipProofSelectValue);	
-		}
-	}
-
-	public void selectOnCaptureImage() {
-		clickOnElement(previewCaptureImage);
-	}
-
-	public void closePopUpClose() {
-		clickOnElement(PopUpCloseButton);
-	}
-
-	public CameraPage clickOnAddressProofScanButton() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonAddressProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonDobProof() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonDobProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonIdentityProof() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonIdentityProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonRelationshipProof() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonRelationshipProof);
-		return new CameraPage(driver);
-	}
-
-	public void clickOnBackButton() {
-		clickOnElement(backButton);
-
-	}
-
-	public void clickOnDeleteButton() {
-		clickOnElement(deleteButton);
-
-	}
-
 	public  BiometricDetailsPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new BiometricDetailsPageKannada(driver);
-	}
-
-	public  boolean isImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(captureImage);
-	}
-
-	public  boolean isSecondImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewSecondCaptureImage);
-	}
-
-	public  boolean isThirdImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewThirdCaptureImage);
-	}
-
-	public  boolean isDeleteButtonDisplyed() {
-		if(!isElementDisplayedOnScreen(deleteButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(deleteButton);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isDoccumentUploadPageDisplayed() {
-		return isElementDisplayed(doccumentUploadPage);
-	}
-
-	public boolean isDobHeaderDisplayed() {
-		return isElementDisplayed(dobsHeader);
-	}
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("Documents") + "\"))")));
+	}
+
+	public  DocumentUploadPage clickOnSaveButton() {
+		clickOnElement(saveButton);
+		return new DocumentuploadPageEnglish(driver);
+	}
+
+	public boolean isRetakeButtonDisplayed() {
+		return isElementDisplayed(retakeButton);
+	}
+
+	public void cropCaptureImage() {
+		isElementDisplayed(captureImage);
+		cropCaptureImage(imageleftCorner);
+	}
+
+	public void uploadDoccuments(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(type.equalsIgnoreCase("ReferenceNumber")) {
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")),"1234567890");
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}else {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}
+		}
+
+	}
+	public void uploadDoccumentsUpdate(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(type.equals("all") && !id.equals("proofOfException") && !id.equals("proofOfRelationship")) {
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+					swipeOrScroll();
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				}
+				clickOnElement(PopUpCloseButton);
+				waitTime(1);
+				boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				CameraPage cameraPage=new CameraPage(driver);
+				cameraPage.clickimage();
+				cameraPage.clickOkButton();
+				assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+				cropCaptureImage();
+				clickOnSaveButton();
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+				}
+			}
 
-	public  boolean isScanButtonAddressProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonAddressProof);
-	}
-
-	public  boolean isScanButtonIdentityProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonIdentityProof);
-	}
-
-	public  boolean isScanButtonDobProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonDobProof);
-	}
-
-	public  boolean isScanButtonRelationshipProoffEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonRelationshipProof);
-	}
-
-	public  void enterReferenceNumberInAdressProof() {
-		if(!isElementDisplayedOnScreen(addressProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-		}else
-		clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(identityProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofReferenceNumberTextbox)) {
-			swipeOrScroll();
 		}
-		clickAndsendKeysToTextBox(dobProofReferenceNumberTextbox,"1234567890");
 	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/IntroducerBiometricPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/IntroducerBiometricPageKannada.java
index e88fd42f2..c034f9f78 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/IntroducerBiometricPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/IntroducerBiometricPageKannada.java
@@ -3,15 +3,15 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class IntroducerBiometricPageKannada extends IntroducerBiometricPage {
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'ಪರಿಚಯಕಾರ ಬಯೋಮೆಟ್ರಿಕ್ಸ್')]")
-	private WebElement introducerBiometricPageTitle;
-	
 	@AndroidFindBy(accessibility = "ಐರಿಸ್ ಸ್ಕ್ಯಾನ್")
 	private WebElement irisScanButton;
 	
@@ -102,7 +102,7 @@ public void clickOnIrisScanButton() {
 	
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageKannada(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
 	public void clickOnZoomButton() {
@@ -127,11 +127,12 @@ public void closeScanCapturePopUp() {
 	
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageKannada(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public  boolean isIntroducerBiometricsPageDisplyed() {
-		return isElementDisplayed(introducerBiometricPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId("introducerBiometrics")+"\")")));
 	}
 	
 	public  boolean isExceptionTypeTitleDisplyed() {
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/LoginPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/LoginPageKannada.java
index b61c79291..8bf1de61a 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/LoginPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/LoginPageKannada.java
@@ -1,5 +1,7 @@
 package regclient.pages.kannada;
 
+import java.time.Duration;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
@@ -73,6 +75,7 @@ public  void clickOnBackButton() {
 	}
 
 	public  void enterPassword(String password) {
+		retryFindElement(passwordTextBox,Duration.ofSeconds(10));
 		clickAndsendKeysToTextBox(passwordTextBox,password);
 	}
 
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/ManageApplicationsPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/ManageApplicationsPageKannada.java
index 5eba00625..f44550bb8 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/ManageApplicationsPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/ManageApplicationsPageKannada.java
@@ -86,7 +86,7 @@ public boolean isSearchAIDDisplayed(String AID) {
 		waitTime(2);
 		return isElementDisplayed(driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]")));
 	}
-	
+
 	public boolean isZeroApplicationDisplayed() {
 		waitTime(2);
 		return isElementDisplayed(displayZeroApplication);
@@ -94,18 +94,24 @@ public boolean isZeroApplicationDisplayed() {
 
 	public  void clickOnUploadButton() {
 		clickOnElement(uploadButton);
-		waitTime(20);
+		waitTime(10);
 	}
 
 	public boolean isPacketUploadDone(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
-		if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
-			return false;
+		if(element.getAttribute("contentDescription").contains("NOT UPLOADED")) {
+			waitTime(10);
+			element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+			if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
+				return false;
+			else
+				return true;
+		}
 		else
 			return true;
 	}
-	
+
 	public boolean isPacketApproved(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -114,7 +120,7 @@ public boolean isPacketApproved(String AID) {
 		else
 			return false;
 	}
-	
+
 	public boolean isPacketSynned(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -123,6 +129,15 @@ public boolean isPacketSynned(String AID) {
 		else
 			return false;
 	}
+	
+	public boolean isPacketRejected(String AID) {
+		waitTime(2);
+		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+		if(element.getAttribute("contentDescription").contains("REJECTED"))
+			return true;
+		else
+			return false;
+	}
 
 	public  void clickClientStatusDropdown() {
 		clickOnElement(clientStatusDropdown);
@@ -163,21 +178,21 @@ public  void clickDismissButton() {
 	public  void clickOnSearchCheckBox() {
 		clickOnElement(searchCheckBoxButton);
 	}
-	
+
 	public  void selectApprovedValueDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(approvedOption);
 	}	
-	
+
 	public  void selectSyncedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(syncedOption);
 	}
-	
+
 	public  void selectUploadedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(uploadedOption);
-		
+
 	}
 
 	public boolean isReceivedDropdownOptionDisplayed() {
@@ -195,7 +210,7 @@ public boolean isAcceptedDropdownOptionDisplayed() {
 	public boolean isDeletionDropdownOptionDisplayed() {
 		return isElementDisplayed(deletionValueDropdown);
 	}
-	
+
 	public void clickOnBackButton() {
 		driver.navigate().back();
 	}
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/OperationalTaskPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/OperationalTaskPageKannada.java
index e614caa00..1a473d856 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/OperationalTaskPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/OperationalTaskPageKannada.java
@@ -22,6 +22,9 @@ public class OperationalTaskPageKannada extends OperationalTaskPage{
 	
 	@AndroidFindBy(accessibility = "ಅಪ್ಲಿಕೇಶನ್ ಅಪ್ಲೋಡ್")
 	private WebElement applicationUploadTitle;
+	
+	@AndroidFindBy(accessibility = "ಒಪ್ಪಿಗೆಗಾಗಿ ಕಾದಿರುವ")
+	private WebElement pendingApprovalTitle;
 
 	public OperationalTaskPageKannada(AppiumDriver driver) {
 		super(driver);
@@ -61,5 +64,16 @@ public boolean isApplicationUploadTitleDisplayed() {
 		}
 		return isElementDisplayed(applicationUploadTitle);
 	}
+	
+	public  void clickPendingApprovalTitle() {
+		clickOnElement(pendingApprovalTitle);
+	}
+	
+	public boolean isPendingApprovalTitleDisplayed() {
+		if(!isElementDisplayedOnScreen(pendingApprovalTitle)) {
+			swipeOrScroll();
+		}
+		return isElementDisplayed(pendingApprovalTitle);
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/PendingApprovalKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/PendingApprovalKannada.java
new file mode 100644
index 000000000..18df5507c
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/PendingApprovalKannada.java
@@ -0,0 +1,160 @@
+/**
+ * 
+ */
+package regclient.pages.kannada;
+
+import static org.testng.Assert.assertTrue;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.page.PendingApproval;
+
+public class PendingApprovalKannada extends PendingApproval{
+
+	@AndroidFindBy(accessibility = "ಒಪ್ಪಿಗೆಗಾಗಿ ಕಾದಿರುವ")
+	private WebElement pendingApprovalTitle;
+
+	@AndroidFindBy(accessibility = "ಅನುಮೋದಿಸಿ")
+	private WebElement approveButton;
+
+	@AndroidFindBy(accessibility = "ಸ್ಕ್ರಿಮ್")
+	private WebElement backGroundScreen;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.CheckBox\").instance(0)")
+	private WebElement searchCheckBoxButton;
+
+	@AndroidFindBy(accessibility = "ಸಲ್ಲಿಸು")
+	private WebElement submitButton;
+
+	@AndroidFindBy(accessibility = "ಮೇಲ್ವಿಚಾರಕರ ದೃಢೀಕರಣ")
+	private WebElement supervisorAuthenticationTitle;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
+	private WebElement userNameTextBox;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
+	private WebElement passwordTextBox;
+	
+	@AndroidFindBy(xpath = "//*[contains(@content-desc,\"ಒಪ್ಪಿಗೆಗಾಗಿ ಕಾದಿರುವ\")]//preceding-sibling::android.widget.Button")
+	private WebElement backButton;
+
+	@AndroidFindBy(accessibility = "REJECT")
+	private WebElement rejectButton;
+	
+	@AndroidFindBy(accessibility = "Sl.no Application ID Reg. Date Client Status Review Status Operator ID")
+	private WebElement pageAttributes ;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"CREATED\")")
+	private WebElement clientStatus;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Pending\").instance(1)")
+	private WebElement reviewStatus;
+	
+	@AndroidFindBy(xpath = "//android.widget.EditText")
+	private WebElement applicationIdTextbox;
+	
+	@AndroidFindBy(accessibility = "Reject Packet?")
+	private WebElement rejectPacketTitle;
+	
+	@AndroidFindBy(accessibility = "Please select a value")
+	private WebElement rejectReasonDropdown;
+	
+	public PendingApprovalKannada(AppiumDriver driver) {
+		super(driver);
+	}
+
+	public boolean isPendingApprovalTitleDisplayed() {
+		return isElementDisplayed(pendingApprovalTitle);		
+	}
+
+	@SuppressWarnings("deprecation")
+	public void clickOnAID(String AID) {
+		clickOnElement(findElementWithRetry(MobileBy.AccessibilityId(AID)));
+	}
+
+	public void clickOnApproveButton() {
+		clickOnElement(approveButton);
+	}
+
+	public void clickOnClosePopUpButton() {
+		clickOnElement(backGroundScreen);
+	}
+
+	public void clickOnCheckBox() {
+		clickOnElement(searchCheckBoxButton);
+	}
+
+	public void clickOnSubmitButton() {
+		clickOnElement(submitButton);
+	}
+
+	public boolean isSupervisorAuthenticationTitleDisplayed() {
+		return isElementDisplayed(supervisorAuthenticationTitle);		
+	}
+
+	public  void enterUserName(String username) {
+		sendKeysToTextBox(userNameTextBox,username);
+	}
+
+	public  void enterPassword(String password) {
+		sendKeysToTextBox(passwordTextBox,password);
+	}
+	
+	public void clickOnBackButton() {
+		clickOnElement(backButton);
+	}
+
+	public boolean isApprovalButtonDisplayed() {
+		return isElementDisplayed(approveButton);		
+	}
+	
+	public boolean isRejectButtonDisplayed() {
+		return isElementDisplayed(rejectButton);		
+	}
+	
+	public boolean isPageAttributesDisplayed() {
+		return isElementDisplayed(pageAttributes);		
+	}
+	
+	public boolean isClientStatusDisplayed() {
+		return isElementDisplayed(clientStatus);		
+	}
+
+	public boolean isReviewStatusDisplayed() {
+		return isElementDisplayed(reviewStatus);		
+	}
+	
+	public  void enterAID(String AID) {
+		clickAndsendKeysToTextBox(applicationIdTextbox,AID);
+	}
+	
+	public void clickOnRejectButton() {
+		clickOnElement(rejectButton);
+	}
+	
+	public boolean isRejectPacketTitleDisplayed() {
+		return isElementDisplayed(rejectPacketTitle);		
+	}
+	
+	public void selectRejectionReasonDropdown() {
+		boolean isdisplayed =isElementDisplayed(rejectReasonDropdown);
+		assertTrue(isdisplayed,"Verify if "+rejectReasonDropdown+" header is displayed");
+		clickOnElement(rejectReasonDropdown);
+		waitTime(2);
+		if(!isElementDisplayed(rejectReasonDropdown)) {				
+			clickOnElement(findElement(By.className("android.view.View")));
+		}else {
+			clickOnElement(rejectReasonDropdown);
+			waitTime(2);
+			clickOnElement(findElement(By.className("android.view.View")));
+		}	
+	}
+	
+	public boolean isSubmitButtonEnabled() {
+		return isElementEnabled(submitButton);		
+	}
+}
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/PreviewPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/PreviewPageKannada.java
index 299bded3d..cbba6f6dc 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/PreviewPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/PreviewPageKannada.java
@@ -3,15 +3,16 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AuthenticationPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.AuthenticationPageEnglish;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 
 public class PreviewPageKannada extends PreviewPage {
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"ಹೊಸ ನೋಂದಣಿ\"))")
-	private WebElement newRegistrationTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"ಜನಸಂಖ್ಯಾ ಮಾಹಿತಿ\"))")
 	private WebElement demographicInformationInPreviewPage;
@@ -21,9 +22,6 @@ public class PreviewPageKannada extends PreviewPage {
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"ದಾಖಲೆಗಳು\"))")
 	private WebElement documentsInformationInPreviewPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"ಜನಸಂಖ್ಯಾ ವಿವರಗಳು\"))")
-	private WebElement demographicDetailsTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"ಬಯೋಮೆಟ್ರಿಕ್ಸ್\"))")
 	private WebElement biometricsInformationInPreviewPage;
@@ -40,16 +38,13 @@ public class PreviewPageKannada extends PreviewPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\"Fingers ( 7 )\"))")
 	private WebElement fingerExceptionText;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"UIN ನವೀಕರಿಸಿ\"))")
-	private WebElement updateUINTitle;
-	
 	public PreviewPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
 	
 	public  AuthenticationPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new AuthenticationPageKannada(driver);
+		return new AuthenticationPageEnglish(driver);
 	}
 	
 	public boolean isDemographicInformationInPreviewPageDisplayed() {
@@ -64,17 +59,23 @@ public boolean isBiometricsInformationInPreviewPagePageDisplayed() {
 		return isElementDisplayed(biometricsInformationInPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isNewRegistrationTitleDisplayed() {
-		return isElementDisplayed(newRegistrationTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("NEW") + "\"))")));
+	}
+	
+	public boolean updateUINTitleDisplayed() {
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
 	
 	public boolean isApplicationIDPreviewPagePageDisplayed() {
 		return isElementDisplayed(applicationIDPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageKannada(driver);
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
 	}
 	
 	public boolean isBothIrisImageDisplayed() {
@@ -93,9 +94,5 @@ public String getAID() {
 		String applicationID = getTextFromLocator(applicationIDPreviewPage).replaceAll(".*Application ID (\\d+).*", "$1");
 		return applicationID;
 	}
-	
-	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
-	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/RegistrationTasksPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/RegistrationTasksPageKannada.java
index 82c0b439a..0c7bc90d1 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/RegistrationTasksPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/RegistrationTasksPageKannada.java
@@ -42,7 +42,13 @@ public class RegistrationTasksPageKannada extends RegistrationTasksPage{
 	
 	@AndroidFindBy(accessibility = "UIN ನವೀಕರಿಸಿ")
 	private WebElement updateUinButton;
-
+	
+	@AndroidFindBy(accessibility = "UIN ಕಳೆದುಕೊಂಡಿದೆ")
+	private WebElement lostUinButton;
+	
+	@AndroidFindBy(accessibility = "Biometric correction")
+	private WebElement biometricCorrectionButton;
+	
 	public RegistrationTasksPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
@@ -99,5 +105,30 @@ public  SelectLanguagePage clickUpdateMyUINButton() {
 		clickOnElement(updateUinButton);
 		return new SelectLanguagePageKannada(driver);
 	}
+	
+	public boolean isUpdateUINTitleDisplayed() {
+		return isElementDisplayed(updateUinButton);
+	}
+	
+	public boolean isLostUINTitleDisplayed() {
+		return isElementDisplayed(lostUinButton);
+	}
+	
+	public boolean isBiometricCorrectionTitleDisplayed() {
+		return isElementDisplayed(biometricCorrectionButton);
+	}
+	
+	public  void clickSynchronizeDataButton() {
+		clickOnElement(synchronizeDataButton);
+		waitTime(50);
+	}
+	
+	public boolean checkLastSyncDate() {
+		String contentDesc = synchronizeDataButton.getAttribute("content-desc");
+		if(contentDesc.contains("Synchronize Data\n"+getCurrentDateWord()+","))
+			return true;
+		else
+			return false;
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/SupervisorBiometricVerificationpageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/SupervisorBiometricVerificationpageKannada.java
index ec5e7e4ac..c662d0c6d 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/SupervisorBiometricVerificationpageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/SupervisorBiometricVerificationpageKannada.java
@@ -386,5 +386,9 @@ public boolean isOperatorOnboardedPopupLoaded() {
 	public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
+	
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/UpdateOperatorBiometricspageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/UpdateOperatorBiometricspageKannada.java
index 8eb3f4964..015862470 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/UpdateOperatorBiometricspageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/UpdateOperatorBiometricspageKannada.java
@@ -385,5 +385,8 @@ public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
 
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/kannada/UpdateUINPageKannada.java b/uitest-regclient/src/main/java/regclient/pages/kannada/UpdateUINPageKannada.java
index 0b57ef5c9..9fc2fd10a 100644
--- a/uitest-regclient/src/main/java/regclient/pages/kannada/UpdateUINPageKannada.java
+++ b/uitest-regclient/src/main/java/regclient/pages/kannada/UpdateUINPageKannada.java
@@ -1,294 +1,64 @@
 package regclient.pages.kannada;
 
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.UpdateUINPage;
+import regclient.pages.english.ConsentPageEnglish;
 
 public class UpdateUINPageKannada extends UpdateUINPage{
 	
-	@AndroidFindBy(accessibility = "Update UIN")
-	private WebElement updateUINTitle;
-	
 	@AndroidFindBy(xpath = "//android.widget.EditText")
 	private WebElement UINNumberTextBox;
 	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಒಪ್ಪಿಗೆ\")")
-	private WebElement consentButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಆದ್ಯತೆಯ ಭಾಷೆ\")")
-	private WebElement preferredLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಪೂರ್ಣ ಹೆಸರು\")")
-	private WebElement fullNameButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"DOB\")")
-	private WebElement DOBButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಲಿಂಗ\")")
-	private WebElement genderButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ವಿಳಾಸ\")")
-	private WebElement addressButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ವೈವಾಹಿಕ ಸ್ಥಿತಿ\")")
-	private WebElement maritalStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಅರ್ಜಿದಾರರ ಭಾಷೆ\")")
-	private WebElement applicantLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ನಿವಾಸ ಸ್ಥಿತಿ\")")
-	private WebElement residenceStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಸ್ಥಳ\")")
-	private WebElement locationButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ದೂರವಾಣಿ\")")
-	private WebElement phoneButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಇಮೇಲ್\")")
-	private WebElement emailButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಪರಿಚಯಿಸುವವರ ವಿವರಗಳು\")")
-	private WebElement introducerDetailsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ಬಯೋಮೆಟ್ರಿಕ್ಸ್\")")
-	private WebElement biometricsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ದಾಖಲೆಗಳು\")")
-	private WebElement documentsButton;
-	
 	@AndroidFindBy(accessibility = "ಮುಂದುವರಿಸಿ")
 	private WebElement continueButton;
+	
+	@AndroidFindBy(accessibility = "ದಯವಿಟ್ಟು ಮಾನ್ಯವಾದ UIN ಅನ್ನು ನಮೂದಿಸಿ")
+	private WebElement invalidUINErrorMessage;
 
 	public UpdateUINPageKannada(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isUpdateMyUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
-	
 	public  void enterUIN(String UIN) {
 		clickAndsendKeysToTextBox(UINNumberTextBox,UIN);
 	}
-	
-	public  void clickOnConsentButton() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(consentButton);
-	}
-	
-	public boolean isConsentTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(consentButton);
-	}
-	
-	public  void clickOnPreferredLanguageButton() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(preferredLanguageButton);
-	}
-	
-	public boolean isPreferredLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(preferredLanguageButton);
-	}
-		
-	public  void clickOnFullNameButton() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(fullNameButton);
-	}
-	
-	public boolean isFullNameTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(fullNameButton);
-	}
-	
-	
-	public  void clickOnDOBButton() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(DOBButton);
-	}
-	
-	public boolean isDOBTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(DOBButton);
-	}
-	
-	public  void clickOnGenderButton() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(genderButton);
-	}
-	
-	public boolean isnGenderTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(genderButton);
-	}
-	
-	public  void clickOnAddressButton() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressButton);
-	}
-	
-	public boolean isAddressTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(addressButton);
-	}
-	
-	public  void clickOnMaritalStatusButton() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(maritalStatusButton);
-	}
-	
-	public boolean isMaritalStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(maritalStatusButton);
-	}
-	
-	public  void clickOnApplicantLanguageButton() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(applicantLanguageButton);
-	}
-	
-	public boolean isApplicantLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(applicantLanguageButton);
-	}
-	
-	public  void clickOnResidenceStatusButton() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(residenceStatusButton);
-	}
-	
-	public boolean isResidenceStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusButton);
-	}
-	
-	public  void clickOnLocationButton() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(locationButton);
-	}
-	
-	public boolean isLocationTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(locationButton);
-	}
-	
-	public  void clickOnPhoneButton() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(phoneButton);
-	}
-	
-	public boolean isPhoneTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(phoneButton);
-	}
-	
-	public  void clickOnEmailButton() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(emailButton);
-	}
-	
-	public boolean isEmailTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailButton);
-	}
-	
-	public  void clickOnIntroducerDetailsButton() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerDetailsButton);
-	}
-	
-	public boolean isIntroducerDetailsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(introducerDetailsButton);
-	}
-	
-	public  void clickOnBiometricsButton() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(biometricsButton);
+
+	public  ConsentPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new ConsentPageEnglish(driver);
 	}
 	
-	public boolean isnBiometricsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(biometricsButton);
+	public boolean isInvalidUINErrorMessageDisplayed() {
+		return isElementDisplayed(invalidUINErrorMessage);
 	}
 	
-	public  void clickOnDocumentsButton() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(documentsButton);
+	public void selectUpdateValue(String page) {
+		List groupLabelList=FetchUiSpec.getAllGroupLabelUsingId(page);
+		for(String title : groupLabelList) {
+				WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+title+"\")"));
+				assertTrue(isElementDisplayed(webelement),"Verify if "+title+" title is displayed in update uin page");
+				clickOnElement(webelement);			
+			}		
 	}
 	
-	public boolean isDocumentsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(documentsButton);
-	}
-
-	public  ConsentPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new ConsentPageKannada(driver);
+	public void selectUpdateIntroducerDetails() {
+		WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getGroupValueUsingId("introducerName")+"\")"));
+		assertTrue(isElementDisplayed(webelement),"Verify if "+FetchUiSpec.getGroupValueUsingId("introducerName")+" title is displayed in update uin page");
+		clickOnElement(webelement);			
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/AcknowledgementPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/AcknowledgementPageTamil.java
index b78b684d4..3f269b940 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/AcknowledgementPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/AcknowledgementPageTamil.java
@@ -3,10 +3,13 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AcknowledgementPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 import regclient.pages.english.RegistrationTasksPageEnglish;
 
 public class AcknowledgementPageTamil extends AcknowledgementPage {
@@ -32,11 +35,6 @@ public class AcknowledgementPageTamil extends AcknowledgementPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"பயோமெட்ரிக்ஸ்\"))")
 	private WebElement biometricsInformationInAcknowledgementPage;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"மக்கள்தொகை விவரங்கள்\"))")
-	private WebElement demographicDetailsTitle;
-	
-	@AndroidFindBy(accessibility = "Sync Packet")
-	private WebElement syncPacketButton;
 	
 	public AcknowledgementPageTamil(AppiumDriver driver) {
 		super(driver);
@@ -72,19 +70,15 @@ public boolean isBiometricsInformationInAcknowledgementPageDisplayed() {
 		return isElementDisplayed(biometricsInformationInAcknowledgementPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageTamil(driver);
-	}
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
+	}	
 	
 	public String getAID() {
 		return getTextFromLocator(applicationID);
 	}
-	
-	public void clickOnSyncPacketButton() {
-		waitTime(10);
-		clickOnElement(syncPacketButton);
-	}
 
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/ApplicantBiometricsPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/ApplicantBiometricsPageTamil.java
index 33545eb83..75c22efa4 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/ApplicantBiometricsPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/ApplicantBiometricsPageTamil.java
@@ -3,14 +3,14 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class ApplicantBiometricsPageTamil extends ApplicantBiometricsPage {
-
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'விண்ணப்பதாரர் பயோமெட்ரிக்ஸ்')]")
-	private WebElement applicantBiometricsPageTitle;
 	
 	@AndroidFindBy(accessibility = "ஐரிஸ் ஊடுகதிர்")
 	private WebElement irisScanButton;
@@ -98,9 +98,7 @@ public class ApplicantBiometricsPageTamil extends ApplicantBiometricsPage {
 	
 	@AndroidFindBy(xpath = "//android.view.View[@content-desc=\"விதிவிலக்குகள்\"]/following-sibling::android.view.View[@content-desc=\"1\"]")
 	private WebElement exceptionCount;
-	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'அங்கீகார பயோமெட்ரிக்ஸ்')]")
-	private WebElement authenticationBiometricsPageTitle;
+
 	
 	public ApplicantBiometricsPageTamil(AppiumDriver driver) {
 		super(driver);
@@ -116,29 +114,29 @@ public  void enterCommentsInTextBox(String comments) {
 	public void clickOnScanButton() {
 		clickOnElement(scanButton);
 	}	
-	
+
 	public void clickOnExceptionTypePermanentButton() {
 		if(!isElementDisplayedOnScreen(permanentButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(permanentButton);
 	}
-	
+
 	public void clickOnExceptionTypeTemporaryButton() {
 		if(!isElementDisplayedOnScreen(temporaryButton)) {
 			swipeOrScroll();
 		}
 		clickOnElement(temporaryButton);	
 	}
-	
+
 	public void markOneEyeException() {
 		clickOnElement(oneEyeException);
 	}
-	
+
 	public void markOneFingureException() {
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(firstFingureExceptionImage);
 		clickOnElement(secondFingureExceptionImage);
@@ -146,105 +144,111 @@ public void markFourFingureExceptionThenRemoveOne() {
 		clickOnElement(forthFingureExceptionImage);
 		clickOnElement(firstFingureExceptionImage);
 	}
-	
+
 	public void clickOnClosePopUp() {
 		clickOnElement(popUpCloseButton);
 	}
-	
+
 	public void clickOnMarkExceptionButton() {
 		clickOnElement(markExceptionButton);
 	}
-	
+
 	public void clickOnIrisScanButton() {
 		clickOnElement(irisScanButton);
 	}
-	
+
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageTamil(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
 	public void clickOnZoomButton() {
 		clickOnElement(zoomButton);
 	}
-	
+
 	public void clickOnIrisScanTitle() {
 		clickOnElement(irisScanButtonTitle);
 	}
-	
+
 	public void clickOnRightHandScanTitle() {
 		clickOnElement(rightHandScanTitle);
 	}
-	
+
 	public void clickOnleftHandScanTitle() {
 		clickOnElement(leftHandScanTitle);
 	}
-	
+
 	public void clickOnThumbsScanTitle() {
 		clickOnElement(thumbsScanTitle);
 	}
-	
+
 	public void closeScanCapturePopUp() {
 		driver.navigate().back();
 	}
-	
+
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageTamil(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  boolean isApplicantBiometricsPageDisplyed() {
-		return isElementDisplayed(applicantBiometricsPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
 	}
-	
+
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricsPageDisplyed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
+	}
+
 	public  boolean isExceptionTypeTitleDisplyed() {
 		return isElementDisplayed(exceptionTypeTitle);
 	}
-	
+
 	public  boolean isRightHandScanTitleDisplyed() {
 		return isElementDisplayed(rightHandScanTitle);
 	}
-	
+
 	public  boolean isLeftHandScanTitleDisplyed() {
 		return isElementDisplayed(leftHandScanTitle);
 	}
-	
+
 	public  boolean isThumbsScanTitleDisplyed() {
 		return isElementDisplayed(thumbsScanTitle);
 	}
-	
+
 	public  boolean isFaceScanTitleDisplyed() {
 		return isElementDisplayed(faceScanTitle);
 	}
-	
+
 	public  boolean isExceptionScanTitleDisplyed() {
 		return isElementDisplayed(exceptionScanTitle);
 	}
-	
+
 	public  boolean isIrisScan() {
 		return isElementDisplayed(irisCapturerHeader,2000);
 	}
-	
+
 	public  boolean isRightHandScan() {
 		return isElementDisplayed(rightHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isLeftHandScan() {
 		return isElementDisplayed(leftHandCapturerHeader,2000);
 	}
-	
+
 	public  boolean isThumbsScan() {
 		return isElementDisplayed(thumbsCapturerHeader,2000);
 	}
-	
+
 	public  boolean isFaceScan() {
 		return isElementDisplayed(faceCapturerHeader,2000);
 	}
-	
+
 	public  boolean isExceptionScan() {
 		return isElementDisplayed(exceptionCapturerHeader,2000);
 	}
-	
+
 	public  boolean isCommentHeaderDisplyed() {
 		return isElementDisplayed(commentsHeader);
 	}
@@ -256,8 +260,4 @@ public  boolean isExceptionCountDisplyed() {
 		}
 		return isElementDisplayed(exceptionCount);
 	}
-	
-	public  boolean isAuthenticationBiometricsPageDisplyed() {
-		return isElementDisplayed(authenticationBiometricsPageTitle);
-	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/BiometricDetailsPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/BiometricDetailsPageTamil.java
index 7170a79a6..7202fa203 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/BiometricDetailsPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/BiometricDetailsPageTamil.java
@@ -1,18 +1,21 @@
 package regclient.pages.tamil;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ApplicantBiometricsPage;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.ApplicantBiometricsPageEnglish;
+import regclient.pages.english.IntroducerBiometricPageEnglish;
+import regclient.pages.english.PreviewPageEnglish;
 
 public class BiometricDetailsPageTamil extends BiometricDetailsPage {
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"விண்ணப்பதாரர் பயோமெட்ரிக்ஸ்\"))")
-	private WebElement applicantBiometricTitle;
 
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"ஐரிஸ் ஊடுகதிர்\"))")
 	private WebElement irisScanIcon;
@@ -37,65 +40,85 @@ public class BiometricDetailsPageTamil extends BiometricDetailsPage {
 	
 	@AndroidFindBy(accessibility = "தொடர்க")
 	private WebElement continueButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"அங்கீகார பயோமெட்ரிக்ஸ்\"))")
-	private WebElement authenticationBiometricTitle;
+
 
 	public BiometricDetailsPageTamil(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public  boolean isBiometricDetailsPageDisplayed() {
-		return isElementDisplayed(applicantBiometricTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualBiometrics") + "\"))")));
+	}
+		
+	@SuppressWarnings("deprecation")
+	public  boolean isAuthenticationBiometricTitleDisplayed() {
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("individualAuthBiometrics") + "\"))")));
 	}
-
-	
 	
 	public ApplicantBiometricsPage clickOnIrisScan() {
 		clickOnElement(irisScanIcon);
-		return new ApplicantBiometricsPageTamil(driver);
-	}
-	
-	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
-		while(!isElementDisplayedOnScreen(introducerIrisScanIcon)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerIrisScanIcon);
-		return new IntroducerBiometricPageTamil(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnRightHandScanIcon() {
 		clickOnElement(rightHandScanIcon);
-		return new ApplicantBiometricsPageTamil(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnLeftHandScanIcon() {
 		clickOnElement(leftHandScanIcon);
-		return new ApplicantBiometricsPageTamil(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnThumbsScanIcon() {
 		clickOnElement(thumbsScanIcon);
-		return new ApplicantBiometricsPageTamil(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnFaceScanIcon() {
 		clickOnElement(faceScanIcon);
-		return new ApplicantBiometricsPageTamil(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
 	}
 	
 	public ApplicantBiometricsPage clickOnExceptionScanIcon() {
 		clickOnElement(exceptionScanIcon);
-		return new ApplicantBiometricsPageTamil(driver);
+		return new ApplicantBiometricsPageEnglish(driver);
+
 	}
 	
-	public  PreviewPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new PreviewPageTamil(driver);
+	public IntroducerBiometricPage clickOnIntroducerIrisScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Iris Scan\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
 	}
 	
-	public  boolean isAuthenticationBiometricTitleDisplayed() {
-		return isElementDisplayed(authenticationBiometricTitle);
+	public IntroducerBiometricPage clickOnIntroducerRightHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Right\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerLeftHandScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Left\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
+	}
+	
+	public IntroducerBiometricPage clickOnIntroducerThumbScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Thumbs\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
+
 	}
+	
+	public IntroducerBiometricPage clickOnIntroducerFaceScan() {
+		clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc,\"" + FetchUiSpec.getValueUsingId("introducerBiometrics") + "\")]/following-sibling::android.view.View/descendant::android.view.View/descendant::android.widget.ImageView[@content-desc=\"Face\"]")));
+		return new IntroducerBiometricPageEnglish(driver);
 
+	}
+	
+	public  PreviewPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new PreviewPageEnglish(driver);
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/ConsentPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/ConsentPageTamil.java
index 457df3477..d53a4c085 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/ConsentPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/ConsentPageTamil.java
@@ -3,62 +3,56 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.RegistrationTasksPage;
+import regclient.pages.english.DemographicDetailsPageEnglish;
+import regclient.pages.english.RegistrationTasksPageEnglish;
 
 
 public class ConsentPageTamil extends ConsentPage{
 
-	@AndroidFindBy(accessibility = "ஒப்புதல்")
-	private WebElement consentPage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().className(\"android.widget.CheckBox\"))")
-	private WebElement termAndConditionCheckBox;
-
 	@AndroidFindBy(accessibility = "அறிந்தவர்")
 	private WebElement informedButton;
 	
 	@AndroidFindBy(accessibility = "ரத்துசெய்")
 	private WebElement cancelButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"நான் என் பி ஐ ஐ ஐப் பகிர்ந்து கொள்வதற்கான விதிமுறைகளையும் நிபந்தனைகளையும் படித்து ஏற்றுக்கொண்டேன்\"))")
-	private WebElement checkBoxDiscription;
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"UIN ஐப் புதுப்பிக்கவும்\"))")
-	private WebElement updateUINTitle;
-
-	
 	public ConsentPageTamil(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isConsentPageDisplayed() {
-		return isElementDisplayed(consentPage);
+			return isElementDisplayed(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));		
 	}
 
-
+	@SuppressWarnings("deprecation")
 	public boolean isCheckBoxReadable() {
-		return isElementDisplayed(checkBoxDiscription);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getValueUsingId("consent") + "\"))")));
 	}
-
+	
 	public  boolean isInformedButtonEnabled() {
 		return isElementEnabled(informedButton);
 	}
 
 	public  DemographicDetailsPage clickOnInformedButton() {
 		clickOnElement(informedButton);
-		return new DemographicDetailsPageTamil(driver);
+		return new DemographicDetailsPageEnglish(driver);
 	}
 
-	
+
 	public RegistrationTasksPage clickOnCancelButton() {
 		clickOnElement(cancelButton);
-		return new  RegistrationTasksPageTamil(driver);
+		return new  RegistrationTasksPageEnglish(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
+	
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/DemographicDetailsPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/DemographicDetailsPageTamil.java
index 8e251d4b9..b90d0396f 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/DemographicDetailsPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/DemographicDetailsPageTamil.java
@@ -1,467 +1,291 @@
 package regclient.pages.tamil;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
+import regclient.page.BasePage;
 import regclient.page.ConsentPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.DocumentUploadPage;
 import regclient.pages.english.ConsentPageEnglish;
 import regclient.pages.english.DocumentuploadPageEnglish;
+import regclient.utils.TestDataReader;
 
 
 public class DemographicDetailsPageTamil extends DemographicDetailsPage{
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"முழு பெயர்\"))")
-	private WebElement demographicDetailspage;
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"ஒப்புதல்\"))")
-	private WebElement consentTitle;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
-	private WebElement fullNameTextBox;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
-	private WebElement fullNameTextBoxSecondLanguage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(2)")
-	private WebElement ageTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"நிரந்தர முகவரி1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine1TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"தற்காலிக முகவரி\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine2TextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"தற்காலிக முகவரி3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement addressLine3TextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"நிரந்தர முகவரி1\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine1TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"தற்காலிக முகவரி\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine2TextBoxSecondLangauge;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"தற்காலிக முகவரி3\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement addressLine3TextBoxSecondLangauge;
-
 	@AndroidFindBy(accessibility = "ஆண்")
 	private WebElement maleButton;
 
 	@AndroidFindBy(accessibility = "பெண்")
 	private WebElement femaleButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"சிவில் நிலை\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectMaritalStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"குடியிருப்பு நிலை\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectResidentStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"பிராந்தியம்\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectRegionStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"மாகாணம்\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectProvinceStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"நகரம்\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectCityStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"மண்டலம்\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectZoneStatus;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"அஞ்சல்\")]/parent::android.view.View/parent::android.widget.Button")
-	private WebElement selectPostal;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"14022\")")
-	private WebElement selectPostalCode;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"வெளிநாட்டவர் அல்லாதவர்\")")
-	private WebElement nonForeignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"வெளிநாட்டவர்\")")
-	private WebElement foreignerValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ஒற்றை\")")
-	private WebElement singleValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ரபத் சேல் கெனிட்ரா\")")
-	private WebElement rabatSaleKenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"கெனிட்ரா\")]")
-	private WebElement kenitraValueFromDropdown;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"ரபாத்\")]")
-	private WebElement rabatValueFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"பென் மன்சூர்\")")
-	private WebElement benMansourFromDropdown;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"குடியிருப்பு நிலை\")")
-	private WebElement residenceStatusHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"பிராந்தியம்\")")
-	private WebElement regionHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"மாகாணம்\")")
-	private WebElement provinceHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"நகரம்\")")
-	private WebElement cityHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"மண்டலம்\")")
-	private WebElement zoneHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"அஞ்சல்\")")
-	private WebElement postalCodeHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"தொலைபேசி\")")
-	private WebElement mobileNumberHeader;
-
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"மின்னஞ்சல்\")")
-	private WebElement emailHeader;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"அறிமுகம் பெயர்\")")
-	private WebElement introducerNameHeader;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"அறிமுகம் RID\")")
-	private WebElement introducerRidHeader;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"தொலைபேசி\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText")
-	private WebElement mobileNumberTextBox;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"மின்னஞ்சல்\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement emailIdTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"அறிமுகம் பெயர்\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerNameTextBox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"அறிமுகம் பெயர்\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")
-	private WebElement introducerNameTextBoxSecondLangauge;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"அறிமுகம் RID\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")
-	private WebElement introducerRidTextBox;
-
 	@AndroidFindBy(accessibility = "தொடர்க")
 	private WebElement continueButton;
 	
 	@AndroidFindBy(accessibility = "ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್")
 	private WebElement errorMessageInvalidInputText;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement calenderIcon;
 
 	@AndroidFindBy(accessibility = "ஸ்க்ரிம்")
 	private WebElement backgroundScreen;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB\")]/parent::android.view.View/following-sibling::android.view.View")
-	private WebElement getSelectedDate;
+	@AndroidFindBy(accessibility = "FETCH DATA")
+	private WebElement fetchDataButton;
 	
-
 	public DemographicDetailsPageTamil(AppiumDriver driver) {
 		super(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isDemographicDetailsPageDisplayed() {
+		WebElement  demographicDetailspage = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))"));
 		return isElementDisplayed(demographicDetailspage);
 	}
-	
+
 	public boolean isErrorMessageInvalidInputTextDisplayed() {
 		return isElementDisplayed(errorMessageInvalidInputText);
 	}
-	
+
+	@SuppressWarnings("deprecation")
 	public  ConsentPage clickOnConsentPageTitle() {
+		WebElement  consentTitle = findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("consentdet") + "\"))"));
 		clickOnElement(consentTitle);
 		return new ConsentPageEnglish(driver);
 	}
 
-	public  void enterFullName(String fullName) {
-		clickAndsendKeysToTextBox(fullNameTextBox,fullName);
-	}
-
-	public  void enterAddressLine1(String addressLine1) {
-		if(!isElementDisplayedOnScreen(addressLine1TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine1TextBox,addressLine1);
-	}
-
-	public  void enterAddressLine2(String addressLine2) {
-		if(!isElementDisplayedOnScreen(addressLine2TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine2TextBox,addressLine2);
-	}
-
-	public  void enterAddressLine3(String addressLine3) {
-		if(!isElementDisplayedOnScreen(addressLine3TextBox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(addressLine3TextBox,addressLine3);
-	}
-
-	public  void enterAge(String age) {
-		clickAndsendKeysToTextBox(ageTextBox,age);
-	}
-
-	public boolean checkFullNameSecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(fullNameTextBoxSecondLanguage)==null || getTextFromLocator(fullNameTextBoxSecondLanguage)=="" )
-			return	false;
-		else
-			return	true;
-	}
-
-	public boolean isResidenceStatusHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(residenceStatusHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusHeader);
-	}
-
-	public boolean isRegionHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(regionHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(regionHeader);
-	}
-
-	public boolean isProvinceHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(provinceHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(provinceHeader);
-	}
-
-	public boolean isCityHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(cityHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(cityHeader);
-	}
-
-	public boolean isPostalCodeHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(postalCodeHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(postalCodeHeader);
-	}
-
-	public boolean isMobileNumberHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(mobileNumberHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(mobileNumberHeader);
-	}
-
-	public boolean isZoneHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(zoneHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(zoneHeader);
-	}
+	public  DocumentUploadPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new DocumentuploadPageEnglish(driver);
 
-	public boolean isEmailHeaderDisplayed() {
-		while(!isElementDisplayedOnScreen(emailHeader)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailHeader);
 	}
 	
-	public boolean isIntroducerNameHeaderDisplayed() {
-		return isElementDisplayed(introducerNameHeader);
-	}
-	
-	public boolean isIntroducerRidHeaderDisplayed() {
-		return isElementDisplayed(introducerRidHeader);
-	}
-
-	public  void selectGender(String gender) {
-		if(gender.equalsIgnoreCase("male"))
-			clickOnElement(maleButton);
-		if(gender.equalsIgnoreCase("female"))
-			clickOnElement(femaleButton);
-	}
-
-	public  void selectMaritalStatus() {
-		clickOnElement(selectMaritalStatus);
-		if(!isElementDisplayedOnScreen(singleValueFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectMaritalStatus);
-			clickOnElement(singleValueFromDropdown);
-		}else
-			clickOnElement(singleValueFromDropdown);
-	}
-
-	public  void selectResidenceStatus(String ResidenceStatus) {
-		clickOnElement(selectResidentStatus);
-		if(ResidenceStatus.equalsIgnoreCase("Foreigner")) {
-			if(!isElementDisplayedOnScreen(foreignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(foreignerValueFromDropdown);
-			}else
-				clickOnElement(foreignerValueFromDropdown);
-		}else {
-			if(!isElementDisplayedOnScreen(nonForeignerValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectResidentStatus);
-				clickOnElement(nonForeignerValueFromDropdown);
-			}else
-				clickOnElement(nonForeignerValueFromDropdown);
+	public  boolean isContinueButtonEnable() {
+		return isElementEnabled(continueButton);
+
+	}
+
+	public boolean isPreRegFetchDataTextBoxDisplay() {
+		return isElementDisplayed(fetchDataButton);
+	}
+
+	public void fillDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}
+				else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(3);
+					while(!isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"))) {
+						swipeOrScroll();
+					}
+					boolean isdisplayed =isElementDisplayed(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")"));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(3);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("")){	
+					if(!isElementDisplayed(maleButton)) {
+						swipeOrScroll();
+						clickOnElement(maleButton);		
+					}else
+						clickOnElement(maleButton);		
+
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			else if(id.equals("residenceStatus")) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("dropdown") &&  FetchUiSpec.getFormatUsingId(id).equals("none")){	
+					waitTime(2);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					WebElement dropdownElement=findElement(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button"));
+					clickOnElement(dropdownElement);
+					waitTime(2);
+					if(!isElementDisplayed(dropdownElement)) {				
+						clickOnElement(findElement(By.className("android.view.View")));
+					}else if(isElementDisplayed(dropdownElement))  {
+						swipeOrScroll();
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+					waitTime(2);
+					if(isElementDisplayed(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.widget.Button[contains(@content-desc, \"Select Option\")]"))) {
+						clickOnElement(dropdownElement);
+						waitTime(2);
+						clickOnElement(findElement(By.className("android.view.View")));
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
 		}
-
 	}
 
-	public  void selectRegionStatus(String region) {
-		clickOnElement(selectRegionStatus);
-		if(region.equalsIgnoreCase("Rabat Sale Kenitra")) {
-			if(!isElementDisplayedOnScreen(rabatSaleKenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectRegionStatus);
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
-			}else {
-				clickOnElement(rabatSaleKenitraValueFromDropdown);
+	public void editDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+					if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+						assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+				}else if(FetchUiSpec.getControlTypeUsingId(id).equals("ageDate")){
+					waitTime(3);
+					boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+					assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+					if(age.equals("adult"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"20");
+					else if(age.equals("minor"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"12");
+					else if(age.equals("infant"))
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.widget.EditText[1]")),"4");
+					else if(age.equals("currentCalenderDate")) {
+						waitTime(1);
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View")));		
+						waitTime(1);
+						clickOnElement(backgroundScreen);
+						waitTime(1);
+						assertTrue(checkDateFormatAndCurrectDate(id),"Verify date format and current date and time while selecting age date");
+					}
+				}
+			}
+			if(id.equals("introducerName") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerRID") && FetchUiSpec.getFlowType().equals("newProcess")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("RID"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
 			}
 		}
-
 	}
 
-	public  void selectProvinceStatus(String province) {
-		clickOnElement(selectProvinceStatus);
-		if(province.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(province.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectProvinceStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectCityStatus(String city) {
-		clickOnElement(selectCityStatus);
-		if(city.equalsIgnoreCase("Kenitra"))
-			if(!isElementDisplayed(kenitraValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(kenitraValueFromDropdown);
-			}else
-				clickOnElement(kenitraValueFromDropdown);
-		if(city.equalsIgnoreCase("Rabat"))
-			if(!isElementDisplayed(rabatValueFromDropdown)) {
-				swipeOrScroll();
-				clickOnElement(selectCityStatus);
-				clickOnElement(rabatValueFromDropdown);
-			}else
-				clickOnElement(rabatValueFromDropdown);
-	}
-
-	public  void selectZoneStatus() {
-		clickOnElement(selectZoneStatus);
-		if(!isElementDisplayedOnScreen(benMansourFromDropdown)) {
-			swipeOrScroll();
-			clickOnElement(selectZoneStatus);
-			clickOnElement(benMansourFromDropdown);
-		}else
-			clickOnElement(benMansourFromDropdown);
-	}
-
-	public  void selectPostalStatus() {
-		clickOnElement(selectPostal);
-		if(!isElementDisplayedOnScreen(selectPostalCode)) {
-			swipeOrScroll();
-			clickOnElement(selectPostal);
-			clickOnElement(selectPostalCode);
-		}else
-			clickOnElement(selectPostalCode);
-	}
-
-	public  DocumentUploadPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new DocumentuploadPageEnglish(driver);
-
-	}
-
-	public  void enterMobileNumber(String mobileNumber) {
-		if(!isElementDisplayedOnScreen(mobileNumberTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-		}else
-		clickAndsendKeysToTextBox(mobileNumberTextBox,mobileNumber);
-	}
-
-	public  void enterEmailID(String EmailID) {
-		if(!isElementDisplayedOnScreen(emailIdTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-		}else
-		clickAndsendKeysToTextBox(emailIdTextBox,EmailID);
-	}
-	
-	public  void enterIntroducerName(String introducerName) {
-		if(!isElementDisplayedOnScreen(introducerNameTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-		}else
-		clickAndsendKeysToTextBox(introducerNameTextBox,introducerName);
-	}
-	
-	public  void enterIntroducerRid(String introducerRid) {
-		if(!isElementDisplayedOnScreen(introducerRidTextBox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-		}else
-		clickAndsendKeysToTextBox(introducerRidTextBox,introducerRid);
-	}
-	
-	public  void selectCurrentCalenderDate() {
-		clickOnElement(calenderIcon);		
-	}
-	
-	public  void closeCalender() {
-		clickOnElement(backgroundScreen);		
-	}
-	
-	public  boolean checkDateFormatAndCurrectDate() {
-		getTextFromLocator(getSelectedDate);
-		if(getTextFromLocator(getSelectedDate).equalsIgnoreCase(getCurrentDate())) 
-			return	true;
-		else
-			return false;
-	}
-	
-	public boolean checkAddress1SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine1TextBoxSecondLangauge)==null || getTextFromLocator(addressLine1TextBoxSecondLangauge)=="" )
+	public boolean checkSecondLanguageTextBoxNotNull(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))==null || getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[2]")))=="" )
 			return	false;
 		else
 			return	true;
 	}
 
-	public boolean checkAddress2SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine2TextBoxSecondLangauge)==null || getTextFromLocator(addressLine2TextBoxSecondLangauge)=="" )
-			return	false;
-		else
-			return	true;
-	}
-
-	public boolean checkAddress3SecondLanguageTextBoxNotNull() {
-		if(getTextFromLocator(addressLine3TextBoxSecondLangauge)==null || getTextFromLocator(addressLine3TextBoxSecondLangauge)=="" )
-			return	false;
-		else
+	public  boolean checkDateFormatAndCurrectDate(String id) {
+		if(getTextFromLocator(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+ FetchUiSpec.getValueUsingId(id) +"\")]/parent::android.view.View/following-sibling::android.view.View"))).equalsIgnoreCase(getCurrentDate())) 
 			return	true;
-	}
-
-	public boolean checkIntroducerNameTextBoxSecondLangaugeTextBoxNotNull() {
-		if(getTextFromLocator(introducerNameTextBoxSecondLangauge)==null || getTextFromLocator(introducerNameTextBoxSecondLangauge)=="" )
-			return	false;
 		else
-			return	true;
+			return false;
 	}
 	
+	public void fillIntroducerDetailsInDemographicDetailsPage(String age) {
+		List idList=FetchUiSpec.getAllIds("DemographicDetails");
+		for(String id : idList) {
+			if(id.equals("introducerName")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),BasePage.generateData(FetchUiSpec.getTextBoxUsingId(id)));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}if(id.equals("introducerUIN")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					if(FetchUiSpec.getControlTypeUsingId(id).equals("textbox")) {
+						waitTime(3);
+						boolean isdisplayed =isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId(id)+"\")")));
+						assertTrue(isdisplayed,"Verify if "+id+" header is displayed");
+						clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \"" + FetchUiSpec.getValueUsingId(id) + "\")]/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.EditText[1]")),TestDataReader.readData("UINminor"));
+						if(FetchUiSpec.getTransliterateTypeUsingId(id)) 
+							assertTrue(checkSecondLanguageTextBoxNotNull(id),"Verify if "+id+" is enter in second language text box");
+					}
+				}
+			}
+		}
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/DocumentuploadPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/DocumentuploadPageTamil.java
index 3e8d1a0df..2af1474d4 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/DocumentuploadPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/DocumentuploadPageTamil.java
@@ -1,263 +1,183 @@
 package regclient.pages.tamil;
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.CameraPage;
 import regclient.page.DocumentUploadPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
+import regclient.pages.english.DocumentuploadPageEnglish;
 
 public class DocumentuploadPageTamil extends DocumentUploadPage {
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"ஆவணப் பதிவேற்றம்\"))")
-	private WebElement doccumentUploadPage;
-
-	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.Button\")")
-	private WebElement identityProofScanButton;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"முகவரி சான்று\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement addressProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"அடையாளச் சான்று\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement identityProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"உறவு சான்று\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement relationshipProofSelectValue;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB சான்று\")]/parent::android.view.View/parent::android.view.View")
-	private WebElement dobProofSelectValue;
-
 	@AndroidFindBy(accessibility = "ஸ்க்ரிம்")
 	private WebElement PopUpCloseButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"முகவரி சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonAddressProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"அடையாளச் சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonIdentityProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonDobProof;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"உறவு சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")
-	private WebElement scanButtonRelationshipProof;
-
 	@AndroidFindBy(accessibility = "முந்தைய பக்கம்")
 	private WebElement backButton;
 
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"முகவரி சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView")
-	private WebElement previewCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"முகவரி சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[2]")
-	private WebElement previewSecondCaptureImage;
-
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"முகவரி சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.view.View/descendant::android.widget.ImageView[3]")
-	private WebElement previewThirdCaptureImage;
-
 	@AndroidFindBy(accessibility = "தொடர்க")
 	private WebElement continueButton;
 
 	@AndroidFindBy(accessibility = "அழி")
 	private WebElement deleteButton;
 
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"DOB சான்று\"))")
-	private WebElement dobsHeader;
-
 	@AndroidFindBy(xpath = "//android.widget.ImageView")
 	private WebElement captureImage;
 	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"முகவரி சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement addressProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"அடையாளச் சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement identityProofReferenceNumberTextbox;
-	
-	@AndroidFindBy(xpath = "//android.view.View[contains(@content-desc, \"DOB சான்று\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")
-	private WebElement dobProofReferenceNumberTextbox;
+	@AndroidFindBy(accessibility = "சேமிக்கவும்")
+	private WebElement saveButton;
+
+	@AndroidFindBy(accessibility = "ரீடேக்")
+	private WebElement retakeButton;
 
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.view.View\").instance(8)")
+	private WebElement imageleftCorner;
 
 	public DocumentuploadPageTamil(AppiumDriver driver) {
 		super(driver);
 	}
 
-	public void selectAddressProof() {
-		while(!isElementDisplayedOnScreen(addressProofSelectValue) || !isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(addressProofSelectValue);	
-		}
-	}
-
-	public void selectIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofSelectValue)|| !isElementDisplayedOnScreen(scanButtonIdentityProof) ) {
-			swipeOrScroll();
-		}
-		clickOnElement(identityProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(identityProofSelectValue);	
-		}
-	}
-
-	public void selectDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofSelectValue) || !isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(dobProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(dobProofSelectValue);	
-		}
-	}
-
-	public void selectRelationshipProof() {
-		while(!isElementDisplayedOnScreen(relationshipProofSelectValue) || !isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(relationshipProofSelectValue);
-		if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
-			swipeOrScroll();
-			clickOnElement(relationshipProofSelectValue);	
-		}
-	}
-
-	public void selectOnCaptureImage() {
-		clickOnElement(previewCaptureImage);
-	}
-
-	public void closePopUpClose() {
-		clickOnElement(PopUpCloseButton);
-	}
-
-	public CameraPage clickOnAddressProofScanButton() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonAddressProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonDobProof() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonDobProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonIdentityProof() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonIdentityProof);
-		return new CameraPage(driver);
-	}
-
-	public CameraPage clickOnScanButtonRelationshipProof() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		clickOnElement(scanButtonRelationshipProof);
-		return new CameraPage(driver);
-	}
-
-	public void clickOnBackButton() {
-		clickOnElement(backButton);
-
-	}
-
-	public void clickOnDeleteButton() {
-		clickOnElement(deleteButton);
-
-	}
-
 	public  BiometricDetailsPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new BiometricDetailsPageTamil(driver);
-	}
-
-	public  boolean isImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(captureImage);
-	}
-
-	public  boolean isSecondImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewSecondCaptureImage);
-	}
-
-	public  boolean isThirdImageDisplyed() {
-		waitTime(1);
-		return isElementDisplayed(previewThirdCaptureImage);
-	}
-
-	public  boolean isDeleteButtonDisplyed() {
-		if(!isElementDisplayedOnScreen(deleteButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(deleteButton);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 
+	@SuppressWarnings("deprecation")
 	public boolean isDoccumentUploadPageDisplayed() {
-		return isElementDisplayed(doccumentUploadPage);
-	}
-
-	public boolean isDobHeaderDisplayed() {
-		return isElementDisplayed(dobsHeader);
-	}
-
-	public  boolean isScanButtonAddressProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonAddressProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonAddressProof);
-	}
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("Documents") + "\"))")));
+	}
+
+	public  DocumentUploadPage clickOnSaveButton() {
+		clickOnElement(saveButton);
+		return new DocumentuploadPageEnglish(driver);
+	}
+
+	public boolean isRetakeButtonDisplayed() {
+		return isElementDisplayed(retakeButton);
+	}
+
+	public void cropCaptureImage() {
+		isElementDisplayed(captureImage);
+		cropCaptureImage(imageleftCorner);
+	}
+
+	public void uploadDoccuments(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(FetchUiSpec.getRequiredTypeUsingId(id)) {
+				if(type.equalsIgnoreCase("ReferenceNumber")) {
+					clickAndsendKeysToTextBox(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.EditText")),"1234567890");
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}else {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+					assertTrue(isDoccumentUploadPageDisplayed(),"Verify if doccumentupload page is displayed after upload of "+FetchUiSpec.getValueUsingId(id));
+				}
+			}
+		}
+
+	}
+	public void uploadDoccumentsUpdate(String age,String type) {
+		List idList=FetchUiSpec.getAllIds("Documents");
+		for(String id : idList) {
+			if(type.equals("all") && !id.equals("proofOfException") && !id.equals("proofOfRelationship")) {
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+					swipeOrScroll();
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+				}
+				clickOnElement(PopUpCloseButton);
+				waitTime(1);
+				boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+				clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+				CameraPage cameraPage=new CameraPage(driver);
+				cameraPage.clickimage();
+				cameraPage.clickOkButton();
+				assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+				cropCaptureImage();
+				clickOnSaveButton();
+			}if(id.equals("proofOfRelationship")) {
+				if(age.equals("minor") ||  age.equals("infant") ||  age.equals("currentCalenderDate")) {
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					if(!isElementDisplayedOnScreen(PopUpCloseButton)) {
+						swipeOrScroll();
+						clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View")));
+					}
+					clickOnElement(PopUpCloseButton);
+					waitTime(1);
+					boolean isEnabled = isElementEnabled(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					assertTrue(isEnabled,"Verify if scan  button enabled for "+FetchUiSpec.getValueUsingId(id));
+					clickOnElement(findElementWithRetry(By.xpath("//android.view.View[contains(@content-desc, \""+FetchUiSpec.getValueUsingId(id)+"\")]/parent::android.view.View/parent::android.view.View/following-sibling::android.widget.Button")));
+					CameraPage cameraPage=new CameraPage(driver);
+					cameraPage.clickimage();
+					cameraPage.clickOkButton();
+					assertTrue(isRetakeButtonDisplayed(),"Verify if retake  button displayed");
+					cropCaptureImage();
+					clickOnSaveButton();
+				}
+			}
 
-	public  boolean isScanButtonIdentityProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonIdentityProof)) {
-			swipeOrScroll();
 		}
-		return isElementEnabled(scanButtonIdentityProof);
 	}
-
-	public  boolean isScanButtonDobProofEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonDobProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonDobProof);
-	}
-
-	public  boolean isScanButtonRelationshipProoffEnabled() {
-		if(!isElementDisplayedOnScreen(scanButtonRelationshipProof)) {
-			swipeOrScroll();
-		}
-		return isElementEnabled(scanButtonRelationshipProof);
-	}
-	
-	public  void enterReferenceNumberInAdressProof() {
-		if(!isElementDisplayedOnScreen(addressProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-			clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-		}else
-		clickAndsendKeysToTextBox(addressProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInIdentityProof() {
-		while(!isElementDisplayedOnScreen(identityProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(identityProofReferenceNumberTextbox,"1234567890");
-	}
-	
-	public  void enterReferenceNumberInDobProof() {
-		while(!isElementDisplayedOnScreen(dobProofReferenceNumberTextbox)) {
-			swipeOrScroll();
-		}
-		clickAndsendKeysToTextBox(dobProofReferenceNumberTextbox,"1234567890");
-	}
-
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/IntroducerBiometricPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/IntroducerBiometricPageTamil.java
index 4b5c80708..5c113d43f 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/IntroducerBiometricPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/IntroducerBiometricPageTamil.java
@@ -3,15 +3,15 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.BiometricDetailsPage;
 import regclient.page.IntroducerBiometricPage;
+import regclient.pages.english.BiometricDetailsPageEnglish;
 
 public class IntroducerBiometricPageTamil extends IntroducerBiometricPage {
 	
-	@AndroidFindBy(xpath = "//*[contains(@content-desc, 'அறிமுகம் பயோமெட்ரிக்ஸ்')]")
-	private WebElement introducerBiometricPageTitle;
-	
 	@AndroidFindBy(accessibility = "ஐரிஸ் ஊடுகதிர்")
 	private WebElement irisScanButton;
 	
@@ -102,7 +102,7 @@ public void clickOnIrisScanButton() {
 	
 	public BiometricDetailsPage clickOnNextButton() {
 		clickOnElement(nextButton);
-		return new BiometricDetailsPageTamil(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
 	public void clickOnZoomButton() {
@@ -127,11 +127,12 @@ public void closeScanCapturePopUp() {
 	
 	public BiometricDetailsPage clickOnBackButton() {
 		driver.navigate().back();
-		return new BiometricDetailsPageTamil(driver);
+		return new BiometricDetailsPageEnglish(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public  boolean isIntroducerBiometricsPageDisplyed() {
-		return isElementDisplayed(introducerBiometricPageTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getValueUsingId("introducerBiometrics")+"\")")));
 	}
 	
 	public  boolean isExceptionTypeTitleDisplyed() {
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/LoginPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/LoginPageTamil.java
index 023636590..f23c4446e 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/LoginPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/LoginPageTamil.java
@@ -1,5 +1,7 @@
 package regclient.pages.tamil;
 
+import java.time.Duration;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
@@ -71,6 +73,7 @@ public  void clickOnBackButton() {
 	}
 
 	public  void enterPassword(String password) {
+		retryFindElement(passwordTextBox,Duration.ofSeconds(10));
 		clickAndsendKeysToTextBox(passwordTextBox,password);
 	}
 
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/ManageApplicationsPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/ManageApplicationsPageTamil.java
index e982e13a7..e46bdedf8 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/ManageApplicationsPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/ManageApplicationsPageTamil.java
@@ -86,7 +86,7 @@ public boolean isSearchAIDDisplayed(String AID) {
 		waitTime(2);
 		return isElementDisplayed(driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]")));
 	}
-	
+
 	public boolean isZeroApplicationDisplayed() {
 		waitTime(2);
 		return isElementDisplayed(displayZeroApplication);
@@ -94,18 +94,24 @@ public boolean isZeroApplicationDisplayed() {
 
 	public  void clickOnUploadButton() {
 		clickOnElement(uploadButton);
-		waitTime(20);
+		waitTime(10);
 	}
 
 	public boolean isPacketUploadDone(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
-		if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
-			return false;
+		if(element.getAttribute("contentDescription").contains("NOT UPLOADED")) {
+			waitTime(10);
+			element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+			if(element.getAttribute("contentDescription").contains("NOT UPLOADED"))
+				return false;
+			else
+				return true;
+		}
 		else
 			return true;
 	}
-	
+
 	public boolean isPacketApproved(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -114,7 +120,7 @@ public boolean isPacketApproved(String AID) {
 		else
 			return false;
 	}
-	
+
 	public boolean isPacketSynned(String AID) {
 		waitTime(2);
 		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
@@ -123,6 +129,15 @@ public boolean isPacketSynned(String AID) {
 		else
 			return false;
 	}
+	
+	public boolean isPacketRejected(String AID) {
+		waitTime(2);
+		WebElement element =driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'"+AID+"')]"));
+		if(element.getAttribute("contentDescription").contains("REJECTED"))
+			return true;
+		else
+			return false;
+	}
 
 	public  void clickClientStatusDropdown() {
 		clickOnElement(clientStatusDropdown);
@@ -163,21 +178,21 @@ public  void clickDismissButton() {
 	public  void clickOnSearchCheckBox() {
 		clickOnElement(searchCheckBoxButton);
 	}
-	
+
 	public  void selectApprovedValueDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(approvedOption);
 	}	
-	
+
 	public  void selectSyncedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(syncedOption);
 	}
-	
+
 	public  void selectUploadedOptionDropdown() {
 		clickOnElement(clientStatusDropdown);
 		clickOnElement(uploadedOption);
-		
+
 	}
 
 	public boolean isReceivedDropdownOptionDisplayed() {
@@ -195,9 +210,8 @@ public boolean isAcceptedDropdownOptionDisplayed() {
 	public boolean isDeletionDropdownOptionDisplayed() {
 		return isElementDisplayed(deletionValueDropdown);
 	}
-	
+
 	public void clickOnBackButton() {
 		driver.navigate().back();
 	}
-
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/OperationalTaskPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/OperationalTaskPageTamil.java
index 115379b51..ea74b6ba0 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/OperationalTaskPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/OperationalTaskPageTamil.java
@@ -22,6 +22,9 @@ public class OperationalTaskPageTamil extends OperationalTaskPage{
 	@AndroidFindBy(accessibility = "விண்ணப்பப் பதிவேற்றம்")
 	private WebElement applicationUploadTitle;
 	
+	@AndroidFindBy(accessibility = "நிலுவையிலுள்ள ஒப்புதல்")
+	private WebElement pendingApprovalTitle;
+	
 	public OperationalTaskPageTamil(AppiumDriver driver) {
 		super(driver);
 	}
@@ -60,5 +63,16 @@ public boolean isApplicationUploadTitleDisplayed() {
 		}
 		return isElementDisplayed(applicationUploadTitle);
 	}
+	
+	public  void clickPendingApprovalTitle() {
+		clickOnElement(pendingApprovalTitle);
+	}
+	
+	public boolean isPendingApprovalTitleDisplayed() {
+		if(!isElementDisplayedOnScreen(pendingApprovalTitle)) {
+			swipeOrScroll();
+		}
+		return isElementDisplayed(pendingApprovalTitle);
+	}
 
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/PendingApprovalTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/PendingApprovalTamil.java
new file mode 100644
index 000000000..e5136a7a3
--- /dev/null
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/PendingApprovalTamil.java
@@ -0,0 +1,161 @@
+/**
+ * 
+ */
+package regclient.pages.tamil;
+
+import static org.testng.Assert.assertTrue;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.page.PendingApproval;
+
+public class PendingApprovalTamil extends PendingApproval{
+
+	@AndroidFindBy(accessibility = "நிலுவையிலுள்ள ஒப்புதல்")
+	private WebElement pendingApprovalTitle;
+
+	@AndroidFindBy(accessibility = "ஒப்புதல்")
+	private WebElement approveButton;
+
+	@AndroidFindBy(accessibility = "ஸ்க்ரிம்")
+	private WebElement backGroundScreen;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.CheckBox\").instance(0)")
+	private WebElement searchCheckBoxButton;
+
+	@AndroidFindBy(accessibility = "சமர்ப்பிக்கவும்")
+	private WebElement submitButton;
+
+	@AndroidFindBy(accessibility = "மேற்பார்வையாளரின் அங்கீகாரம்")
+	private WebElement supervisorAuthenticationTitle;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(0)")
+	private WebElement userNameTextBox;
+
+	@AndroidFindBy(uiAutomator = "UiSelector().className(\"android.widget.EditText\").instance(1)")
+	private WebElement passwordTextBox;
+	
+	@AndroidFindBy(xpath = "//*[contains(@content-desc,\"நிலுவையிலுள்ள ஒப்புதல்\")]//preceding-sibling::android.widget.Button")
+	private WebElement backButton;
+	
+	@AndroidFindBy(accessibility = "REJECT")
+	private WebElement rejectButton;
+	
+	@AndroidFindBy(accessibility = "Sl.no Application ID Reg. Date Client Status Review Status Operator ID")
+	private WebElement pageAttributes ;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"CREATED\")")
+	private WebElement clientStatus;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Pending\").instance(1)")
+	private WebElement reviewStatus;
+	
+	@AndroidFindBy(xpath = "//android.widget.EditText")
+	private WebElement applicationIdTextbox;
+	
+	@AndroidFindBy(accessibility = "Reject Packet?")
+	private WebElement rejectPacketTitle;
+	
+	@AndroidFindBy(accessibility = "Please select a value")
+	private WebElement rejectReasonDropdown;
+
+	public PendingApprovalTamil(AppiumDriver driver) {
+		super(driver);
+	}
+
+	public boolean isPendingApprovalTitleDisplayed() {
+		return isElementDisplayed(pendingApprovalTitle);		
+	}
+
+	@SuppressWarnings("deprecation")
+	public void clickOnAID(String AID) {
+		clickOnElement(findElementWithRetry(MobileBy.AccessibilityId(AID)));
+	}
+
+	public void clickOnApproveButton() {
+		clickOnElement(approveButton);
+	}
+
+	public void clickOnClosePopUpButton() {
+		clickOnElement(backGroundScreen);
+	}
+
+	public void clickOnCheckBox() {
+		clickOnElement(searchCheckBoxButton);
+	}
+
+	public void clickOnSubmitButton() {
+		clickOnElement(submitButton);
+	}
+
+	public boolean isSupervisorAuthenticationTitleDisplayed() {
+		return isElementDisplayed(supervisorAuthenticationTitle);		
+	}
+
+	public  void enterUserName(String username) {
+		sendKeysToTextBox(userNameTextBox,username);
+	}
+
+	public  void enterPassword(String password) {
+		sendKeysToTextBox(passwordTextBox,password);
+	}
+	
+	public void clickOnBackButton() {
+		clickOnElement(backButton);
+	}
+
+	public boolean isApprovalButtonDisplayed() {
+		return isElementDisplayed(approveButton);		
+	}
+	
+	public boolean isRejectButtonDisplayed() {
+		return isElementDisplayed(rejectButton);		
+	}
+	
+	public boolean isPageAttributesDisplayed() {
+		return isElementDisplayed(pageAttributes);		
+	}
+	
+	public boolean isClientStatusDisplayed() {
+		return isElementDisplayed(clientStatus);		
+	}
+
+	public boolean isReviewStatusDisplayed() {
+		return isElementDisplayed(reviewStatus);		
+	}
+	
+	public  void enterAID(String AID) {
+		clickAndsendKeysToTextBox(applicationIdTextbox,AID);
+	}
+	
+	public void clickOnRejectButton() {
+		clickOnElement(rejectButton);
+	}
+	
+	public boolean isRejectPacketTitleDisplayed() {
+		return isElementDisplayed(rejectPacketTitle);		
+	}
+	
+	public void selectRejectionReasonDropdown() {
+		boolean isdisplayed =isElementDisplayed(rejectReasonDropdown);
+		assertTrue(isdisplayed,"Verify if "+rejectReasonDropdown+" header is displayed");
+		clickOnElement(rejectReasonDropdown);
+		waitTime(2);
+		if(!isElementDisplayed(rejectReasonDropdown)) {				
+			clickOnElement(findElement(By.className("android.view.View")));
+		}else {
+			clickOnElement(rejectReasonDropdown);
+			waitTime(2);
+			clickOnElement(findElement(By.className("android.view.View")));
+		}	
+	}
+	
+	public boolean isSubmitButtonEnabled() {
+		return isElementEnabled(submitButton);		
+	}
+
+}
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/PreviewPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/PreviewPageTamil.java
index 6cd8fe68c..bbd253aef 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/PreviewPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/PreviewPageTamil.java
@@ -3,16 +3,17 @@
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.AuthenticationPage;
 import regclient.page.DemographicDetailsPage;
 import regclient.page.PreviewPage;
+import regclient.pages.english.AuthenticationPageEnglish;
+import regclient.pages.english.DemographicDetailsPageEnglish;
 
 
 public class PreviewPageTamil extends PreviewPage {
-
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"புதிய பதிவு\"))")
-	private WebElement newRegistrationTitle;
 	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"மக்கள்தொகை தகவல்\"))")
 	private WebElement demographicInformationInPreviewPage;
@@ -23,9 +24,6 @@ public class PreviewPageTamil extends PreviewPage {
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"ஆவணங்கள்\"))")
 	private WebElement documentsInformationInPreviewPage;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description(\"மக்கள்தொகை விவரங்கள்\"))")
-	private WebElement demographicDetailsTitle;
-	
 	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"பயோமெட்ரிக்ஸ்\"))")
 	private WebElement biometricsInformationInPreviewPage;
 	
@@ -41,16 +39,13 @@ public class PreviewPageTamil extends PreviewPage {
 	@AndroidFindBy(accessibility = "தொடர்க")
 	private WebElement continueButton;
 	
-	@AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"UIN ஐப் புதுப்பிக்கவும்\"))")
-	private WebElement updateUINTitle;
-	
 	public PreviewPageTamil(AppiumDriver driver) {
 		super(driver);
 	}
 	
 	public  AuthenticationPage clickOnContinueButton() {
 		clickOnElement(continueButton);
-		return new AuthenticationPageTamil(driver);
+		return new AuthenticationPageEnglish(driver);
 	}
 	
 	public boolean isDemographicInformationInPreviewPageDisplayed() {
@@ -65,17 +60,23 @@ public boolean isBiometricsInformationInPreviewPagePageDisplayed() {
 		return isElementDisplayed(biometricsInformationInPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isNewRegistrationTitleDisplayed() {
-		return isElementDisplayed(newRegistrationTitle);
+		return isElementDisplayed(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("NEW") + "\"))")));
+	}
+	
+	public boolean updateUINTitleDisplayed() {
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
 	
 	public boolean isApplicationIDPreviewPagePageDisplayed() {
 		return isElementDisplayed(applicationIDPreviewPage);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public DemographicDetailsPage clickOnDemographicDetailsTitle() {
-		clickOnElement(demographicDetailsTitle);
-		return new DemographicDetailsPageTamil(driver);
+		clickOnElement(findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getScreenTitle("DemographicDetails") + "\"))")));
+		return new DemographicDetailsPageEnglish(driver);
 	}
 	
 	public boolean isBothIrisImageDisplayed() {
@@ -94,8 +95,4 @@ public String getAID() {
 		String applicationID = getTextFromLocator(applicationIDPreviewPage).replaceAll(".*Application ID (\\d+).*", "$1");
 		return applicationID;
 	}
-
-	public boolean updateUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
-	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/RegistrationTasksPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/RegistrationTasksPageTamil.java
index 58e1731a0..faad72cf6 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/RegistrationTasksPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/RegistrationTasksPageTamil.java
@@ -42,6 +42,12 @@ public class RegistrationTasksPageTamil extends RegistrationTasksPage{
 	
 	@AndroidFindBy(accessibility = "UIN ஐப் புதுப்பிக்கவும்")
 	private WebElement updateUinButton;
+	
+	@AndroidFindBy(accessibility = "தொலைந்த UIN")
+	private WebElement lostUinButton;
+	
+	@AndroidFindBy(accessibility = "Biometric correction")
+	private WebElement biometricCorrectionButton;
 
 	public RegistrationTasksPageTamil(AppiumDriver driver) {
 		super(driver);
@@ -99,4 +105,29 @@ public  SelectLanguagePage clickUpdateMyUINButton() {
 		clickOnElement(updateUinButton);
 		return new SelectLanguagePageTamil(driver);
 	}
+	
+	public boolean isUpdateUINTitleDisplayed() {
+		return isElementDisplayed(updateUinButton);
+	}
+	
+	public boolean isLostUINTitleDisplayed() {
+		return isElementDisplayed(lostUinButton);
+	}
+	
+	public boolean isBiometricCorrectionTitleDisplayed() {
+		return isElementDisplayed(biometricCorrectionButton);
+	}
+	
+	public  void clickSynchronizeDataButton() {
+		clickOnElement(synchronizeDataButton);
+		waitTime(50);
+	}
+	
+	public boolean checkLastSyncDate() {
+		String contentDesc = synchronizeDataButton.getAttribute("content-desc");
+		if(contentDesc.contains("Synchronize Data\n"+getCurrentDateWord()+","))
+			return true;
+		else
+			return false;
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/SupervisorBiometricVerificationpageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/SupervisorBiometricVerificationpageTamil.java
index 4d9fadf24..c515e2611 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/SupervisorBiometricVerificationpageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/SupervisorBiometricVerificationpageTamil.java
@@ -386,4 +386,8 @@ public boolean isOperatorOnboardedPopupLoaded() {
 	public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
+	
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/UpdateOperatorBiometricspageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/UpdateOperatorBiometricspageTamil.java
index e7b5c9231..ac1078bc2 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/UpdateOperatorBiometricspageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/UpdateOperatorBiometricspageTamil.java
@@ -384,4 +384,8 @@ public boolean isOperatorBiometricsUpdatedPopupLoaded() {
 	public void clickOnHomeButton() {
 		clickOnElement(homeButton);
 	}
+	
+	public void clickOnBackButton() {
+		driver.navigate().back();
+	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/pages/tamil/UpdateUINPageTamil.java b/uitest-regclient/src/main/java/regclient/pages/tamil/UpdateUINPageTamil.java
index a0660a598..21b5a87d4 100644
--- a/uitest-regclient/src/main/java/regclient/pages/tamil/UpdateUINPageTamil.java
+++ b/uitest-regclient/src/main/java/regclient/pages/tamil/UpdateUINPageTamil.java
@@ -1,294 +1,64 @@
 package regclient.pages.tamil;
 
 
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
 import org.openqa.selenium.WebElement;
 
 import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.MobileBy;
 import io.appium.java_client.pagefactory.AndroidFindBy;
+import regclient.api.FetchUiSpec;
 import regclient.page.ConsentPage;
 import regclient.page.UpdateUINPage;
+import regclient.pages.english.ConsentPageEnglish;
 
 public class UpdateUINPageTamil extends UpdateUINPage{
 	
-	@AndroidFindBy(accessibility = "UIN ஐப் புதுப்பிக்கவும்")
-	private WebElement updateUINTitle;
-	
 	@AndroidFindBy(xpath = "//android.widget.EditText")
 	private WebElement UINNumberTextBox;
 	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ஒப்புதல்\")")
-	private WebElement consentButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"விருப்பமான மொழி\")")
-	private WebElement preferredLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"முழு பெயர்\")")
-	private WebElement fullNameButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"DOB\")")
-	private WebElement DOBButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"பாலினம்\")")
-	private WebElement genderButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"முகவரி\")")
-	private WebElement addressButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"திருமண நிலை\")")
-	private WebElement maritalStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"விண்ணப்பதாரர் மொழி\")")
-	private WebElement applicantLanguageButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"குடியிருப்பு நிலை\")")
-	private WebElement residenceStatusButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"இடம்\")")
-	private WebElement locationButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"தொலைபேசி\")")
-	private WebElement phoneButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"மின்னஞ்சல்\")")
-	private WebElement emailButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"அறிமுகம் செய்பவர் விவரங்கள்\")")
-	private WebElement introducerDetailsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"பயோமெட்ரிக்ஸ்\")")
-	private WebElement biometricsButton;
-	
-	@AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"ஆவணங்கள்\")")
-	private WebElement documentsButton;
-	
 	@AndroidFindBy(accessibility = "தொடர்க")
 	private WebElement continueButton;
+	
+	@AndroidFindBy(accessibility = "சரியான UIN ஐ உள்ளிடவும்")
+	private WebElement invalidUINErrorMessage;
 
 	public UpdateUINPageTamil(AppiumDriver driver) {
 		super(driver);
 	}
 	
+	@SuppressWarnings("deprecation")
 	public boolean isUpdateMyUINTitleDisplayed() {
-		return isElementDisplayed(updateUINTitle);
+		return isElementDisplayed (findElementWithRetry(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().descriptionContains(\"" + FetchUiSpec.getTitleUsingId("UPDATE") + "\"))")));
 	}
-	
 	public  void enterUIN(String UIN) {
 		clickAndsendKeysToTextBox(UINNumberTextBox,UIN);
 	}
-	
-	public  void clickOnConsentButton() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(consentButton);
-	}
-	
-	public boolean isConsentTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(consentButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(consentButton);
-	}
-	
-	public  void clickOnPreferredLanguageButton() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(preferredLanguageButton);
-	}
-	
-	public boolean isPreferredLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(preferredLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(preferredLanguageButton);
-	}
-		
-	public  void clickOnFullNameButton() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(fullNameButton);
-	}
-	
-	public boolean isFullNameTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(fullNameButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(fullNameButton);
-	}
-	
-	
-	public  void clickOnDOBButton() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(DOBButton);
-	}
-	
-	public boolean isDOBTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(DOBButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(DOBButton);
-	}
-	
-	public  void clickOnGenderButton() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(genderButton);
-	}
-	
-	public boolean isnGenderTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(genderButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(genderButton);
-	}
-	
-	public  void clickOnAddressButton() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(addressButton);
-	}
-	
-	public boolean isAddressTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(addressButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(addressButton);
-	}
-	
-	public  void clickOnMaritalStatusButton() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(maritalStatusButton);
-	}
-	
-	public boolean isMaritalStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(maritalStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(maritalStatusButton);
-	}
-	
-	public  void clickOnApplicantLanguageButton() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(applicantLanguageButton);
-	}
-	
-	public boolean isApplicantLanguageTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(applicantLanguageButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(applicantLanguageButton);
-	}
-	
-	public  void clickOnResidenceStatusButton() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(residenceStatusButton);
-	}
-	
-	public boolean isResidenceStatusTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(residenceStatusButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(residenceStatusButton);
-	}
-	
-	public  void clickOnLocationButton() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(locationButton);
-	}
-	
-	public boolean isLocationTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(locationButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(locationButton);
-	}
-	
-	public  void clickOnPhoneButton() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(phoneButton);
-	}
-	
-	public boolean isPhoneTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(phoneButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(phoneButton);
-	}
-	
-	public  void clickOnEmailButton() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(emailButton);
-	}
-	
-	public boolean isEmailTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(emailButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(emailButton);
-	}
-	
-	public  void clickOnIntroducerDetailsButton() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(introducerDetailsButton);
-	}
-	
-	public boolean isIntroducerDetailsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(introducerDetailsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(introducerDetailsButton);
-	}
-	
-	public  void clickOnBiometricsButton() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(biometricsButton);
+
+	public  ConsentPage clickOnContinueButton() {
+		clickOnElement(continueButton);
+		return new ConsentPageEnglish(driver);
 	}
 	
-	public boolean isnBiometricsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(biometricsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(biometricsButton);
+	public boolean isInvalidUINErrorMessageDisplayed() {
+		return isElementDisplayed(invalidUINErrorMessage);
 	}
 	
-	public  void clickOnDocumentsButton() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		clickOnElement(documentsButton);
+	public void selectUpdateValue(String page) {
+		List groupLabelList=FetchUiSpec.getAllGroupLabelUsingId(page);
+		for(String title : groupLabelList) {
+				WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+title+"\")"));
+				assertTrue(isElementDisplayed(webelement),"Verify if "+title+" title is displayed in update uin page");
+				clickOnElement(webelement);			
+			}		
 	}
 	
-	public boolean isDocumentsTitleDisplayed() {
-		if(!isElementDisplayedOnScreen(documentsButton)) {
-			swipeOrScroll();
-		}
-		return isElementDisplayed(documentsButton);
-	}
-
-	public  ConsentPage clickOnContinueButton() {
-		clickOnElement(continueButton);
-		return new ConsentPageTamil(driver);
+	public void selectUpdateIntroducerDetails() {
+		WebElement webelement =findElementWithRetry(MobileBy.AndroidUIAutomator("new UiSelector().descriptionContains(\""+FetchUiSpec.getGroupValueUsingId("introducerName")+"\")"));
+		assertTrue(isElementDisplayed(webelement),"Verify if "+FetchUiSpec.getGroupValueUsingId("introducerName")+" title is displayed in update uin page");
+		clickOnElement(webelement);			
 	}
 }
diff --git a/uitest-regclient/src/main/java/regclient/utils/CapabilitiesReader.java b/uitest-regclient/src/main/java/regclient/utils/CapabilitiesReader.java
index a8994acad..7b3376bab 100644
--- a/uitest-regclient/src/main/java/regclient/utils/CapabilitiesReader.java
+++ b/uitest-regclient/src/main/java/regclient/utils/CapabilitiesReader.java
@@ -32,7 +32,7 @@ private static HashMap convertCapsToHashMap(String capabilityNam
     }
 
     public static DesiredCapabilities getDesiredCapabilities(String capabilityName, String capsContentRootLocation) {
-        String jsonLocation = System.getProperty("user.dir") + "/" + capsContentRootLocation;
+        String jsonLocation = TestRunner.getResourcePath() + capsContentRootLocation;
         HashMap  caps = null;
         try {
             caps = convertCapsToHashMap(capabilityName, jsonLocation);
diff --git a/uitest-regclient/src/main/java/regclient/utils/EmailableReport.java b/uitest-regclient/src/main/java/regclient/utils/EmailableReport.java
index cfb9dcc8a..1826aa3d8 100644
--- a/uitest-regclient/src/main/java/regclient/utils/EmailableReport.java
+++ b/uitest-regclient/src/main/java/regclient/utils/EmailableReport.java
@@ -1,26 +1,18 @@
 package regclient.utils;
 
-import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.io.PrintWriter;
-import java.lang.reflect.Field;
 import java.text.NumberFormat;
-import java.time.Instant;
 import java.time.LocalDateTime;
-import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
 import java.util.Set;
 
 
@@ -34,6 +26,8 @@
 import org.testng.internal.Utils;
 import org.testng.xml.XmlSuite;
 
+import regclient.api.ConfigManager;
+
 
 
 
@@ -131,7 +125,7 @@ protected void writeHead() {
 
 	protected void writeStylesheet() {
 		writer.print("