diff --git a/ui-test/README.md b/ui-test/README.md index 55364c876..a0cf6c905 100644 --- a/ui-test/README.md +++ b/ui-test/README.md @@ -1,54 +1,196 @@ +# Reg-Client Automation -# Reg-Client Automation - Mobile Automation Framework using Appium +Mobile Automation Framework for Android using **Appium & TestNG**. -## Overview -Reg-Client Automation is a mobile automation framework designed for Android platforms. It automates both positive and negative scenarios to ensure comprehensive testing of mobile applications. +--- -## Installation -To set up Appium for use with this framework, please follow the installation instructions provided in the [Appium documentation](https://appium.io/docs/en/about-appium/intro/). +## Introduction + +Reg-Client Automation is a mobile automation framework for Android platforms. +It automates **positive and negative scenarios** and supports both **emulators and real devices**. + +--- ## Build + 1. **Build the JAR file**: ```bash mvn clean package -DskipTests=true ``` + 2. The generated JAR file (`uitest-regclient-1.0.0.jar`) will be located in the `target` directory. -3. **For running tests on a device**: Use the JAR file with dependencies (`uitest-regclient-1.0.0.jar`). -## Configurations +3. **For running tests on a device**: + Use the shaded JAR with dependencies: + ``` + uitest-regclient-1.0.0.jar + ``` + +--- + +## Prerequisites + +Install the following before setup: -### General Configurations (for both JAR and IDE runs) -1. **Environment Settings**: - - Update `resources/Config/kernal.properties` to modify environment-specific settings. +* Java JDK **11 or above** +* Maven +* Android Studio (for emulator) +* Node.js (for Appium) +* ADB (comes with Android SDK) +* Eclipse IDE or IntelliJ IDEA (optional) -2. **Test Data**: - - Update the following keys in `resources/testdata.json`: - - `uin` - - `language` - - `rid` +--- + +## Appium Setup + +1. Install Node.js: + https://nodejs.org (choose Windows 64-bit installer) + Ensure **Add to PATH** is selected. + +2. Install Appium server globally: + ```bash + npm install -g appium + appium -v + ``` + +3. Start Appium server: + ```bash + appium + ``` -3. **General Configurations**: - - Update `resources/config.properties` with the following values: - - `nodePath`: Path to the Node.js executable. - - `appiumServerExecutable`: Path to the Appium server executable. +4. (Optional) Install **Appium Desktop (GUI)** and start the server from the app. -4. **Desired Capabilities**: - - Update `resources/DesiredCapabilies.json` with the following keys: - - `appium:udid`: Unique Device Identifier for the target device. - - `appium:app`: Path to the application APK. +--- -## Execution +## Emulator Setup -### Running Tests with JAR -1. **Run the JAR file**: - - Execute the `run_regclient.bat` batch file, which will trigger the test execution. +1. Open **Android Studio → Tools → Device Manager → Create Device** +2. Select a device (e.g., Pixel 5) and API level (30/31) +3. Download system image and finish setup +4. Start emulator from Device Manager -### Running Tests in IDE -1. **Run Configuration**: - - Set `regclient.utils.TestRunner` as the main class in your IDE run configuration. - -2. **Resource File Locations**: - - `kernal.properties` and `testdata.json` are located under `src/main/resources` for IDE runs, as opposed to `resources` in the JAR run. +--- + +## Mock MDS Setup + +1. Place `mockmds.apk` in your platform-tools folder: + ``` + C:\Users\\AppData\Local\Android\Sdk\platform-tools + ``` + +2. Verify emulator/device: + ```bash + adb devices + ``` + +3. Install APK: + ```bash + adb install mockmds.apk + ``` + +4. Verify installation: + ```bash + adb shell pm list packages | findstr mosip + ``` + +--- + +## WireGuard Setup + +1. Download WireGuard APK (official site or F-Droid) +2. Place it in `platform-tools` +3. Install: + ```bash + adb install com.wireguard.android-1.0.20250531.apk + ``` + +4. Launch WireGuard and activate the tunnel if required + +--- + +## Clone & Setup Automation Framework + +Fork the repository (**branch: develop**) and clone locally: + +```bash +cd ~/Desktop +mkdir arc && cd arc +git clone https://github.com/mosip/android-registration-client.git +``` + +Import the project into **Eclipse / IntelliJ** if needed. + +--- + +## Run Automation + +### From IDE + +* Create a **Run Configuration** +* **Main Class**: `regclient.utils.TestRunner` +* Run the configuration + +--- + +### From Packaged JAR + +```bash +cd android-registration-client/ui-test/target +java -jar uitest-regclient-1.0.0.jar +``` + +Alternatively, run the provided batch script (if present): +``` +run_regclient.bat +``` + +--- + +## Important Configuration Files + +Update these files before execution: + +* `resources/config/kernal.properties` — Environment details +* `resources/testdata.json` — Test data (uin, language, rid, camera id) +* `resources/config.properties` — `nodePath`, `appiumServerExecutable` +* `resources/DesiredCapabilies.json` — `udid`, app path +* `camera.java` — Update camera & retake button coordinates + +📌 Any runtime properties (e.g. `bioValue.properties`) must be placed under: +``` +src/main/resources/config +``` +(Maven will copy them to `target/classes/config`) + +--- ## Reports -- After test execution, test reports will be available in the `test-output/emailableReports` directory. + +After execution, reports are generated at: + +``` +test-output/emailableReports +``` + +Reports include: +* Test summary +* Pass / Fail ratio +* Detailed execution logs + +--- + +## Troubleshooting (Quick) + +* **JVM / native memory errors** + Increase Windows pagefile or reduce JVM `-Xmx` + +* **SLF4J multiple bindings warning** + Ensure only **one SLF4J binding** exists + (recommended: `log4j-slf4j2-impl`) + +* **Missing resource files** + Ensure all `.properties` files are under `src/main/resources` + +* **Class name mismatch** + Java class names are **case-sensitive** — ensure TestNG XML matches compiled class names + diff --git a/ui-test/pom.xml b/ui-test/pom.xml index 68aa1316f..29c0b24cf 100644 --- a/ui-test/pom.xml +++ b/ui-test/pom.xml @@ -9,13 +9,11 @@ uitest-regclient Parent project of MOSIP regclient mobile automation https://github.com/mosip/android-registration-client - 21 21 UTF-8 - @@ -39,7 +37,6 @@ - org.apache.maven.plugins maven-shade-plugin @@ -78,11 +75,43 @@ io.appium java-client 8.6.0 + + + ch.qos.logback + logback-classic + + + org.slf4j + slf4j-reload4j + + + org.slf4j + slf4j-log4j12 + + org.asynchttpclient async-http-client 2.12.4 + + + ch.qos.logback + logback-classic + + + org.slf4j + slf4j-simple + + + org.slf4j + slf4j-reload4j + + + org.slf4j + slf4j-log4j12 + + org.apache.commons @@ -104,7 +133,6 @@ javafaker 1.0.2 - org.testng testng @@ -115,25 +143,45 @@ jackson-databind 2.13.4.1 + + com.fasterxml.jackson.core + jackson-annotations + 2.13.4 + org.keycloak keycloak-admin-client - 23.0.4 + 17.0.1 - com.fasterxml.jackson.core - jackson-core - 2.15.2 + org.jboss.resteasy + resteasy-jaxrs + 3.15.0.Final org.jboss.resteasy - resteasy-jaxrs + resteasy-client + 3.15.0.Final + + + org.jboss.resteasy + resteasy-jackson2-provider + 3.15.0.Final + + + org.jboss.resteasy + resteasy-multipart-provider + 3.15.0.Final + + + org.jboss.resteasy + resteasy-jaxb-provider 3.15.0.Final org.json json - 20231013 + 20230227 commons-io @@ -149,6 +197,33 @@ io.rest-assured rest-assured 5.3.0 + + + ch.qos.logback + logback-classic + + + org.slf4j + slf4j-simple + + + org.slf4j + slf4j-reload4j + + + org.slf4j + slf4j-log4j12 + + + org.apache.logging.log4j + log4j-to-slf4j + + + + + org.slf4j + slf4j-api + 2.0.13 org.apache.logging.log4j @@ -156,14 +231,14 @@ 2.23.1 - org.slf4j - slf4j-api - 2.0.13 + org.apache.logging.log4j + log4j-core + 2.23.1 org.apache.logging.log4j log4j-slf4j2-impl - 2.23.1 + 2.23.1 org.yaml @@ -175,47 +250,16 @@ commons-beanutils 1.11.0 - - org.apache.logging.log4j - log4j-core - 2.23.1 - - - org.jboss.resteasy - resteasy-multipart-provider - 4.7.8.Final - com.sun.mail jakarta.mail 2.0.2 - - - org.jboss.resteasy - resteasy-client - 4.5.8.SP1 - - - org.jboss.resteasy - resteasy-client-microprofile - 4.5.8.SP1 - - - org.jboss.resteasy - resteasy-jackson2-provider - 3.15.0.Final - com.google.guava guava 32.0.0-jre - - org.jboss.resteasy - resteasy-jaxb-provider - 3.15.0.Final - io.mosip.testrig.apitest.commons apitest-commons @@ -229,8 +273,23 @@ com.google.guava guava + + ch.qos.logback + logback-classic + + + org.slf4j + slf4j-reload4j + + + org.slf4j + slf4j-log4j12 + + + org.apache.logging.log4j + log4j-to-slf4j + - - + \ No newline at end of file diff --git a/ui-test/src/main/java/regclient/BaseTest/BaseTest.java b/ui-test/src/main/java/regclient/BaseTest/BaseTest.java index c1dfe7ab8..d2e913227 100644 --- a/ui-test/src/main/java/regclient/BaseTest/BaseTest.java +++ b/ui-test/src/main/java/regclient/BaseTest/BaseTest.java @@ -12,10 +12,18 @@ public class BaseTest { @BeforeSuite(alwaysRun = true) public void beforeSuite() { DriverManager.startAppiumServer(); + try { + driver = DriverManager.getDriver(); + } catch (Exception e) { + throw new RuntimeException("Failed to initialize AppiumDriver", e); + } } @AfterSuite(alwaysRun = true) public void afterSuite() { + if (driver != null) { + driver.quit(); + } DriverManager.stopAppiumServer(); } diff --git a/ui-test/src/main/java/regclient/androidTestCases/AddMachineDetails.java b/ui-test/src/main/java/regclient/androidTestCases/AddMachineDetails.java index e7a6334bc..03427c819 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/AddMachineDetails.java +++ b/ui-test/src/main/java/regclient/androidTestCases/AddMachineDetails.java @@ -17,7 +17,7 @@ public class AddMachineDetails extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Add machine details") public void addMachineDetails() { BasePage.disableAutoRotation(); diff --git a/ui-test/src/main/java/regclient/androidTestCases/AutoLogout.java b/ui-test/src/main/java/regclient/androidTestCases/AutoLogout.java new file mode 100644 index 000000000..3f7587803 --- /dev/null +++ b/ui-test/src/main/java/regclient/androidTestCases/AutoLogout.java @@ -0,0 +1,311 @@ +package regclient.androidTestCases; + +import static org.testng.Assert.assertTrue; + +import java.io.IOException; + +import org.testng.annotations.Test; + +import regclient.BaseTest.AndroidBaseTest; +import regclient.api.ArcConfigManager; +import regclient.api.KeycloakUserManager; +import regclient.page.AutoLogoutPage; +import regclient.page.BasePage; +import regclient.page.LoginPage; +import regclient.page.RegistrationTasksPage; +import regclient.pages.arabic.AutoLogoutPageArabic; +import regclient.pages.arabic.LoginPageArabic; +import regclient.pages.arabic.RegistrationTasksPageArabic; +import regclient.pages.english.AutoLogoutPageEnglish; +import regclient.pages.english.LoginPageEnglish; +import regclient.pages.english.RegistrationTasksPageEnglish; +import regclient.pages.french.AutoLogoutPageFrench; +import regclient.pages.french.LoginPageFrench; +import regclient.pages.french.RegistrationTasksPageFrench; +import regclient.pages.hindi.AutoLogoutPageHindi; +import regclient.pages.hindi.LoginPageHindi; +import regclient.pages.hindi.RegistrationTasksPageHindi; +import regclient.pages.kannada.AutoLogoutPageKannada; +import regclient.pages.kannada.LoginPageKannada; +import regclient.pages.kannada.RegistrationTasksPageKannada; +import regclient.pages.tamil.AutoLogoutPageTamil; +import regclient.pages.tamil.LoginPageTamil; +import regclient.pages.tamil.RegistrationTasksPageTamil; +import regclient.utils.TestDataReader; + +public class AutoLogout extends AndroidBaseTest { + + @Test(priority = 0, description = "Verify auto-logout when the machine is online") + public void onlineAutoLogout() throws InterruptedException { + BasePage.disableAutoRotation(); + LoginPage loginPage = null; + RegistrationTasksPage registrationTasksPage = null; + AutoLogoutPage autoLogoutPage = null; + + final String language = TestDataReader.readData("language"); + + if ("eng".equalsIgnoreCase(language)) { + loginPage = new LoginPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + loginPage = new LoginPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + loginPage = new LoginPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + loginPage = new LoginPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + loginPage = new LoginPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + loginPage.selectLanguage(); + + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), + "verify if the welcome msg in selected language displayed"); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + + if ("eng".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + registrationTasksPage.handleLocationPermission(); + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + + if ("eng".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(autoLogoutPage.isAutoLogoutPopupDisplayed(), "Verify if auto-logout popup is displayed"); + + autoLogoutPage.clickOnStayLoggedInButton(); + + if ("eng".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + registrationTasksPage.handleLocationPermission(); + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + + if ("eng".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(autoLogoutPage.isAutoLogoutPopupDisplayed(), "Verify if auto-logout popup is displayed"); + + autoLogoutPage.clickOnStayLogoutButton(); + + if ("eng".equalsIgnoreCase(language)) { + loginPage = new LoginPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + loginPage = new LoginPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + loginPage = new LoginPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + loginPage = new LoginPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + loginPage = new LoginPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), + "verify if the welcome msg in selected language displayed"); + + } + + @Test(priority = 1, description = "Verify auto-logout when the machine is offline") + public void offlineAutoLogout() throws InterruptedException, IOException { + try { + BasePage.disableAutoRotation(); + LoginPage loginPage = null; + RegistrationTasksPage registrationTasksPage = null; + AutoLogoutPage autoLogoutPage = null; + + final String language = TestDataReader.readData("language"); + + BasePage.disableWifiAndData(); + + if ("eng".equalsIgnoreCase(language)) { + loginPage = new LoginPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + loginPage = new LoginPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + loginPage = new LoginPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + loginPage = new LoginPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + loginPage = new LoginPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + loginPage.selectLanguage(); + + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), + "verify if the welcome msg in selected language displayed"); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + + if ("eng".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + + if ("eng".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(autoLogoutPage.isAutoLogoutPopupDisplayed(), "Verify if auto-logout popup is displayed"); + + autoLogoutPage.clickOnStayLoggedInButton(); + + if ("eng".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + + if ("eng".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + autoLogoutPage = new AutoLogoutPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(autoLogoutPage.isAutoLogoutPopupDisplayed(), "Verify if auto-logout popup is displayed"); + + autoLogoutPage.clickOnStayLogoutButton(); + + if ("eng".equalsIgnoreCase(language)) { + loginPage = new LoginPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + loginPage = new LoginPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + loginPage = new LoginPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + loginPage = new LoginPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + loginPage = new LoginPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), + "verify if the welcome msg in selected language displayed"); + } finally { + BasePage.enableWifiAndData(); + } + + } +} diff --git a/ui-test/src/main/java/regclient/androidTestCases/BiometricCorrection.java b/ui-test/src/main/java/regclient/androidTestCases/BiometricCorrection.java index 60dc3589a..e2d178fc8 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/BiometricCorrection.java +++ b/ui-test/src/main/java/regclient/androidTestCases/BiometricCorrection.java @@ -9,6 +9,7 @@ import org.openqa.selenium.WebElement; import org.testng.annotations.Test; +import io.appium.java_client.HidesKeyboard; import io.appium.java_client.android.AndroidDriver; import regclient.BaseTest.AndroidBaseTest; import regclient.api.ArcConfigManager; @@ -22,6 +23,7 @@ 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.MockSBIPage; @@ -39,6 +41,7 @@ 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; @@ -53,7 +56,8 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +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; @@ -69,6 +73,7 @@ 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; @@ -84,6 +89,7 @@ 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; @@ -98,7 +104,8 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +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; @@ -113,7 +120,8 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +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; @@ -126,8 +134,8 @@ public class BiometricCorrection extends AndroidBaseTest { - @Test - public void biometricCorrection() throws InterruptedException { + @Test(priority = 0, description = "Verify adult biometric correction") + public void adultBiometricCorrection() throws InterruptedException { BasePage.disableAutoRotation(); FetchUiSpec.getUiSpec("newProcess"); @@ -152,7 +160,7 @@ public void biometricCorrection() throws InterruptedException { // Navigate to mocksbi page MockSBIPage mockSBIPage = new MockSBIPage(driver); mockSBIPage.switchToMockSBI(); - mockSBIPage.setAllModalityLowScroe(); + mockSBIPage.setAllModalityLowScore(); mockSBIPage.switchBackToArcApp(); // New registration with low biometric score @@ -199,6 +207,7 @@ public void biometricCorrection() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickOnNewRegistrationButton(); @@ -274,15 +283,15 @@ public void biometricCorrection() throws InterruptedException { demographicPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -332,7 +341,838 @@ public void biometricCorrection() throws InterruptedException { assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), "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 + if (FetchUiSpec.rightHand.equals("yes")) { + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), + "Verify if biometric details page is displayed"); + applicantBiometricsPage = biometricDetailsPage.clickOnRightHandScanIcon(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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 ("eng".equalsIgnoreCase(language)) { + previewPage = new PreviewPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + previewPage = new PreviewPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + previewPage = new PreviewPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + previewPage = new PreviewPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + previewPage = new PreviewPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + previewPage = new PreviewPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + 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"); + String Aid = previewPage.getAID(); + previewPage.clickOnContinueButton(); + if ("eng".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(authenticationPage.isAuthenticationPageDisplayed(), + "Verify if authentication details page is displayed"); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + authenticationPage.clickOnAuthenticatenButton(); + if ("eng".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(), + "Verify if acknowledgement details page is displayed"); + + acknowledgementPage.clickOnGoToHomeButton(); + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + registrationTasksPage.clickOnOperationalTasksTitle(); + if ("eng".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval title displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if ("eng".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.enterAID(Aid); + assertTrue(pendingApproval.isNumberOfApplicationDisplayed(), "Verify if no. of pending approval display"); + 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.isAuthenticateButtonEnabled(), + "Verify if authenticate button is enable after selecting packet"); + + boolean isPageDisplayed = false; + for (int i = 0; i < 3; i++) { + pendingApproval.clickOnAuthenticateButton(); + Thread.sleep(2000); + if (pendingApproval.isSupervisorAuthenticationTitleDisplayed()) { + isPageDisplayed = true; + break; + } + } + assertTrue(isPageDisplayed, "Supervisor Authentication page not displayed after retries"); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), + "Verify if error empty username submit button enabled"); + + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + + pendingApproval.clickOnBackButton(); + + operationalTaskPage.clickApplicationUploadTitle(); + if ("eng".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), + "Verify if manage Applications Page displayed"); + + manageApplicationsPage.enterAID(Aid); + + assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + manageApplicationsPage.selectApprovedValueDropdown(); + + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if Filtre packet is approved "); + manageApplicationsPage.clickOnSearchCheckBox(); + for (int i = 0; i < 3; i++) { + manageApplicationsPage.clickOnUploadButton(); + Thread.sleep(2000); + if (!manageApplicationsPage.isNoNetworkFoundDisplayed()) + break; + } + manageApplicationsPage.clickOnBackButton(); + + // Return to mocksbi page + mockSBIPage.switchToMockSBI(); + mockSBIPage.setAllModalityHighScore(); + mockSBIPage.switchBackToArcApp(); + // biocorrection flow + if ("eng".equalsIgnoreCase(language)) { + loginPage = new LoginPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + loginPage = new LoginPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + loginPage = new LoginPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + loginPage = new LoginPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + loginPage = new LoginPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + loginPage.selectLanguage(); + + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), + "verify if the welcome msg in selected language displayed"); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + + if ("eng".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + registrationTasksPage.handleLocationPermission(); + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + + assertTrue(registrationTasksPage.isBiometricCorrectionTitleDisplayed(), + "Verify if biometric correction is displayed"); + registrationTasksPage.clickOnBiometricCorrectionButton(); + + if ("eng".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + 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(); + for (String screen : screenOrder) { + if (screen.equals("consentdet") || screen.equals("consent")) { + if ("eng".equalsIgnoreCase(language)) { + consentPage = new ConsentPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + consentPage = new ConsentPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + consentPage = new ConsentPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + consentPage = new ConsentPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + consentPage = new ConsentPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + consentPage = new ConsentPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(consentPage.isPageDisplayed("consentdet"), "Verify if Consent page is loaded"); + consentPage.clickOnInformedButton(); + + } else if (screen.equals("BiometricDetails")) { + if ("eng".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + if ("eng".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), + "Verify if biometric details page is displayed"); + + assertTrue(biometricDetailsPage.isAdditionalInfoRequestIdTextboxDisplayed(), + "Additional info Request ID textbox should be displayed"); + + biometricDetailsPage.enterAdditionalInfoUsingEmail(BasePage.email); + + if (FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), + "Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isIrisScan(), "Verify if iris scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + + applicantBiometricsPage.clickOnNextButton(); + } + // righthand + if (FetchUiSpec.rightHand.equals("yes")) { + + biometricDetailsPage.clickOnRightHandScanIcon(); + + assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplayed(), + "Verify if right hand scan is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isRightHandScan(), "Verify if right hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnNextButton(); + } + // lefthand + if (FetchUiSpec.leftHand.equals("yes")) { + biometricDetailsPage.clickOnLeftHandScanIcon(); + + assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplayed(), + "Verify if left hand scan is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isLeftHandScan(), "Verify if Left hand scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnNextButton(); + } + // thumb + if (FetchUiSpec.thumb.equals("yes")) { + biometricDetailsPage.clickOnThumbsScanIcon(); + + assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplayed(), + "Verify if thumb hand scan is displayed"); + applicantBiometricsPage.clickOnScanButton(); + + assertTrue(applicantBiometricsPage.isThumbsScan(), "Verify if thumbs scan 1st attempt"); + applicantBiometricsPage.closeScanCapturePopUp(); + applicantBiometricsPage.clickOnNextButton(); + } + // face + if (FetchUiSpec.face.equals("yes")) { + biometricDetailsPage.clickOnFaceScanIcon(); + + assertTrue(applicantBiometricsPage.isFaceScanTitleDisplayed(), + "Verify if applicant biometric 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"); + ((HidesKeyboard) driver).hideKeyboard(); + biometricDetailsPage.clickOnContinueButton(); + } + } + + if ("eng".equalsIgnoreCase(language)) { + previewPage = new PreviewPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + previewPage = new PreviewPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + previewPage = new PreviewPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + previewPage = new PreviewPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + previewPage = new PreviewPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + previewPage = new PreviewPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(previewPage.isBiometricCorrectionTitleDisplayed(), + "Verify if biometric correction title is displayed"); + + previewPage.clickOnContinueButton(); + if ("eng".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(authenticationPage.isAuthenticationPageDisplayed(), + "Verify if authentication details page is displayed"); + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + authenticationPage.clickOnAuthenticatenButton(); + if ("eng".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(), + "Verify if acknowledgement details page is displayed"); + + acknowledgementPage.clickOnGoToHomeButton(); + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + registrationTasksPage.clickOnOperationalTasksTitle(); + if ("eng".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if ("eng".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(pendingApproval.isPendingApprovalTitleDisplayed(), "Verify if pending approval page displayed"); + pendingApproval.enterAID(Aid); + assertTrue(pendingApproval.isNumberOfApplicationDisplayed(), "Verify if no. of pending approval display"); + 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.isAuthenticateButtonEnabled(), + "Verify if authenticate button is enable after selecting packet"); + + boolean isBioCorrectionAuthenticationPageDisplayed = false; + for (int i = 0; i < 3; i++) { + pendingApproval.clickOnAuthenticateButton(); + Thread.sleep(2000); + if (pendingApproval.isSupervisorAuthenticationTitleDisplayed()) { + isBioCorrectionAuthenticationPageDisplayed = true; + break; + } + } + assertTrue(isBioCorrectionAuthenticationPageDisplayed, + "Supervisor Authentication page not displayed after retries"); + + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + + pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnBackButton(); + assertTrue(operationalTaskPage.isApplicationUploadTitleDisplayed(), + "Verify if application upload tite displayed"); + + operationalTaskPage.clickApplicationUploadTitle(); + if ("eng".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), + "Verify if manage Applications Page displayed"); + manageApplicationsPage.enterAID(Aid); + + assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + manageApplicationsPage.selectApprovedValueDropdown(); + + assertTrue(manageApplicationsPage.isPacketApproved(Aid), "Verify if Filtre packet is approved "); + manageApplicationsPage.clickOnSearchCheckBox(); + for (int i = 0; i < 3; i++) { + manageApplicationsPage.clickOnUploadButton(); + Thread.sleep(2000); + if (!manageApplicationsPage.isNoNetworkFoundDisplayed()) + break; + } + manageApplicationsPage.clickOnBackButton(); + } + + @Test(priority = 1, description = "Verify minor biometric correction") + public void minorBiometricCorrection() throws InterruptedException { + + BasePage.disableAutoRotation(); + FetchUiSpec.getUiSpec("newProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); + List screenOrder = FetchUiSpec.getAllScreenOrder(); + 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; + PendingApproval pendingApproval = null; + ManageApplicationsPage manageApplicationsPage = null; + ProfilePage profilePage = null; + IntroducerBiometricPage introducerBiometricPage = null; + + // Navigate to mocksbi page + MockSBIPage mockSBIPage = new MockSBIPage(driver); + mockSBIPage.switchToMockSBI(); + mockSBIPage.setAllModalityLowScore(); + mockSBIPage.switchBackToArcApp(); + // New registration with low biometric score + + final String language = TestDataReader.readData("language"); + + if ("eng".equalsIgnoreCase(language)) { + loginPage = new LoginPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + loginPage = new LoginPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + loginPage = new LoginPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + loginPage = new LoginPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + loginPage = new LoginPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + loginPage.selectLanguage(); + + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), + "verify if the welcome msg in selected language displayed"); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + + if ("eng".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + registrationTasksPage.clickOnNewRegistrationButton(); + + if ("eng".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + selectLanguagePage = new SelectLanguagePageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + 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(); + for (String screen : screenOrder) { + if (screen.equals("consentdet") || screen.equals("consent")) { + if ("eng".equalsIgnoreCase(language)) { + consentPage = new ConsentPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + consentPage = new ConsentPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + consentPage = new ConsentPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + consentPage = new ConsentPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + consentPage = new ConsentPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + consentPage = new ConsentPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + consentPage.clickOnInformedButton(); + } else if (screen.equals("DemographicDetails")) { + + if ("eng".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(demographicPage.isPageDisplayed("DemographicDetails"), + "Verify if demographic details page is displayed"); + + demographicPage.fillDemographicDetailsPage("minor"); + + demographicPage.clickOnContinueButton(); + } else if (screen.equals("Documents")) { + if ("eng".equalsIgnoreCase(language)) { + documentuploadPage = new DocumentUploadPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + documentuploadPage = new DocumentUploadPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + documentuploadPage = new DocumentUploadPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + documentuploadPage = new DocumentUploadPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + documentuploadPage = new DocumentUploadPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + documentuploadPage = new DocumentUploadPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(documentuploadPage.isDoccumentUploadPageDisplayed(), + "Verify if doccumentupload page is displayed"); + documentuploadPage.uploadDoccuments("minor", "withoutReferenceNumber"); + documentuploadPage.clickOnContinueButton(); + + } else if (screen.equals("BiometricDetails")) { + if ("eng".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + if ("eng".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + if (FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), + "Verify if applicant biometric page is displayed"); + applicantBiometricsPage.clickOnScanButton(); assertTrue(applicantBiometricsPage.isIrisScan(), "Verify if iris scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); @@ -358,7 +1198,6 @@ public void biometricCorrection() throws InterruptedException { assertTrue(applicantBiometricsPage.isRightHandScan(), "Verify if right hand scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage = applicantBiometricsPage.clickOnBackButton(); } // lefthand @@ -373,7 +1212,6 @@ public void biometricCorrection() throws InterruptedException { assertTrue(applicantBiometricsPage.isLeftHandScan(), "Verify if Left hand scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage = applicantBiometricsPage.clickOnBackButton(); } // thumb @@ -388,7 +1226,6 @@ public void biometricCorrection() throws InterruptedException { assertTrue(applicantBiometricsPage.isThumbsScan(), "Verify if thumbs scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage = applicantBiometricsPage.clickOnBackButton(); } // face @@ -400,25 +1237,100 @@ public void biometricCorrection() throws InterruptedException { assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), "Verify if applicant biometric page is displayed"); applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isFaceScan(), "Verify if face scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isFaceScan(), "Verify if face scan 2nd attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - - applicantBiometricsPage.clickOnScanButton(); - assertTrue(applicantBiometricsPage.isFaceScan(), "Verify if face scan 3rd attempt"); - applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnBackButton(); } + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), "Verify if biometric details page is displayed"); + // Return to mocksbi page + mockSBIPage.switchToMockSBI(); + mockSBIPage.setAllModalityHighScore(); + mockSBIPage.switchBackToArcApp(); + + if ("eng".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + FetchUiSpec.eye = "no"; + FetchUiSpec.rightHand = "no"; + FetchUiSpec.leftHand = "no"; + FetchUiSpec.thumb = "no"; + FetchUiSpec.face = "no"; + FetchUiSpec.getBiometricDetails("introducerBiometrics"); + if (FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerIrisScan(); + assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), + "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")) { + + assertTrue(introducerBiometricPage.isRightHandScanTitleDisplayed(), + "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.isLeftHandScanTitleDisplayed(), + "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.isThumbsScanTitleDisplayed(), + "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.isFaceScanTitleDisplayed(), + "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 ("eng".equalsIgnoreCase(language)) { previewPage = new PreviewPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { @@ -436,15 +1348,14 @@ public void biometricCorrection() throws InterruptedException { } assertTrue(previewPage.isNewRegistrationTitleDisplayed(), "Verify if new Registration title is displayed"); - assertTrue(previewPage.isApplicationIDPreviewPagePageDisplayed(), - "Verify if application ID In PreviewPage 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(); - String emailId = previewPage.getEmailId(); previewPage.clickOnContinueButton(); if ("eng".equalsIgnoreCase(language)) { authenticationPage = new AuthenticationPageEnglish(driver); @@ -484,8 +1395,6 @@ public void biometricCorrection() throws InterruptedException { 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(), @@ -593,12 +1502,9 @@ public void biometricCorrection() throws InterruptedException { } manageApplicationsPage.clickOnBackButton(); - // Return to mocksbi page - mockSBIPage.switchToMockSBI(); - mockSBIPage.setAllModalityHighScroe(); - mockSBIPage.switchBackToArcApp(); - // Biometric correction packet process + // Reset biometric capabilities back to individual biometrics for correction flow + FetchUiSpec.getBiometricDetails("individualBiometrics"); assertTrue(registrationTasksPage.isOperationalTaskDisplayed(), "Verify if operation tasks page is loaded"); registrationTasksPage.clickOnRegistrationTasksTab(); @@ -693,7 +1599,7 @@ public void biometricCorrection() throws InterruptedException { assertTrue(biometricDetailsPage.isAdditionalInfoRequestIdTextboxDisplayed(), "Additional info Request ID textbox should be displayed"); - biometricDetailsPage.enterAdditionalInfoUsingEmail(emailId); + biometricDetailsPage.enterAdditionalInfoUsingEmail(BasePage.email); if (FetchUiSpec.eye.equals("yes")) { biometricDetailsPage.clickOnIrisScan(); @@ -705,74 +1611,60 @@ public void biometricCorrection() throws InterruptedException { 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(); + applicantBiometricsPage.clickOnNextButton(); } // righthand if (FetchUiSpec.rightHand.equals("yes")) { - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), - "Verify if biometric details page is displayed"); - applicantBiometricsPage = biometricDetailsPage.clickOnRightHandScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), - "Verify if applicant biometric page is displayed"); + biometricDetailsPage.clickOnRightHandScanIcon(); + + assertTrue(applicantBiometricsPage.isRightHandScanTitleDisplayed(), + "Verify if right hand scan is displayed"); applicantBiometricsPage.clickOnScanButton(); assertTrue(applicantBiometricsPage.isRightHandScan(), "Verify if right hand scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage = applicantBiometricsPage.clickOnBackButton(); + applicantBiometricsPage.clickOnNextButton(); } // lefthand if (FetchUiSpec.leftHand.equals("yes")) { - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), - "Verify if biometric details page is displayed"); - applicantBiometricsPage = biometricDetailsPage.clickOnLeftHandScanIcon(); + biometricDetailsPage.clickOnLeftHandScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), - "Verify if applicant biometric page is displayed"); + assertTrue(applicantBiometricsPage.isLeftHandScanTitleDisplayed(), + "Verify if left hand scan is displayed"); applicantBiometricsPage.clickOnScanButton(); assertTrue(applicantBiometricsPage.isLeftHandScan(), "Verify if Left hand scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage = applicantBiometricsPage.clickOnBackButton(); + applicantBiometricsPage.clickOnNextButton(); } // thumb if (FetchUiSpec.thumb.equals("yes")) { - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), - "Verify if biometric details page is displayed"); - applicantBiometricsPage = biometricDetailsPage.clickOnThumbsScanIcon(); + biometricDetailsPage.clickOnThumbsScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), - "Verify if applicant biometric page is displayed"); + assertTrue(applicantBiometricsPage.isThumbsScanTitleDisplayed(), + "Verify if thumb hand scan is displayed"); applicantBiometricsPage.clickOnScanButton(); assertTrue(applicantBiometricsPage.isThumbsScan(), "Verify if thumbs scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - biometricDetailsPage = applicantBiometricsPage.clickOnBackButton(); + applicantBiometricsPage.clickOnNextButton(); } // face if (FetchUiSpec.face.equals("yes")) { - assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), - "Verify if biometric details page is displayed"); biometricDetailsPage.clickOnFaceScanIcon(); - assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), + assertTrue(applicantBiometricsPage.isFaceScanTitleDisplayed(), "Verify if applicant biometric page is displayed"); applicantBiometricsPage.clickOnScanButton(); assertTrue(applicantBiometricsPage.isFaceScan(), "Verify if face scan 1st attempt"); applicantBiometricsPage.closeScanCapturePopUp(); - applicantBiometricsPage.clickOnBackButton(); + applicantBiometricsPage.clickOnNextButton(); } assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), "Verify if biometric details page is displayed"); + ((HidesKeyboard) driver).hideKeyboard(); biometricDetailsPage.clickOnContinueButton(); } @@ -793,9 +1685,8 @@ public void biometricCorrection() throws InterruptedException { } } - assertTrue(previewPage.isNewRegistrationTitleDisplayed(), "Verify if new Registration title is displayed"); - assertTrue(previewPage.isApplicationIDPreviewPagePageDisplayed(), - "Verify if application ID In PreviewPage 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(), @@ -840,8 +1731,6 @@ public void biometricCorrection() throws InterruptedException { 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(), diff --git a/ui-test/src/main/java/regclient/androidTestCases/InitialLaunch.java b/ui-test/src/main/java/regclient/androidTestCases/InitialLaunch.java index 61cd89374..f29ba8709 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/InitialLaunch.java +++ b/ui-test/src/main/java/regclient/androidTestCases/InitialLaunch.java @@ -12,7 +12,7 @@ public class InitialLaunch extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify initial app launch after machine details are configured") public void initialLaunch() { BasePage.disableAutoRotation(); LoginPageEnglish loginPage = new LoginPageEnglish(driver); diff --git a/ui-test/src/main/java/regclient/androidTestCases/LostUin.java b/ui-test/src/main/java/regclient/androidTestCases/LostUin.java index 31f699574..fc8ee342f 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/LostUin.java +++ b/ui-test/src/main/java/regclient/androidTestCases/LostUin.java @@ -47,7 +47,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; @@ -92,7 +92,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; @@ -107,7 +107,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; @@ -120,7 +120,7 @@ public class LostUin extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify lost UIN") public void lostUinAdult() { BasePage.disableAutoRotation(); FetchUiSpec.getUiSpec("newProcess"); @@ -184,6 +184,7 @@ public void lostUinAdult() { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickOnLostUinButton(); @@ -262,15 +263,15 @@ public void lostUinAdult() { demographicPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -523,7 +524,7 @@ public void lostUinAdult() { "Verify if Supervisor Authentication page displayed"); pendingApproval.clickOnSubmitButton(); - assertTrue(pendingApproval.isInvalidemptyUsernameSumbitButtonEnbled(), + assertTrue(pendingApproval.isSubmitButtonEnabledWithEmptyUsername(), "Verify if error empty username submit button enabled"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser + "123"); diff --git a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationAdult.java b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationAdult.java index ae33f0708..522b7bebd 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationAdult.java +++ b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationAdult.java @@ -1,11 +1,8 @@ package regclient.androidTestCases; -import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.util.List; - -import org.openqa.selenium.ScreenOrientation; import org.testng.annotations.Test; import regclient.BaseTest.AndroidBaseTest; @@ -51,7 +48,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; @@ -99,7 +96,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; @@ -115,7 +112,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; @@ -130,7 +127,7 @@ public class NewRegistrationAdult extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify adult new registration") public void newRegistrationAdult() throws InterruptedException { BasePage.disableAutoRotation(); @@ -279,15 +276,15 @@ public void newRegistrationAdult() throws InterruptedException { demographicPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -545,7 +542,7 @@ public void newRegistrationAdult() throws InterruptedException { assertTrue(isPageDisplayed, "Supervisor Authentication page not displayed after retries"); pendingApproval.clickOnSubmitButton(); - assertTrue(pendingApproval.isInvalidemptyUsernameSumbitButtonEnbled(), + assertTrue(pendingApproval.isSubmitButtonEnabledWithEmptyUsername(), "Verify if error empty username submit button enabled"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser + "123"); @@ -596,31 +593,692 @@ public void newRegistrationAdult() throws InterruptedException { } manageApplicationsPage.clickOnBackButton(); - assertTrue(registrationTasksPage.isProfileTitleDisplayed(), "Verify if profile title display on homepage"); - registrationTasksPage.clickProfileButton(); + } + + @Test(priority = 1, description = "Verify adult new registration") + public void newRegistrationAdultUploadMultipleDoccuments() throws InterruptedException { + BasePage.disableAutoRotation(); + FetchUiSpec.getUiSpec("newProcess"); + FetchUiSpec.getBiometricDetails("individualBiometrics"); + List screenOrder = FetchUiSpec.getAllScreenOrder(); + 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; + PendingApproval pendingApproval = null; + ManageApplicationsPage manageApplicationsPage = null; + ProfilePage profilePage = null; + IntroducerBiometricPage introducerBiometricPage = null; + + final String language = TestDataReader.readData("language"); + + if ("eng".equalsIgnoreCase(language)) { + loginPage = new LoginPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + loginPage = new LoginPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + loginPage = new LoginPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + loginPage = new LoginPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + loginPage = new LoginPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + loginPage.selectLanguage(); + + assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), + "verify if the welcome msg in selected language displayed"); + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + + if ("eng".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + + registrationTasksPage.clickOnNewRegistrationButton(); if ("eng".equalsIgnoreCase(language)) { - profilePage = new ProfilePageEnglish(driver); + selectLanguagePage = new SelectLanguagePageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { - profilePage = new ProfilePageHindi(driver); + selectLanguagePage = new SelectLanguagePageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { - profilePage = new ProfilePageFrench(driver); + selectLanguagePage = new SelectLanguagePageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - profilePage = new ProfilePageKannada(driver); + selectLanguagePage = new SelectLanguagePageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - profilePage = new ProfilePageTamil(driver); + selectLanguagePage = new SelectLanguagePageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { - profilePage = new ProfilePageArabic(driver); + selectLanguagePage = new SelectLanguagePageArabic(driver); } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } - // assertTrue(profilePage.isProfileTitleDisplayed(),"Verify if profile title - // display on Profilepage"); - profilePage.clickOnLogoutButton(); + 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(); + for (String screen : screenOrder) { + if (screen.equals("consentdet") || screen.equals("consent")) { + if ("eng".equalsIgnoreCase(language)) { + consentPage = new ConsentPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + consentPage = new ConsentPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + consentPage = new ConsentPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + consentPage = new ConsentPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + consentPage = new ConsentPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + consentPage = new ConsentPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(consentPage.isPageDisplayed("consentdet"), "Verify if Consent page is loaded"); + assertTrue(consentPage.isCheckBoxReadable(), "Verify if the check box in readable"); + + assertTrue(consentPage.isInformedButtonEnabled(), "Verify if informed button enabled"); + consentPage.clickOnInformedButton(); + } else if (screen.equals("DemographicDetails")) { + + if ("eng".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(demographicPage.isPageDisplayed("DemographicDetails"), + "Verify if demographic details page is displayed"); + + demographicPage.fillDemographicDetailsPage("adult"); + + demographicPage.clickOnContinueButton(); + } else if (screen.equals("Documents")) { + if ("eng".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(documentUploadPage.isDoccumentUploadPageDisplayed(), + "Verify if doccumentupload page is displayed"); + documentUploadPage.uploadDoccuments("adult", "ReferenceNumber"); + documentUploadPage.clickOnContinueButton(); + + } else if (screen.equals("BiometricDetails")) { + if ("eng".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + if ("eng".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), + "Verify if biometric details page is displayed"); + if (FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), + "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(); - profilePage.clickOnLogoutButton(); + applicantBiometricsPage.clickOnScanButton(); + assertTrue(applicantBiometricsPage.isIrisScan(), "Verify if iris scan 3rd 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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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 ("eng".equalsIgnoreCase(language)) { + previewPage = new PreviewPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + previewPage = new PreviewPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + previewPage = new PreviewPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + previewPage = new PreviewPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + previewPage = new PreviewPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + previewPage = new PreviewPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + assertTrue(previewPage.isNewRegistrationTitleDisplayed(), "Verify if new Registration title is displayed"); + assertTrue(previewPage.isBothIrisImageDisplayed(), "Verify if both iris image In PreviewPage is displayed"); + assertTrue(previewPage.isDemographicInformationInPreviewPageDisplayed(), + "Verify if Demographic Information In PreviewPage is displayed"); + assertTrue(previewPage.isBiometricsInformationInPreviewPagePageDisplayed(), + "Verify if Biometrics Information In PreviewPage is displayed"); + assertTrue(previewPage.isDocumentsInformationInPreviewPageDisplayed(), + "Verify if Documents Information In PreviewPage is displayed"); + previewPage.clickOnDemographicDetailsTitle(); + + for (String screen : screenOrder) { + if (screen.equals("DemographicDetails")) { + if ("eng".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + demographicPage = new DemographicDetailsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + demographicPage.fillDemographicDetailsPage("minor"); + + demographicPage.clickOnContinueButton(); + } else if (screen.equals("Documents")) { + if ("eng".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + documentUploadPage = new DocumentUploadPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + documentUploadPage.uploadDoccuments("minor", "withoutReferenceNumber"); + + documentUploadPage.uploadDoccuments("minor", "withoutReferenceNumber"); + + documentUploadPage.clickOnContinueButton(); + } else if (screen.equals("BiometricDetails")) { + if ("eng".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + biometricDetailsPage = new BiometricDetailsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + if ("eng".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + applicantBiometricsPage = new ApplicantBiometricsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + if (FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIrisScan(); + + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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 ("eng".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + introducerBiometricPage = new IntroducerBiometricPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + FetchUiSpec.eye = "no"; + FetchUiSpec.rightHand = "no"; + FetchUiSpec.leftHand = "no"; + FetchUiSpec.thumb = "no"; + FetchUiSpec.face = "no"; + FetchUiSpec.getBiometricDetails("introducerBiometrics"); + if (FetchUiSpec.eye.equals("yes")) { + biometricDetailsPage.clickOnIntroducerIrisScan(); + + introducerBiometricPage.clickOnScanButton(); + + assertTrue(introducerBiometricPage.isIrisScan(), "Verify if iris scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); + introducerBiometricPage.clickOnNextButton(); + } + // righthand + if (FetchUiSpec.rightHand.equals("yes")) { + assertTrue(introducerBiometricPage.isRightHandScanTitleDisplayed(), + "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.isLeftHandScanTitleDisplayed(), + "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.isThumbsScanTitleDisplayed(), + "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.isFaceScanTitleDisplayed(), + "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 ("eng".equalsIgnoreCase(language)) { + previewPage = new PreviewPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + previewPage = new PreviewPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + previewPage = new PreviewPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + previewPage = new PreviewPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + previewPage = new PreviewPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + previewPage = new PreviewPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + 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"); + + String Aid = previewPage.getAID(); + previewPage.clickOnContinueButton(); + if ("eng".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + authenticationPage = new AuthenticationPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(authenticationPage.isAuthenticationPageDisplayed(), + "Verify if authentication details page is displayed"); + + authenticationPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + authenticationPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + authenticationPage.clickOnAuthenticatenButton(); + if ("eng".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + acknowledgementPage = new AcknowledgementPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(), + "Verify if acknowledgement details page is displayed"); + + acknowledgementPage.clickOnGoToHomeButton(); + + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded after click on cancel button"); + registrationTasksPage.clickOnOperationalTasksTitle(); + if ("eng".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + operationalTaskPage = new OperationalTaskPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); + assertTrue(operationalTaskPage.isPendingApprovalTitleDisplayed(), "Verify if pending approval tite displayed"); + operationalTaskPage.clickPendingApprovalTitle(); + + if ("eng".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + pendingApproval = new PendingApprovalArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + pendingApproval.enterAID(Aid); + + pendingApproval.clickOnAID(Aid); + + pendingApproval.clickOnApproveButton(); + pendingApproval.clickOnClosePopUpButton(); + + pendingApproval.clickOnCheckBox(); + + assertTrue(pendingApproval.isAuthenticateButtonEnabled(), + "Verify if authenticate button is enable after selecting packet"); + + boolean isPageDisplayed = false; + for (int i = 0; i < 3; i++) { + pendingApproval.clickOnAuthenticateButton(); + Thread.sleep(2000); + if (pendingApproval.isSupervisorAuthenticationTitleDisplayed()) { + isPageDisplayed = true; + break; + } + } + assertTrue(isPageDisplayed, "Supervisor Authentication page not displayed after retries"); + + assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), + "Verify if error empty username submit button enabled"); + + pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); + pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); + pendingApproval.clickOnSubmitButton(); + + pendingApproval.clickOnBackButton(); + + operationalTaskPage.clickApplicationUploadTitle(); + if ("eng".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + manageApplicationsPage = new ManageApplicationsPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), + "Verify if manage Applications Page displayed"); + manageApplicationsPage.enterAID(Aid); + + assertTrue(manageApplicationsPage.isSearchAIDDisplayed(Aid), "Verify if Search Aid should displayed"); + manageApplicationsPage.clickOnSearchCheckBox(); + manageApplicationsPage.clickOnUploadButton(); - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); } } diff --git a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationAdultException.java b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationAdultException.java index 86a138dad..ec656db64 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationAdultException.java +++ b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationAdultException.java @@ -47,7 +47,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; @@ -92,7 +92,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; @@ -107,7 +107,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; @@ -120,7 +120,7 @@ public class NewRegistrationAdultException extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify adult new registration exception") public void newRegistrationAdultException() throws InterruptedException { FetchUiSpec.getUiSpec("newProcess"); FetchUiSpec.getBiometricDetails("individualBiometrics"); @@ -180,6 +180,7 @@ public void newRegistrationAdultException() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); registrationTasksPage.clickOnNewRegistrationButton(); if ("eng".equalsIgnoreCase(language)) { selectLanguagePage = new SelectLanguagePageEnglish(driver); @@ -242,15 +243,15 @@ public void newRegistrationAdultException() throws InterruptedException { demographicPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -578,8 +579,7 @@ public void newRegistrationAdultException() throws InterruptedException { break; } } - assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), - "Verify if Supervisor Authentication page displayed"); + assertTrue(isPageDisplayed, "Verify if Supervisor Authentication page displayed after retries"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); @@ -639,9 +639,7 @@ public void newRegistrationAdultException() throws InterruptedException { // display on Profilepage"); profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); - - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); + assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayed in Selected language"); } } diff --git a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationInfant.java b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationInfant.java index eee97b40d..160a7c7f7 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationInfant.java +++ b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationInfant.java @@ -49,7 +49,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; @@ -97,7 +97,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; @@ -113,7 +113,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; @@ -127,7 +127,7 @@ public class NewRegistrationInfant extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify infant new registration") public void newRegistrationInfant() throws InterruptedException { FetchUiSpec.getUiSpec("newProcess"); FetchUiSpec.getBiometricDetails("individualBiometrics"); @@ -189,6 +189,7 @@ public void newRegistrationInfant() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickOnNewRegistrationButton(); @@ -253,15 +254,15 @@ public void newRegistrationInfant() throws InterruptedException { demographicPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -388,7 +389,8 @@ public void newRegistrationInfant() throws InterruptedException { // face if (FetchUiSpec.face.equals("yes")) { introducerBiometricPage.clickOnScanButton(); - + assertTrue(introducerBiometricPage.isFaceScan(), "Verify if Face scan 1st attempt"); + introducerBiometricPage.closeScanCapturePopUp(); assertTrue(introducerBiometricPage.isNextButtonDisplayed(), "Verify if next button displayed"); introducerBiometricPage.clickOnNextButton(); @@ -555,9 +557,6 @@ public void newRegistrationInfant() throws InterruptedException { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } profilePage.clickOnLogoutButton(); - - profilePage.clickOnLogoutButton(); - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); } diff --git a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationMinor.java b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationMinor.java index 36053d3b7..b1935f574 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationMinor.java +++ b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationMinor.java @@ -37,7 +37,7 @@ import regclient.pages.arabic.BiometricDetailsPageArabic; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.arabic.DemographicDetailsPageArabic; import regclient.pages.arabic.DocumentUploadPageArabic; @@ -97,7 +97,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; @@ -113,7 +113,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; @@ -127,7 +127,7 @@ public class NewRegistrationMinor extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify minor new registration") public void newRegistrationMinor() throws InterruptedException { FetchUiSpec.getUiSpec("newProcess"); FetchUiSpec.getBiometricDetails("individualBiometrics"); @@ -188,7 +188,7 @@ public void newRegistrationMinor() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } - + registrationTasksPage.handleLocationPermission(); registrationTasksPage.clickOnNewRegistrationButton(); if ("eng".equalsIgnoreCase(language)) { selectLanguagePage = new SelectLanguagePageEnglish(driver); @@ -251,15 +251,15 @@ public void newRegistrationMinor() throws InterruptedException { demographicPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -393,8 +393,7 @@ public void newRegistrationMinor() throws InterruptedException { FetchUiSpec.getBiometricDetails("introducerBiometrics"); if (FetchUiSpec.eye.equals("yes")) { biometricDetailsPage.clickOnIntroducerIrisScan(); - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); + introducerBiometricPage.clickOnScanButton(); assertTrue(introducerBiometricPage.isIrisScan(), "Verify if iris scan 1st attempt"); @@ -403,12 +402,6 @@ public void newRegistrationMinor() throws InterruptedException { } // righthand if (FetchUiSpec.rightHand.equals("yes")) { - if (!FetchUiSpec.eye.equals("yes")) { - biometricDetailsPage.clickOnIntroducerRightHandScan(); - } - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isRightHandScanTitleDisplayed(), "Verify if right hand scan is displayed"); introducerBiometricPage.clickOnScanButton(); @@ -419,9 +412,6 @@ public void newRegistrationMinor() throws InterruptedException { } // lefthand if (FetchUiSpec.leftHand.equals("yes")) { - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplayed(), "Verify if applicant left hand scan title is displayed"); introducerBiometricPage.clickOnScanButton(); @@ -432,9 +422,6 @@ public void newRegistrationMinor() throws InterruptedException { } // thumb if (FetchUiSpec.thumb.equals("yes")) { - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isThumbsScanTitleDisplayed(), "Verify if thumbs scan page is displayed"); introducerBiometricPage.clickOnScanButton(); @@ -445,9 +432,6 @@ public void newRegistrationMinor() throws InterruptedException { } // face if (FetchUiSpec.face.equals("yes")) { - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isFaceScanTitleDisplayed(), "Verify if face scan page is displayed"); introducerBiometricPage.clickOnScanButton(); @@ -616,8 +600,6 @@ public void newRegistrationMinor() throws InterruptedException { } profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayed in Selected language"); } diff --git a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationMinorException.java b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationMinorException.java index 26cf6d8a7..d9df66ef2 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationMinorException.java +++ b/ui-test/src/main/java/regclient/androidTestCases/NewRegistrationMinorException.java @@ -51,7 +51,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; @@ -99,7 +99,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; @@ -115,7 +115,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; @@ -129,7 +129,7 @@ public class NewRegistrationMinorException extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify minor new registration exception") public void newRegistrationMinorException() throws InterruptedException { FetchUiSpec.getUiSpec("newProcess"); FetchUiSpec.getBiometricDetails("individualBiometrics"); @@ -190,6 +190,7 @@ public void newRegistrationMinorException() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickOnNewRegistrationButton(); @@ -262,15 +263,15 @@ public void newRegistrationMinorException() throws InterruptedException { demographicPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -729,9 +730,7 @@ public void newRegistrationMinorException() throws InterruptedException { } profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); - - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); + assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayed in Selected language"); } } diff --git a/ui-test/src/main/java/regclient/androidTestCases/PreRegFetchingPacket.java b/ui-test/src/main/java/regclient/androidTestCases/PreRegFetchingPacket.java index 5aa580674..b37843846 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/PreRegFetchingPacket.java +++ b/ui-test/src/main/java/regclient/androidTestCases/PreRegFetchingPacket.java @@ -51,7 +51,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; @@ -99,7 +99,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; @@ -115,7 +115,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; @@ -129,7 +129,7 @@ public class PreRegFetchingPacket extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify adult pre-reg fetching registration") public void adultPreRegFetching() throws InterruptedException { BasePage.disableAutoRotation(); FetchUiSpec.getUiSpec("newProcess"); @@ -191,6 +191,7 @@ public void adultPreRegFetching() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickOnNewRegistrationButton(); @@ -262,22 +263,22 @@ public void adultPreRegFetching() throws InterruptedException { demographicPage.fetchPreregApplicationId("adult"); - demographicPage.validateFetchedDemographicData(); +// demographicPage.validateFetchedDemographicData(); demographicPage.fillRemainDemographicDetailsPage("adult"); demographicPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -324,59 +325,78 @@ public void adultPreRegFetching() throws InterruptedException { if (FetchUiSpec.eye.equals("yes")) { biometricDetailsPage.clickOnIrisScan(); + assertTrue(applicantBiometricsPage.isApplicantBiometricsPageDisplayed(), + "Verify if applicant biometric page is displayed"); applicantBiometricsPage.clickOnScanButton(); - applicantBiometricsPage.closeScanCapturePopUp(); - - applicantBiometricsPage.clickOnScanButton(); - applicantBiometricsPage.closeScanCapturePopUp(); - - 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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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.isApplicantBiometricsPageDisplayed(), + "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 ("eng".equalsIgnoreCase(language)) { previewPage = new PreviewPageEnglish(driver); @@ -500,11 +520,12 @@ public void adultPreRegFetching() throws InterruptedException { pendingApproval.selectLatestAIdCheckBox(); - assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + assertTrue(pendingApproval.isAuthenticateButtonEnabled(), + "Verify if authenticate button is enable after selecting packet"); boolean isPageDisplayed = false; for (int i = 0; i < 3; i++) { - pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnAuthenticateButton(); Thread.sleep(2000); if (pendingApproval.isSupervisorAuthenticationTitleDisplayed()) { isPageDisplayed = true; @@ -513,14 +534,6 @@ public void adultPreRegFetching() throws InterruptedException { } assertTrue(isPageDisplayed, "Supervisor Authentication page not displayed after retries"); - pendingApproval.clickOnSubmitButton(); - assertTrue(pendingApproval.isInvalidemptyUsernameSumbitButtonEnbled(), - "Verify if error empty username submit button enabled"); - - pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser + "123"); - - assertTrue(pendingApproval.isInvalidUsernameMessageDisplayed(), - "Verify if invalid username messgae is displayed"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); @@ -547,9 +560,6 @@ public void adultPreRegFetching() throws InterruptedException { } assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), "Verify if manage Applications Page displayed"); - manageApplicationsPage.enterWrongAID(Aid + 123); - - assertTrue(manageApplicationsPage.isZeroApplicationDisplayed(), "Verify if wrong Aid should not display"); manageApplicationsPage.selectLatestAidCheckBox(); for (int i = 0; i < 3; i++) { @@ -578,15 +588,13 @@ public void adultPreRegFetching() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } - - profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); + } - @Test + @Test(priority = 1, description = "Verify minor pre-reg fetching registration") public void minorPreRegFetching() throws InterruptedException { BasePage.disableAutoRotation(); @@ -652,6 +660,7 @@ public void minorPreRegFetching() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickOnNewRegistrationButton(); @@ -672,10 +681,7 @@ public void minorPreRegFetching() throws InterruptedException { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } 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(), @@ -735,15 +741,15 @@ public void minorPreRegFetching() throws InterruptedException { } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -950,7 +956,6 @@ public void minorPreRegFetching() throws InterruptedException { biometricDetailsPage.clickOnContinueButton(); } - } if ("eng".equalsIgnoreCase(language)) { @@ -980,6 +985,7 @@ public void minorPreRegFetching() throws InterruptedException { // assertTrue(previewPage.isBiometricsInformationInPreviewPagePageDisplayed(),"Verify if Biometrics Information In PreviewPage is displayed"); String Aid = previewPage.getAID(); + previewPage.clickOnContinueButton(); if ("eng".equalsIgnoreCase(language)) { authenticationPage = new AuthenticationPageEnglish(driver); @@ -1071,11 +1077,12 @@ public void minorPreRegFetching() throws InterruptedException { pendingApproval.selectLatestAIdCheckBox(); - assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + assertTrue(pendingApproval.isAuthenticateButtonEnabled(), + "Verify if authenticate button is enable after selecting packet"); boolean isPageDisplayed = false; for (int i = 0; i < 3; i++) { - pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnAuthenticateButton(); Thread.sleep(2000); if (pendingApproval.isSupervisorAuthenticationTitleDisplayed()) { isPageDisplayed = true; @@ -1084,14 +1091,6 @@ public void minorPreRegFetching() throws InterruptedException { } assertTrue(isPageDisplayed, "Supervisor Authentication page not displayed after retries"); - pendingApproval.clickOnSubmitButton(); - assertTrue(pendingApproval.isInvalidemptyUsernameSumbitButtonEnbled(), - "Verify if error empty username submit button enabled"); - - pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser + "123"); - - assertTrue(pendingApproval.isInvalidUsernameMessageDisplayed(), - "Verify if invalid username messgae is displayed"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); @@ -1118,9 +1117,6 @@ public void minorPreRegFetching() throws InterruptedException { } assertTrue(manageApplicationsPage.isManageApplicationPageDisplayed(), "Verify if manage Applications Page displayed"); - manageApplicationsPage.enterWrongAID(Aid + 123); - - assertTrue(manageApplicationsPage.isZeroApplicationDisplayed(), "Verify if wrong Aid should not display"); manageApplicationsPage.selectLatestAidCheckBox(); for (int i = 0; i < 3; i++) { @@ -1149,17 +1145,13 @@ public void minorPreRegFetching() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } - // 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 + @Test(priority = 2, description = "Verify infant pre-reg fetching registration") public void infantPreRegFetching() throws InterruptedException { BasePage.disableAutoRotation(); @@ -1225,6 +1217,7 @@ public void infantPreRegFetching() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickOnNewRegistrationButton(); @@ -1308,15 +1301,15 @@ public void infantPreRegFetching() throws InterruptedException { } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -1366,7 +1359,6 @@ public void infantPreRegFetching() throws InterruptedException { assertTrue(applicantBiometricsPage.isFaceScan(), "Verify if face captured and 2 attempts left text is displayed"); applicantBiometricsPage.closeScanCapturePopUp(); - ; biometricDetailsPage = applicantBiometricsPage.clickOnNextButton(); assertTrue(biometricDetailsPage.isBiometricDetailsPageDisplayed(), @@ -1575,11 +1567,12 @@ public void infantPreRegFetching() throws InterruptedException { pendingApproval.selectLatestAIdCheckBox(); - assertTrue(pendingApproval.isSubmitButtonEnabled(), "Verify if submit button is enable after selecting packet"); + assertTrue(pendingApproval.isAuthenticateButtonEnabled(), + "Verify if authenticate button is enable after selecting packet"); boolean isPageDisplayed = false; for (int i = 0; i < 3; i++) { - pendingApproval.clickOnSubmitButton(); + pendingApproval.clickOnAuthenticateButton(); Thread.sleep(2000); if (pendingApproval.isSupervisorAuthenticationTitleDisplayed()) { isPageDisplayed = true; @@ -1644,8 +1637,6 @@ public void infantPreRegFetching() throws InterruptedException { } profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); } diff --git a/ui-test/src/main/java/regclient/androidTestCases/ResetPassword.java b/ui-test/src/main/java/regclient/androidTestCases/ResetPassword.java index adfb4e115..cb9eba188 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/ResetPassword.java +++ b/ui-test/src/main/java/regclient/androidTestCases/ResetPassword.java @@ -34,8 +34,7 @@ public class ResetPassword extends AndroidBaseTest { - @SuppressWarnings("null") - @Test(priority = 1) + @Test(priority = 0, description = "Verify reset password") public void resetPassword() throws IOException { BasePage.disableAutoRotation(); LoginPage loginPage = null; @@ -83,6 +82,7 @@ public void resetPassword() throws IOException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickSynchronizeDataButton(); @@ -107,16 +107,13 @@ public void resetPassword() throws IOException { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); - loginPage.enterUserName(KeycloakUserManager.onboardUser); + loginPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); loginPage.clickOnNextButton(); loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); - loginPage.clickOnSkipToHomeButton(); - assertTrue(registrationTasksPage.isProfileTitleDisplayed(), "Verify if profile title display on homepage"); registrationTasksPage.clickProfileButton(); @@ -139,27 +136,20 @@ public void resetPassword() throws IOException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + + keycloakPage = new KeycloakPage(driver); - assertTrue(keycloakPage.openKeycloakWebView(), "Verify if keycloak login page displayed"); - - keycloakPage.enterUserName(KeycloakUserManager.onboardUser); - + keycloakPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); keycloakPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); - keycloakPage.clickOnLoginButton(); assertTrue(keycloakPage.openKeycloakPassword(), "Verify if keycloak login page displayed"); - keycloakPage.clickOnPasswordOption(); keycloakPage.enterExistPassword(ArcConfigManager.getIAMUsersPassword()); - keycloakPage.enterNewPassword(ArcConfigManager.getIAMUsersPassword() + "121"); - keycloakPage.enterConfirmPassword(ArcConfigManager.getIAMUsersPassword() + "121"); - keycloakPage.clickOnSaveButton(); - assertTrue(keycloakPage.isPasswordUpdatedMessageDisplayed(), "Verify if password updated message displayed in keycloak page"); @@ -172,7 +162,7 @@ public void resetPassword() throws IOException { BasePage.disableWifiAndData(); // Try to login using new password in offline mode. - loginPage.enterUserName(KeycloakUserManager.onboardUser); + loginPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); loginPage.clickOnNextButton(); loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword() + "121"); @@ -184,49 +174,167 @@ public void resetPassword() throws IOException { loginPage.clickOnBackButton(); // Try to login using old password in offline mode. - loginPage.enterUserName(KeycloakUserManager.onboardUser); + loginPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); loginPage.clickOnNextButton(); loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); - loginPage.clickOnSkipToHomeButton(); registrationTasksPage.clickProfileButton(); profilePage.clickOnLogoutButton(); BasePage.enableWifiAndData(); // Try to login using new password in online mode. - loginPage.enterUserName(KeycloakUserManager.onboardUser); + loginPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); loginPage.clickOnNextButton(); loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword() + "121"); loginPage.clickOnloginButton(); - loginPage.clickOnSkipToHomeButton(); registrationTasksPage.clickProfileButton(); profilePage.clickOnLogoutButton(); BasePage.disableWifiAndData(); // Try to login using new password in offline mode. - loginPage.enterUserName(KeycloakUserManager.onboardUser); + loginPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); loginPage.clickOnNextButton(); loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword() + "121"); loginPage.clickOnloginButton(); - loginPage.clickOnSkipToHomeButton(); registrationTasksPage.clickProfileButton(); profilePage.clickOnLogoutButton(); // Try to login using old password in offline mode. - loginPage.enterUserName(KeycloakUserManager.onboardUser); + loginPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); loginPage.clickOnNextButton(); loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); loginPage.clickOnloginButton(); assertTrue(loginPage.isPasswordIncorrectErrorMessageDisplayed(), "verify if error message should be displayeded as password incorrect!"); + BasePage.enableWifiAndData(); } + + @Test(priority = 1, description = "Reset to default password", dependsOnMethods = "resetPassword") + public void resetToDefaultPassword() throws IOException { + BasePage.disableAutoRotation(); + LoginPage loginPage = null; + RegistrationTasksPage registrationTasksPage = null; + ProfilePage profilePage = null; + KeycloakPage keycloakPage = null; + + final String language = TestDataReader.readData("language"); + + if ("eng".equalsIgnoreCase(language)) { + loginPage = new LoginPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + loginPage = new LoginPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + loginPage = new LoginPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + loginPage = new LoginPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + loginPage = new LoginPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + loginPage.selectLanguage(); + + loginPage.enterUserName(KeycloakUserManager.moduleSpecificUser); + loginPage.clickOnNextButton(); + loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword()); + loginPage.clickOnloginButton(); + + if ("eng".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + registrationTasksPage.handleLocationPermission(); + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), + "Verify if registration tasks page is loaded"); + registrationTasksPage.clickSynchronizeDataButton(); + registrationTasksPage.clickProfileButton(); + + if ("eng".equalsIgnoreCase(language)) { + profilePage = new ProfilePageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + profilePage = new ProfilePageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + profilePage = new ProfilePageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + profilePage = new ProfilePageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + profilePage = new ProfilePageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + profilePage = new ProfilePageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + profilePage.clickOnLogoutButton(); + assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); + loginPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); + loginPage.clickOnNextButton(); + + loginPage.enterPassword(ArcConfigManager.getIAMUsersPassword() + "121"); + loginPage.clickOnloginButton(); + + assertTrue(registrationTasksPage.isProfileTitleDisplayed(), "Verify if profile title display on homepage"); + registrationTasksPage.clickProfileButton(); + + assertTrue(profilePage.isResetPasswordButtonDisplayed(), + "Verify if reset password button displayed in profile page"); + profilePage.clickOnResetPasswordButton(); + + if ("eng".equalsIgnoreCase(language)) { + profilePage = new ProfilePageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + profilePage = new ProfilePageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + profilePage = new ProfilePageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + profilePage = new ProfilePageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + profilePage = new ProfilePageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + profilePage = new ProfilePageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); + } + + keycloakPage = new KeycloakPage(driver); + assertTrue(keycloakPage.openKeycloakWebView(), "Verify if keycloak login page displayed"); + keycloakPage.enterUserName(KeycloakUserManager.onlyOperatorRoleUser); + keycloakPage.enterPassword(ArcConfigManager.getIAMUsersPassword() + "121"); + keycloakPage.clickOnLoginButton(); + + assertTrue(keycloakPage.openKeycloakPassword(), "Verify if keycloak login page displayed"); + + keycloakPage.clickOnPasswordOption(); + keycloakPage.enterExistPassword(ArcConfigManager.getIAMUsersPassword() + "121"); + keycloakPage.enterNewPassword(ArcConfigManager.getIAMUsersPassword()); + keycloakPage.enterConfirmPassword(ArcConfigManager.getIAMUsersPassword()); + keycloakPage.clickOnSaveButton(); + assertTrue(keycloakPage.isPasswordUpdatedMessageDisplayed(), + "Verify if password updated message displayed in keycloak page"); + + keycloakPage.clickOnSignoutButton(); + assertTrue(keycloakPage.resumeArcApplication(), "Verify if logout displayed in profile page"); + profilePage.clickOnLogoutButton(); + } } diff --git a/ui-test/src/main/java/regclient/androidTestCases/Settings.java b/ui-test/src/main/java/regclient/androidTestCases/Settings.java index 7238d8545..a15757787 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/Settings.java +++ b/ui-test/src/main/java/regclient/androidTestCases/Settings.java @@ -12,45 +12,60 @@ import regclient.page.BasePage; import regclient.page.LoginPage; import regclient.page.MockSBIPage; +import regclient.page.OperationalTaskPage; import regclient.page.ProfilePage; import regclient.page.RegistrationTasksPage; import regclient.page.SettingsPage; +import regclient.page.UpdateOperatorBiometricspage; import regclient.pages.arabic.LoginPageArabic; +import regclient.pages.arabic.OperationalTaskPageArabic; import regclient.pages.arabic.ProfilePageArabic; import regclient.pages.arabic.RegistrationTasksPageArabic; import regclient.pages.arabic.SettingsPageArabic; +import regclient.pages.arabic.UpdateOperatorBiometricspageArabic; import regclient.pages.english.LoginPageEnglish; +import regclient.pages.english.OperationalTaskPageEnglish; import regclient.pages.english.ProfilePageEnglish; import regclient.pages.english.RegistrationTasksPageEnglish; import regclient.pages.english.SettingsPageEnglish; +import regclient.pages.english.UpdateOperatorBiometricspageEnglish; import regclient.pages.french.LoginPageFrench; +import regclient.pages.french.OperationalTaskPageFrench; import regclient.pages.french.ProfilePageFrench; import regclient.pages.french.RegistrationTasksPageFrench; import regclient.pages.french.SettingsPageFrench; +import regclient.pages.french.UpdateOperatorBiometricspageFrench; import regclient.pages.hindi.LoginPageHindi; +import regclient.pages.hindi.OperationalTaskPageHindi; import regclient.pages.hindi.ProfilePageHindi; import regclient.pages.hindi.RegistrationTasksPageHindi; import regclient.pages.hindi.SettingsPageHindi; +import regclient.pages.hindi.UpdateOperatorBiometricspageHindi; import regclient.pages.kannada.LoginPageKannada; +import regclient.pages.kannada.OperationalTaskPageKannada; import regclient.pages.kannada.ProfilePageKannada; import regclient.pages.kannada.RegistrationTasksPageKannada; import regclient.pages.kannada.SettingsPageKannada; +import regclient.pages.kannada.UpdateOperatorBiometricspageKannada; import regclient.pages.tamil.LoginPageTamil; +import regclient.pages.tamil.OperationalTaskPageTamil; import regclient.pages.tamil.ProfilePageTamil; import regclient.pages.tamil.RegistrationTasksPageTamil; import regclient.pages.tamil.SettingsPageTamil; +import regclient.pages.tamil.UpdateOperatorBiometricspageTamil; import regclient.utils.TestDataReader; public class Settings extends AndroidBaseTest { - @SuppressWarnings("null") - @Test + @Test(priority = 0, description = "Verify machine settings functionality") public void settings() throws InterruptedException { BasePage.disableAutoRotation(); LoginPage loginPage = null; RegistrationTasksPage registrationTasksPage = null; SettingsPage settingsPage = null; + OperationalTaskPage operationalTaskPage = null; + UpdateOperatorBiometricspage UpdateOperatorBiometricspage = null; final String language = TestDataReader.readData("language"); if ("eng".equalsIgnoreCase(language)) { @@ -93,8 +108,12 @@ public void settings() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); + + assertTrue(registrationTasksPage.isSettingsButtonDisplayed(), "Verify if settings button displayed"); + registrationTasksPage.clickOnSettingsButton(); if ("eng".equalsIgnoreCase(language)) { @@ -163,26 +182,21 @@ public void settings() throws InterruptedException { assertTrue(settingsPage.isScanNowButtonDisplayed(), "Verify if scan now button displayed"); - // Verify Global config Settings Tab - -// settingsPage.clickOnGlobalConfigSettingsTab(); -// -// assertTrue(settingsPage.isGlobalConfigSettingsHeaderDisplayed(), -// "Verify if global config settings header Displayed"); -// -// settingsPage.clickOnSubmitButton(); -// -// assertTrue(settingsPage.isSubmitChangesPopupDisplayed(), "Verify if no changes to save Displayed"); -// -// settingsPage.clickOnChangesConfirmButton(); -// -// assertTrue(settingsPage.isNoChangesToSaveDisplayed(), "Verify if no changes to save Displayed"); -// -// settingsPage.clickOnSubmitButton(); -// - // Verify Scheduled Job Settings Tab -// settingsPage.clickOnScheduledJobsSettingsTab(); +// Verify Scheduled Job Settings Tab + settingsPage.clickOnScheduledJobsSettingsTab(); + + assertTrue(settingsPage.isScheduledJobSettingsPageHeaderDisplayed(), + "Verify if scheduled job settings header Displayed"); + + assertTrue(settingsPage.isMasterDataSyncCardDisplayed(), "Verify if Masterdata Sync Card Displayed"); + + assertTrue(settingsPage.validateJobCardFields("Master Data Sync"), "Validate job card fields"); + + settingsPage.clickOnMasterDataSyncButton(); + +// assertTrue(settingsPage.isToastVisible("Master Data Sync Completed"), "Toast not found!"); } + } diff --git a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUINUpdateDemographicDetails.java b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUINUpdateDemographicDetails.java index dff2bb49e..4e2b6a57e 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUINUpdateDemographicDetails.java +++ b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUINUpdateDemographicDetails.java @@ -50,7 +50,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; @@ -98,7 +98,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; @@ -114,7 +114,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; @@ -126,10 +126,10 @@ import regclient.pages.tamil.UpdateUINPageTamil; import regclient.utils.TestDataReader; -public class UpdateMyUINUpdateDemographicDetails extends AndroidBaseTest { +public class UpdateMyUinUpdateDemographicDetails extends AndroidBaseTest { - @Test - public void updateMyUINUpdateDemographicDetails() throws InterruptedException { + @Test(priority = 0, description = "Verify demographic update in update my UIN") + public void updateMyUinUpdateDemographicDetails() throws InterruptedException { FetchUiSpec.getUiSpec("updateProcess"); List screenOrder = FetchUiSpec.getAllScreenOrder(); BasePage.disableAutoRotation(); @@ -188,6 +188,7 @@ public void updateMyUINUpdateDemographicDetails() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickUpdateMyUINButton(); @@ -343,15 +344,15 @@ public void updateMyUINUpdateDemographicDetails() throws InterruptedException { biometricDetailsPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -492,8 +493,7 @@ public void updateMyUINUpdateDemographicDetails() throws InterruptedException { } } - assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), - "Verify if Supervisor Authentication page displayed"); + assertTrue(isPageDisplayed, "Supervisor Authentication page not displayed after retries"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); pendingApproval.clickOnSubmitButton(); @@ -553,9 +553,6 @@ public void updateMyUINUpdateDemographicDetails() throws InterruptedException { // 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/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinInfant.java b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinInfant.java index b62b1e85a..c6bb23ff8 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinInfant.java +++ b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinInfant.java @@ -51,7 +51,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; @@ -102,7 +102,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; @@ -119,7 +119,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; @@ -134,7 +134,7 @@ public class UpdateMyUinInfant extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify infant UIN update") public void updateMyUinInfant() throws InterruptedException { FetchUiSpec.getUiSpec("updateProcess"); BasePage.disableAutoRotation(); @@ -195,6 +195,7 @@ public void updateMyUinInfant() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); registrationTasksPage.clickUpdateMyUINButton(); if ("eng".equalsIgnoreCase(language)) { @@ -328,11 +329,7 @@ public void updateMyUinInfant() throws InterruptedException { applicantBiometricsPage.clickOnScanButton(); if (!applicantBiometricsPage.isFaceScan()) { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } + Thread.sleep(2000); applicantBiometricsPage.clickOnScanButton(); } @@ -361,11 +358,7 @@ public void updateMyUinInfant() throws InterruptedException { introducerBiometricPage.clickOnScanButton(); if (!introducerBiometricPage.isIrisScan()) { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } + Thread.sleep(2000); introducerBiometricPage.clickOnScanButton(); } @@ -378,15 +371,15 @@ public void updateMyUinInfant() throws InterruptedException { } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -508,9 +501,6 @@ public void updateMyUinInfant() throws InterruptedException { } assertTrue(isPageDisplayed, "Supervisor Authentication page not displayed after retries"); - assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), - "Verify if error empty username submit button enabled"); - pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); pendingApproval.clickOnSubmitButton(); @@ -560,9 +550,7 @@ public void updateMyUinInfant() throws InterruptedException { profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); - - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); + assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayed in Selected language"); } diff --git a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinMinor.java b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinMinor.java index 017a8e81a..ec11ea6fb 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinMinor.java +++ b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinMinor.java @@ -51,7 +51,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.IntroducerBiometricPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; @@ -102,7 +102,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.IntroducerBiometricPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; @@ -119,7 +119,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.IntroducerBiometricPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; @@ -134,7 +134,7 @@ public class UpdateMyUinMinor extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify minor UIN update") public void updateMyUinMinor() throws InterruptedException { FetchUiSpec.getUiSpec("updateProcess"); FetchUiSpec.getBiometricDetails("individualBiometrics"); @@ -196,6 +196,7 @@ public void updateMyUinMinor() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickUpdateMyUINButton(); @@ -437,12 +438,6 @@ public void updateMyUinMinor() throws InterruptedException { } // righthand if (FetchUiSpec.rightHand.equals("yes")) { - if (!FetchUiSpec.eye.equals("yes")) { - biometricDetailsPage.clickOnIntroducerRightHandScan(); - } - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isRightHandScanTitleDisplayed(), "Verify if right hand scan is displayed"); introducerBiometricPage.clickOnScanButton(); @@ -453,9 +448,6 @@ public void updateMyUinMinor() throws InterruptedException { } // lefthand if (FetchUiSpec.leftHand.equals("yes")) { - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isLeftHandScanTitleDisplayed(), "Verify if applicant left hand scan title is displayed"); introducerBiometricPage.clickOnScanButton(); @@ -466,9 +458,6 @@ public void updateMyUinMinor() throws InterruptedException { } // thumb if (FetchUiSpec.thumb.equals("yes")) { - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isThumbsScanTitleDisplayed(), "Verify if thumbs scan page is displayed"); introducerBiometricPage.clickOnScanButton(); @@ -479,9 +468,6 @@ public void updateMyUinMinor() throws InterruptedException { } // face if (FetchUiSpec.face.equals("yes")) { - assertTrue(introducerBiometricPage.isIntroducerBiometricsPageDisplayed(), - "Verify if introducer biometric page is displayed"); - assertTrue(introducerBiometricPage.isFaceScanTitleDisplayed(), "Verify if face scan page is displayed"); introducerBiometricPage.clickOnScanButton(); @@ -494,15 +480,15 @@ public void updateMyUinMinor() throws InterruptedException { biometricDetailsPage.clickOnContinueButton(); } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -578,8 +564,6 @@ public void updateMyUinMinor() throws InterruptedException { } assertTrue(acknowledgementPage.isAcknowledgementPageDisplayed(), "Verify if acknowledgement details page is displayed"); - // assertTrue(acknowledgementPage.isQrCodeImageDisplayed(),"Verify if qr code - // image is displayed"); acknowledgementPage.clickOnGoToHomeButton(); @@ -645,8 +629,7 @@ public void updateMyUinMinor() throws InterruptedException { } } - assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), - "Verify if Supervisor Authentication page displayed"); + assertTrue(isPageDisplayed, "Verify if Supervisor Authentication page displayed after retries"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); pendingApproval.clickOnSubmitButton(); @@ -703,13 +686,10 @@ public void updateMyUinMinor() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } - // 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"); + assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayed in Selected language"); } diff --git a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateBiometrics.java b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateBiometrics.java index d88a518fc..9b61574ff 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateBiometrics.java +++ b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateBiometrics.java @@ -49,7 +49,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; @@ -97,7 +97,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; @@ -113,7 +113,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; @@ -127,8 +127,8 @@ public class UpdateMyUinUpdateBiometrics extends AndroidBaseTest { - @Test - public void updateMyUINUpdatebiometrics() throws InterruptedException { + @Test(priority = 0, description = "Verify biometric update in update my UIN") + public void updateMyUinUpdateBiometrics() throws InterruptedException { FetchUiSpec.getUiSpec("updateProcess"); List screenOrder = FetchUiSpec.getAllScreenOrder(); BasePage.disableAutoRotation(); @@ -187,7 +187,7 @@ public void updateMyUINUpdatebiometrics() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } - + registrationTasksPage.handleLocationPermission(); registrationTasksPage.clickUpdateMyUINButton(); if ("eng".equalsIgnoreCase(language)) { @@ -376,15 +376,15 @@ public void updateMyUINUpdatebiometrics() throws InterruptedException { } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -508,8 +508,7 @@ public void updateMyUINUpdatebiometrics() throws InterruptedException { } } - assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), - "Verify if Supervisor Authentication page displayed"); + assertTrue(isPageDisplayed, "Verify if Supervisor Authentication page displayed after retries"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); pendingApproval.clickOnSubmitButton(); @@ -562,9 +561,7 @@ public void updateMyUINUpdatebiometrics() throws InterruptedException { } profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); - - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); + assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayed in Selected language"); } diff --git a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateDocuments.java b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateDocuments.java index b4aa465bc..978d614b4 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateDocuments.java +++ b/ui-test/src/main/java/regclient/androidTestCases/UpdateMyUinUpdateDocuments.java @@ -49,7 +49,7 @@ import regclient.pages.english.BiometricDetailsPageEnglish; import regclient.pages.english.ConsentPageEnglish; import regclient.pages.english.DemographicDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.pages.english.LoginPageEnglish; import regclient.pages.english.ManageApplicationsPageEnglish; import regclient.pages.english.OperationalTaskPageEnglish; @@ -97,7 +97,7 @@ import regclient.pages.kannada.BiometricDetailsPageKannada; import regclient.pages.kannada.ConsentPageKannada; import regclient.pages.kannada.DemographicDetailsPageKannada; -import regclient.pages.kannada.DocumentuploadPageKannada; +import regclient.pages.kannada.DocumentUploadPageKannada; import regclient.pages.kannada.LoginPageKannada; import regclient.pages.kannada.ManageApplicationsPageKannada; import regclient.pages.kannada.OperationalTaskPageKannada; @@ -113,7 +113,7 @@ import regclient.pages.tamil.BiometricDetailsPageTamil; import regclient.pages.tamil.ConsentPageTamil; import regclient.pages.tamil.DemographicDetailsPageTamil; -import regclient.pages.tamil.DocumentuploadPageTamil; +import regclient.pages.tamil.DocumentUploadPageTamil; import regclient.pages.tamil.LoginPageTamil; import regclient.pages.tamil.ManageApplicationsPageTamil; import regclient.pages.tamil.OperationalTaskPageTamil; @@ -127,7 +127,7 @@ public class UpdateMyUinUpdateDocuments extends AndroidBaseTest { - @Test + @Test(priority = 0, description = "Verify documents update in update my UIN") public void updateMyUinUpdateDocuments() throws InterruptedException { FetchUiSpec.getUiSpec("updateProcess"); List screenOrder = FetchUiSpec.getAllScreenOrder(); @@ -187,6 +187,7 @@ public void updateMyUinUpdateDocuments() throws InterruptedException { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickUpdateMyUINButton(); @@ -284,15 +285,15 @@ public void updateMyUinUpdateDocuments() throws InterruptedException { } else if (screen.equals("Documents")) { if ("eng".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageEnglish(driver); + documentuploadPage = new DocumentUploadPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageKannada(driver); + documentuploadPage = new DocumentUploadPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - documentuploadPage = new DocumentuploadPageTamil(driver); + documentuploadPage = new DocumentUploadPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { documentuploadPage = new DocumentUploadPageArabic(driver); } else { @@ -488,10 +489,7 @@ public void updateMyUinUpdateDocuments() throws InterruptedException { } } - assertTrue(pendingApproval.isSupervisorAuthenticationTitleDisplayed(), - "Verify if Supervisor Authentication page displayed"); -// assertFalse(pendingApproval.isSubmitButtonEnabled(), -// "Verify if submit button is enable after selecting packet"); + assertTrue(isPageDisplayed, "Supervisor Authentication page not displayed after retries"); pendingApproval.enterUserName(KeycloakUserManager.moduleSpecificUser); pendingApproval.enterPassword(ArcConfigManager.getIAMUsersPassword()); @@ -553,8 +551,6 @@ public void updateMyUinUpdateDocuments() throws InterruptedException { // display on Profilepage"); profilePage.clickOnLogoutButton(); - profilePage.clickOnLogoutButton(); - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); } diff --git a/ui-test/src/main/java/regclient/androidTestCases/logintest.java b/ui-test/src/main/java/regclient/androidTestCases/logintest.java index d0e9b4b18..9de86ffac 100644 --- a/ui-test/src/main/java/regclient/androidTestCases/logintest.java +++ b/ui-test/src/main/java/regclient/androidTestCases/logintest.java @@ -70,10 +70,10 @@ import regclient.utils.TestDataReader; @Test -public class logintest extends AndroidBaseTest { +public class Logintest extends AndroidBaseTest { - @Test(priority = 0) - public void ALoginTest() { + @Test(priority = 0, description = "Verify user login with valid credentials") + public void userloginTest() { BasePage.disableAutoRotation(); LoginPage loginPage = null; OperationalTaskPage operationalTaskPage = null; @@ -107,13 +107,6 @@ public void ALoginTest() { "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(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(KeycloakUserManager.moduleSpecificUser); @@ -161,15 +154,9 @@ public void ALoginTest() { } else { throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + registrationTasksPage.handleLocationPermission(); 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 ("eng".equalsIgnoreCase(language)) { @@ -195,19 +182,19 @@ public void ALoginTest() { registrationTasksPage.clickOnDashboardButton(); if ("eng".equalsIgnoreCase(language)) { - dashboardPage = new DashboardPageEnglish(driver); + dashboardPage = new DashboardPageEnglish(driver); } else if ("hin".equalsIgnoreCase(language)) { - dashboardPage = new DashboardPageHindi(driver); + dashboardPage = new DashboardPageHindi(driver); } else if ("fra".equalsIgnoreCase(language)) { - dashboardPage = new DashboardPageFrench(driver); + dashboardPage = new DashboardPageFrench(driver); } else if ("kan".equalsIgnoreCase(language)) { - dashboardPage = new DashboardPageKannada(driver); + dashboardPage = new DashboardPageKannada(driver); } else if ("tam".equalsIgnoreCase(language)) { - dashboardPage = new DashboardPageTamil(driver); + dashboardPage = new DashboardPageTamil(driver); } else if ("ara".equalsIgnoreCase(language)) { - dashboardPage = new DashboardPageArabic(driver); + dashboardPage = new DashboardPageArabic(driver); } else { - throw new IllegalStateException("Unsupported language in testdata.json: " + language); + throw new IllegalStateException("Unsupported language in testdata.json: " + language); } assertTrue(dashboardPage.isDashboardTitleDisplayed(), "Verify if dashboard page is loaded"); @@ -241,12 +228,13 @@ public void ALoginTest() { profilePage.clickOnLogoutButton(); - assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayeded in Selected language"); + assertTrue(loginPage.isLoginPageLoaded(), "verify if login page is displayed in Selected language"); } - @Test(priority = 1) - public void OnBoardTest() { + @Test(priority = 1, description = "Verify operator onboarding process") + public void onboardingTest() { + BasePage.disableAutoRotation(); LoginPage loginPage = null; OnBoardPage onBoardPage = null; @@ -273,7 +261,7 @@ public void OnBoardTest() { assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), "verify if the welcome msg in selected language displayed"); - loginPage.enterUserName(KeycloakUserManager.onboardUser); + loginPage.enterUserName(KeycloakUserManager.onboardingUser); assertTrue(loginPage.isNextButtonEnabled(), "verify if the next button enabled"); loginPage.clickOnNextButton(); @@ -286,37 +274,42 @@ public void OnBoardTest() { assertTrue(loginPage.isLoginButtonEnabled(), "Verify if the login button enabled"); loginPage.clickOnloginButton(); - if (TestDataReader.readData("language").equalsIgnoreCase("eng")) { + if ("eng".equalsIgnoreCase(language)) { onBoardPage = new OnBoardPageEnglish(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("hin")) { + } else if ("hin".equalsIgnoreCase(language)) { onBoardPage = new OnBoardPageHindi(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("fra")) { + } else if ("fra".equalsIgnoreCase(language)) { onBoardPage = new OnBoardPageFrench(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("kan")) { + } else if ("kan".equalsIgnoreCase(language)) { onBoardPage = new OnBoardPageKannada(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("tam")) { + } else if ("tam".equalsIgnoreCase(language)) { onBoardPage = new OnBoardPageTamil(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("ara")) { + } else if ("ara".equalsIgnoreCase(language)) { onBoardPage = new OnBoardPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); } assertTrue(onBoardPage.isGetOnBoardTitleDisplayed(), "Verify if on board page is loaded"); assertTrue(onBoardPage.isOnBoardWelcomeMessageDisplayed(), "Verify if on board page hello message is loaded"); onBoardPage.clickOnGetOnBoardTitle(); - if (TestDataReader.readData("language").equalsIgnoreCase("eng")) { - supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageEnglish(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("hin")) { - supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageHindi(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("fra")) { - supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageFrench(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("kan")) { - supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageKannada(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("tam")) { - supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageTamil(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("ara")) { - supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageArabic(driver); + if ("eng".equalsIgnoreCase(language)) { + supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + supervisorBiometricVerificationpage = new SupervisorBiometricVerificationpageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + assertTrue(supervisorBiometricVerificationpage.isSupervisorBiometricVerificationPageLoaded(), "Verify if operational tasks page is loaded"); @@ -395,7 +388,7 @@ public void OnBoardTest() { assertTrue(supervisorBiometricVerificationpage.isExceptionTypeTitleDisplayed(), "Verify if applicant biometric mark exception is displayed"); - supervisorBiometricVerificationpage.markOneFingreException(); + supervisorBiometricVerificationpage.markOneFingerException(); supervisorBiometricVerificationpage.clickOnThumbsScanTitle(); supervisorBiometricVerificationpage.clickOnScanButton(); @@ -447,7 +440,7 @@ public void OnBoardTest() { } - @Test(priority = 2) + @Test(priority = 2, description = "Verify operator biometric update functionality") public void updateOperatorBiometrics() { BasePage.disableAutoRotation(); LoginPage loginPage = null; @@ -455,19 +448,23 @@ public void updateOperatorBiometrics() { RegistrationTasksPage registrationTasksPage = null; UpdateOperatorBiometricspage UpdateOperatorBiometricspage = null; - if (TestDataReader.readData("language").equalsIgnoreCase("eng")) { + final String language = TestDataReader.readData("language"); + if ("eng".equalsIgnoreCase(language)) { loginPage = new LoginPageEnglish(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("hin")) { + } else if ("hin".equalsIgnoreCase(language)) { loginPage = new LoginPageHindi(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("fra")) { + } else if ("fra".equalsIgnoreCase(language)) { loginPage = new LoginPageFrench(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("kan")) { + } else if ("kan".equalsIgnoreCase(language)) { loginPage = new LoginPageKannada(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("tam")) { + } else if ("tam".equalsIgnoreCase(language)) { loginPage = new LoginPageTamil(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("ara")) { + } else if ("ara".equalsIgnoreCase(language)) { loginPage = new LoginPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + loginPage.selectLanguage(); assertTrue(loginPage.isWelcomeMessageInSelectedLanguageDisplayed(), @@ -485,53 +482,58 @@ public void updateOperatorBiometrics() { assertTrue(loginPage.isLoginButtonEnabled(), "Verify if the login button enabled"); loginPage.clickOnloginButton(); - if (TestDataReader.readData("language").equalsIgnoreCase("eng")) { + if ("eng".equalsIgnoreCase(language)) { registrationTasksPage = new RegistrationTasksPageEnglish(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("hin")) { + } else if ("hin".equalsIgnoreCase(language)) { registrationTasksPage = new RegistrationTasksPageHindi(driver); - - } else if (TestDataReader.readData("language").equalsIgnoreCase("fra")) { + } else if ("fra".equalsIgnoreCase(language)) { registrationTasksPage = new RegistrationTasksPageFrench(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("kan")) { + } else if ("kan".equalsIgnoreCase(language)) { registrationTasksPage = new RegistrationTasksPageKannada(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("tam")) { + } else if ("tam".equalsIgnoreCase(language)) { registrationTasksPage = new RegistrationTasksPageTamil(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("ara")) { + } else if ("ara".equalsIgnoreCase(language)) { registrationTasksPage = new RegistrationTasksPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); } + assertTrue(registrationTasksPage.isRegistrationTasksPageLoaded(), "Verify if registration tasks page is loaded"); registrationTasksPage.clickOnOperationalTasksTitle(); - if (TestDataReader.readData("language").equalsIgnoreCase("eng")) { + if ("eng".equalsIgnoreCase(language)) { operationalTaskPage = new OperationalTaskPageEnglish(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("hin")) { + } else if ("hin".equalsIgnoreCase(language)) { operationalTaskPage = new OperationalTaskPageHindi(driver); - - } else if (TestDataReader.readData("language").equalsIgnoreCase("fra")) { + } else if ("fra".equalsIgnoreCase(language)) { operationalTaskPage = new OperationalTaskPageFrench(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("kan")) { + } else if ("kan".equalsIgnoreCase(language)) { operationalTaskPage = new OperationalTaskPageKannada(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("tam")) { + } else if ("tam".equalsIgnoreCase(language)) { operationalTaskPage = new OperationalTaskPageTamil(driver); - } else if (TestDataReader.readData("language").equalsIgnoreCase("ara")) { + } else if ("ara".equalsIgnoreCase(language)) { operationalTaskPage = new OperationalTaskPageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); } 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("fra")) { - UpdateOperatorBiometricspage = new UpdateOperatorBiometricspageFrench(driver); - } 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); + if ("eng".equalsIgnoreCase(language)) { + UpdateOperatorBiometricspage = new UpdateOperatorBiometricspageEnglish(driver); + } else if ("hin".equalsIgnoreCase(language)) { + UpdateOperatorBiometricspage = new UpdateOperatorBiometricspageHindi(driver); + } else if ("fra".equalsIgnoreCase(language)) { + UpdateOperatorBiometricspage = new UpdateOperatorBiometricspageFrench(driver); + } else if ("kan".equalsIgnoreCase(language)) { + UpdateOperatorBiometricspage = new UpdateOperatorBiometricspageKannada(driver); + } else if ("tam".equalsIgnoreCase(language)) { + UpdateOperatorBiometricspage = new UpdateOperatorBiometricspageTamil(driver); + } else if ("ara".equalsIgnoreCase(language)) { + UpdateOperatorBiometricspage = new UpdateOperatorBiometricspageArabic(driver); + } else { + throw new IllegalStateException("Unsupported language in testdata.json: " + language); } assertTrue(UpdateOperatorBiometricspage.isUpdateOperatorBiometricsPageLoaded(), "Verify if update operator biometric page is loaded"); @@ -615,13 +617,6 @@ public void updateOperatorBiometrics() { "Verify if applicant biometric mark exception is displayed"); UpdateOperatorBiometricspage.markOneFingerException(); - // 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")); - UpdateOperatorBiometricspage.clickOnThumbsScanTitle(); UpdateOperatorBiometricspage.clickOnScanButton(); @@ -642,7 +637,8 @@ public void updateOperatorBiometrics() { if (FetchUiSpec.face.equals("yes")) { UpdateOperatorBiometricspage.clickOnFaceScanIcon(); - assertTrue(UpdateOperatorBiometricspage.isFaceScanTitleDisplayed(), "Verify if face scan page is displayed"); + assertTrue(UpdateOperatorBiometricspage.isFaceScanTitleDisplayed(), + "Verify if face scan page is displayed"); UpdateOperatorBiometricspage.clickOnMarkExceptionButton(); // assertTrue(UpdateOperatorBiometricspage.isMarkingExceptionsOnFaceIsNotAllowedTextDisplyed(),"Verify if is Marking Exceptions On Face Is Not Allowed Text Displyed"); @@ -661,14 +657,12 @@ public void updateOperatorBiometrics() { assertTrue(UpdateOperatorBiometricspage.isUpdateOperatorBiometricsPageLoaded(), "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 after click on verfiy and save button "); - assertTrue(UpdateOperatorBiometricspage.isOperatorBiometricsUpdatedPopupLoaded(), - "Verify if operator biometrics updated success message is displayed"); + + UpdateOperatorBiometricspage.updateBiometricsAndWaitPopup(); + UpdateOperatorBiometricspage.clickOnHomeButton(); assertTrue(operationalTaskPage.isOperationalTaskPageLoaded(), "Verify if operational Task Page is loaded"); diff --git a/ui-test/src/main/java/regclient/api/AdminTestUtil.java b/ui-test/src/main/java/regclient/api/AdminTestUtil.java index affb26672..29f396d8c 100644 --- a/ui-test/src/main/java/regclient/api/AdminTestUtil.java +++ b/ui-test/src/main/java/regclient/api/AdminTestUtil.java @@ -106,6 +106,7 @@ public static void initialize() { if (!initialized) { ArcConfigManager.init(); BaseTestCase.initialize(); + //user zone and center mapping KeycloakUserManager.createUsers(); mapUserToZone(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create"), propsKernel.getProperty("zone")); @@ -113,11 +114,28 @@ public static void initialize() { mapUserToCenter(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create"), propsKernel.getProperty("regCenterId")); mapCenter(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create")); + //user zone and center mapping KeycloakUserManager.createUsersWithOutDefaultRole(); mapUserToZone(KeycloakUserManager.onboardUser, propsKernel.getProperty("zone")); mapZone(KeycloakUserManager.onboardUser); mapUserToCenter(KeycloakUserManager.onboardUser, propsKernel.getProperty("regCenterId")); mapCenter(KeycloakUserManager.onboardUser); + //user zone and center mapping + KeycloakUserManager.createUsersWithOutSupervisorRole(); + mapUserToZone(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create-operator"), + propsKernel.getProperty("zone")); + mapZone(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create-operator")); + mapUserToCenter(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create-operator"), + propsKernel.getProperty("regCenterId")); + mapCenter(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create-operator")); + KeycloakUserManager.createOnboardingUser(); + mapUserToZone(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create-onboarder"), + propsKernel.getProperty("zone")); + mapZone(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create-onboarder")); + mapUserToCenter(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create-onboarder"), + propsKernel.getProperty("regCenterId")); + mapCenter(BaseTestCase.currentModule + "-" + propsKernel.getProperty("iam-users-to-create-onboarder")); + initialized = true; } } @@ -302,11 +320,6 @@ public static String createPreRegistration(String userId, String age) { String dob = LocalDate.now().minusYears(ageInt).format(DateTimeFormatter.ofPattern("yyyy/MM/dd")); -// if (category.equals("minor") || category.equals("infant")) { -// String introducerName = faker.name().fullName(); -// String introducerRID = TestDataReader.readData("RID"); // <-- Fetch valid RID -// -// } // Navigate to identity node JSONObject request = requestJson.getJSONObject("request"); JSONObject identity = request.getJSONObject("demographicDetails").getJSONObject("identity"); diff --git a/ui-test/src/main/java/regclient/api/ArcConfigManager.java b/ui-test/src/main/java/regclient/api/ArcConfigManager.java index bc5eb941b..8b1f09018 100644 --- a/ui-test/src/main/java/regclient/api/ArcConfigManager.java +++ b/ui-test/src/main/java/regclient/api/ArcConfigManager.java @@ -63,7 +63,15 @@ public static String getDbPassword() { public static String getDbSchema() { return getProperty("es_db_schema", ""); } - + + public static String getIAMUsersToCreateOperator() { + return getProperty("iam-users-to-create-operator", ""); + } + + public static String getIAMUsersToCreateOnboarder() { + return getProperty("iam-users-to-create-onboarder", ""); + } + public static String getiam_apienvuser() { return getProperty("apiEnvUser", ""); } @@ -113,4 +121,12 @@ public static String getHealthPortalUrl() { public static String gettestcases() { return getProperty("regclientScenariosToExecute", ""); } + + public static String getRolesForOperatorUser() { + return getProperty("rolesForOperator", ""); + } + + public static String getRolesForOnboardUser() { + return getProperty("rolesForOnboarder", ""); + } } \ No newline at end of file diff --git a/ui-test/src/main/java/regclient/api/BaseTestCase.java b/ui-test/src/main/java/regclient/api/BaseTestCase.java index 993e4bb8f..c46184fff 100644 --- a/ui-test/src/main/java/regclient/api/BaseTestCase.java +++ b/ui-test/src/main/java/regclient/api/BaseTestCase.java @@ -81,7 +81,7 @@ public static void initialize() { logger.info("We have created a Config Manager. Beginning to read properties!"); environment = ArcConfigManager.getiam_apienvuser(); - logger.info("Environemnt is ==== :" + environment); + logger.info("Environment is ==== :" + environment); ApplnURI = ArcConfigManager.getiam_apiinternalendpoint(); logger.info("Application URI ======" + ApplnURI); ApplnURIForKeyCloak = ArcConfigManager.getIAMUrl(); diff --git a/ui-test/src/main/java/regclient/api/FetchUiSpec.java b/ui-test/src/main/java/regclient/api/FetchUiSpec.java index d4b2c70c3..ea1625a59 100644 --- a/ui-test/src/main/java/regclient/api/FetchUiSpec.java +++ b/ui-test/src/main/java/regclient/api/FetchUiSpec.java @@ -399,7 +399,7 @@ public static List getAllGroupLabelUsingId(String page) { for (String id : idList) { if (FetchUiSpec.getRequiredTypeUsingId(id)) { String groupLabel = getGroupValueUsingId(id); - if (groupLabel.equals(null) || groupLabel.equals("")) { + if (groupLabel == null || groupLabel.isEmpty()) { groupLabel = getRequiredGroupName(id); } groupLabelList.add(groupLabel); diff --git a/ui-test/src/main/java/regclient/api/KeycloakUserManager.java b/ui-test/src/main/java/regclient/api/KeycloakUserManager.java index a5f75f4f6..c74380e54 100644 --- a/ui-test/src/main/java/regclient/api/KeycloakUserManager.java +++ b/ui-test/src/main/java/regclient/api/KeycloakUserManager.java @@ -1,5 +1,15 @@ package regclient.api; +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; +import java.util.Random; + import org.keycloak.OAuth2Constants; import org.keycloak.admin.client.CreatedResponseUtil; import org.keycloak.admin.client.Keycloak; @@ -13,40 +23,29 @@ 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; -import java.util.Random; - public class KeycloakUserManager { public static String moduleSpecificUser = null; public static String onboardUser = getDateTime(); + public static String onlyOperatorRoleUser = null; + public static String onboardingUser = null; 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(ArcConfigManager.getIAMUrl()) - .realm(ArcConfigManager.getIAMRealmId()).grantType(OAuth2Constants.CLIENT_CREDENTIALS) - .clientId(ArcConfigManager.getAutomationClientId()) - .clientSecret(ArcConfigManager.getAutomationClientSecret()).build(); - logger.debug("Connecting to IAM at {}", ArcConfigManager.getIAMUrl()); - } catch (Exception e) { - throw e; - - } - return key; + Keycloak key = KeycloakBuilder.builder().serverUrl(ArcConfigManager.getIAMUrl()).realm(ArcConfigManager.getIAMRealmId()) + .grantType(OAuth2Constants.CLIENT_CREDENTIALS).clientId(ArcConfigManager.getAutomationClientId()).clientSecret(ArcConfigManager.getAutomationClientSecret()) + .build(); + logger.info("Keycloak URL: {}", ArcConfigManager.getIAMUrl()); + logger.debug("Keycloak instance initialized: {}", key); + return key; + } catch (Exception e) { + logger.error("Failed to initialize Keycloak client", e); + throw new RuntimeException("Failed to initialize Keycloak client", e); + } } public static Properties getproperty(String path) { @@ -70,13 +69,9 @@ public static void createUsers() { moduleSpecificUser = needsToBeCreatedUser; } else if (needsToBeCreatedUser.equals("masterdata-220005")) { moduleSpecificUser = needsToBeCreatedUser; - - } - - else { + } else { moduleSpecificUser = BaseTestCase.currentModule + "-" + needsToBeCreatedUser; } - logger.info(moduleSpecificUser); user.setEnabled(true); user.setUsername(moduleSpecificUser); @@ -87,13 +82,12 @@ public static void createUsers() { RealmResource realmResource = keycloakInstance.realm(ArcConfigManager.getIAMRealmId()); UsersResource usersRessource = realmResource.users(); // Create user (requires manage-users role) - Response response = null; - response = usersRessource.create(user); + + var response = usersRessource.create(user); logger.info("Response: {} {}", response.getStatus(), response.getStatusInfo()); if (response.getStatus() == 409) { continue; } - String userId = CreatedResponseUtil.getCreatedId(response); logger.info("User created with userId: %s%n" + userId); @@ -140,8 +134,8 @@ public static void createUsersWithOutDefaultRole() { user.setEmail("automation" + onboardUser + "@automationlabs.com"); RealmResource realmResource = keycloakInstance.realm(ArcConfigManager.getIAMRealmId()); UsersResource usersRessource = realmResource.users(); - Response response = null; - response = usersRessource.create(user); + + var response = usersRessource.create(user); logger.info("Response: %s %s%n" + response.getStatus() + response.getStatusInfo()); String userId = CreatedResponseUtil.getCreatedId(response); @@ -175,6 +169,134 @@ public static void createUsersWithOutDefaultRole() { } } + public static void createOnboardingUser() { + List needsToBeCreatedUsers = List.of(ArcConfigManager.getIAMUsersToCreateOnboarder().split(",")); + Keycloak keycloakInstance = getKeycloakInstance(); + for (String needsToBeCreatedUser : needsToBeCreatedUsers) { + UserRepresentation user = new UserRepresentation(); + + if (needsToBeCreatedUser.equals("globaladmin")) { + onboardingUser = needsToBeCreatedUser; + } else if (needsToBeCreatedUser.equals("masterdata-220005")) { + onboardingUser = needsToBeCreatedUser; + } else { + onboardingUser = BaseTestCase.currentModule + "-" + needsToBeCreatedUser; + } + logger.info(onboardingUser); + user.setEnabled(true); + user.setUsername(onboardingUser); + user.setFirstName(onboardingUser); + user.setLastName(onboardingUser); + user.setEmail("automation" + onboardingUser + "@automationlabs.com"); + // Get realm + RealmResource realmResource = keycloakInstance.realm(ArcConfigManager.getIAMRealmId()); + UsersResource usersRessource = realmResource.users(); + // Create user (requires manage-users role) + + var response = usersRessource.create(user); + logger.info("Response: {} {}", response.getStatus(), response.getStatusInfo()); + if (response.getStatus() == 409) { + continue; + } + 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(ArcConfigManager.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(ArcConfigManager.getRolesForOnboardUser().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().equalsIgnoreCase(role)).findFirst().get()); + } + } + } + // Assign realm role tester to user + userResource.roles().realmLevel() // + .add((availableRoles.isEmpty() ? allRoles : availableRoles)); + + // passwordIndex ++; + } + } + + public static void createUsersWithOutSupervisorRole() { + List needsToBeCreatedUsers = List.of(ArcConfigManager.getIAMUsersToCreateOperator().split(",")); + Keycloak keycloakInstance = getKeycloakInstance(); + for (String needsToBeCreatedUser : needsToBeCreatedUsers) { + UserRepresentation user = new UserRepresentation(); + + if (needsToBeCreatedUser.equals("globaladmin")) { + onlyOperatorRoleUser = needsToBeCreatedUser; + } else if (needsToBeCreatedUser.equals("masterdata-220005")) { + onlyOperatorRoleUser = needsToBeCreatedUser; + } else { + onlyOperatorRoleUser = BaseTestCase.currentModule + "-" + needsToBeCreatedUser; + } + logger.info(onlyOperatorRoleUser); + user.setEnabled(true); + user.setUsername(onlyOperatorRoleUser); + user.setFirstName(onlyOperatorRoleUser); + user.setLastName(onlyOperatorRoleUser); + user.setEmail("automation" + onlyOperatorRoleUser + "@automationlabs.com"); + // Get realm + RealmResource realmResource = keycloakInstance.realm(ArcConfigManager.getIAMRealmId()); + UsersResource usersRessource = realmResource.users(); + // Create user (requires manage-users role) + + var response = usersRessource.create(user); + logger.info("Response: {} {}", response.getStatus(), response.getStatusInfo()); + if (response.getStatus() == 409) { + continue; + } + 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(ArcConfigManager.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(ArcConfigManager.getRolesForOperatorUser().split(",")); + for (String role : toBeAssignedRoles) { + if (allRoles.stream().anyMatch(r -> r.getName().equalsIgnoreCase(role))) { + availableRoles + .add(allRoles.stream().filter(r -> r.getName().equalsIgnoreCase(role)).findFirst().get()); + } + } + userResource.roles().realmLevel() // + .add((availableRoles.isEmpty() ? allRoles : availableRoles)); + + } + } + public static String getDateTime() { LocalDateTime currentDateTime = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); diff --git a/ui-test/src/main/java/regclient/driver/DriverManager.java b/ui-test/src/main/java/regclient/driver/DriverManager.java index b0d0f5b82..c5849780c 100644 --- a/ui-test/src/main/java/regclient/driver/DriverManager.java +++ b/ui-test/src/main/java/regclient/driver/DriverManager.java @@ -20,6 +20,9 @@ public class DriverManager { private static AppiumDriver getAndroidDriver() { DesiredCapabilities desiredCapabilities = CapabilitiesReader.getDesiredCapabilities("androidDevice", "/DesiredCapabilities.json"); + if (service == null) { + throw new IllegalStateException("Appium service not started. Call startAppiumServer() first."); + } appiumDriver.set(new AndroidDriver(service.getUrl(), desiredCapabilities)); return appiumDriver.get(); } diff --git a/ui-test/src/main/java/regclient/page/AutoLogoutPage.java b/ui-test/src/main/java/regclient/page/AutoLogoutPage.java new file mode 100644 index 000000000..b7d3cb66d --- /dev/null +++ b/ui-test/src/main/java/regclient/page/AutoLogoutPage.java @@ -0,0 +1,16 @@ +package regclient.page; + +import io.appium.java_client.AppiumDriver; + +public abstract class AutoLogoutPage extends BasePage{ + + public AutoLogoutPage(AppiumDriver driver) { + super(driver); + } + + public abstract boolean isAutoLogoutPopupDisplayed(); + + public abstract RegistrationTasksPage clickOnStayLoggedInButton(); + + public abstract LoginPage clickOnStayLogoutButton(); +} diff --git a/ui-test/src/main/java/regclient/page/BasePage.java b/ui-test/src/main/java/regclient/page/BasePage.java index 6c1cc7bbc..2451d80ca 100644 --- a/ui-test/src/main/java/regclient/page/BasePage.java +++ b/ui-test/src/main/java/regclient/page/BasePage.java @@ -2,15 +2,22 @@ import io.appium.java_client.AppiumDriver; import io.appium.java_client.HidesKeyboard; +import io.appium.java_client.MobileBy; +import io.appium.java_client.TouchAction; import io.appium.java_client.android.AndroidDriver; +import io.appium.java_client.android.nativekey.AndroidKey; +import io.appium.java_client.android.nativekey.KeyEvent; import io.appium.java_client.pagefactory.AppiumFieldDecorator; import io.appium.java_client.remote.SupportsContextSwitching; +import io.appium.java_client.touch.WaitOptions; +import io.appium.java_client.touch.offset.PointOption; import io.netty.handler.timeout.TimeoutException; - import org.openqa.selenium.By; import org.openqa.selenium.Dimension; +import org.openqa.selenium.Keys; import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.Rectangle; import org.openqa.selenium.StaleElementReferenceException; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Pause; @@ -35,8 +42,12 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; +import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Random; import java.util.Set; @@ -45,6 +56,7 @@ public class BasePage { private static String signPublicKey; private static String publicKey; private static String name; + public static String email; public BasePage(AppiumDriver driver) { this.driver = driver; @@ -150,7 +162,6 @@ protected void waitForElementToBeVisible(WebElement element, int waitTime) { } protected void swipeOrScroll() { - Dimension size = driver.manage().window().getSize(); int startX = size.getWidth() / 2; int startY = size.getHeight() / 2; @@ -213,7 +224,6 @@ public static void waitTime(int sec) { try { Thread.sleep(sec * 1000); } catch (InterruptedException e) { - // TODO Auto-generated catch block e.printStackTrace(); } @@ -255,11 +265,9 @@ protected void getMachineDetail() throws UnsupportedFlavorException, IOException 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(); @@ -287,23 +295,25 @@ public WebElement findElementWithRetry(By by) { 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 + break; } catch (NoSuchElementException e) { if (i < MAX_RETRIES - 1) { - swipeOrScroll(); // Call swipeOrScroll() after retry attempt fails + try { + Thread.sleep(RETRY_DELAY_MS); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + } + swipeOrScroll(); } else { System.out.println("Element not found after " + MAX_RETRIES + " attempts."); - // throw e; // Optionally re-throw the exception if all retries fail } } } + if (element == null) { + throw new NoSuchElementException("Element not found after " + MAX_RETRIES + " attempts: " + by); + } return element; } @@ -351,11 +361,8 @@ protected boolean isElementDisplayed(By by) { 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(finger.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), x, y)) + .addAction(finger.createPointerDown(PointerInput.MouseButton.LEFT.asArg())) .addAction(new Pause(finger, Duration.ofMillis(200))) // Pause for 200ms .addAction(finger.createPointerUp(PointerInput.MouseButton.LEFT.asArg())); // Release at x, y // coordinates @@ -409,20 +416,9 @@ private static String generateStringOfLength(int min, int max) { 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 currentYear = java.time.Year.now().getValue(); + int year = 1869 + random.nextInt(currentYear - 1869 + 1); // Up to current year 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) @@ -444,27 +440,27 @@ 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; + email = localPart + "@" + domain; + return email; } - protected void switchContext(String targetContext) { - Set contexts = ((SupportsContextSwitching) driver).getContextHandles(); - for (String context : contexts) { - System.out.println("Available context: " + context); - } - - for (String context : contexts) { - if (context.toLowerCase().contains(targetContext.toLowerCase())) { - ((SupportsContextSwitching) driver).context(context); - System.out.println("Switched to context: " + context); - return; + protected boolean switchToWebViewIfAvailable() { + for (int i = 0; i < 10; i++) { // wait up to ~5 seconds + for (String ctx : ((SupportsContextSwitching) driver).getContextHandles()) { + if (ctx.toUpperCase().contains("WEBVIEW")) { + ((SupportsContextSwitching) driver).context(ctx); + return true; + } + } + try { + Thread.sleep(500); + } catch (Exception ignored) { } } - - throw new RuntimeException("Target context not found: " + targetContext); + return false; // no webview } - protected void openArcApplication(String targetContext) { + protected void openArcApplication() { AndroidDriver driver = (AndroidDriver) this.driver; if (driver.isAppInstalled("com.android.chrome")) { @@ -473,11 +469,17 @@ protected void openArcApplication(String targetContext) { driver.activateApp("io.mosip.registration_client"); + // ensure we are in native context (no WEBVIEW) try { - switchContext(targetContext); - } catch (RuntimeException ex) { - System.out.println("Target context not available: " + targetContext); - throw ex; + driver.context("NATIVE_APP"); + } catch (Exception ignored) { + // fallback: iterate and pick any context that contains NATIVE + for (String ctx : ((SupportsContextSwitching) driver).getContextHandles()) { + if (ctx.toUpperCase().contains("NATIVE")) { + driver.context(ctx); + break; + } + } } } @@ -496,8 +498,16 @@ public static void enableWifiAndData() throws IOException { } public static void disableWifiAndData() throws IOException { - new ProcessBuilder("adb", "shell", "svc", "wifi", "disable").start(); - new ProcessBuilder("adb", "shell", "svc", "data", "disable").start(); + Process wifiProcess = new ProcessBuilder("adb", "shell", "svc", "wifi", "disable").start(); + Process dataProcess = new ProcessBuilder("adb", "shell", "svc", "data", "disable").start(); + try { + if (wifiProcess.waitFor() != 0 || dataProcess.waitFor() != 0) { + throw new IOException("Failed to disable WiFi/Data"); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IOException("Interrupted while disabling WiFi/Data", e); + } } public WebElement findElementIfExists(By locator) { @@ -505,7 +515,7 @@ public WebElement findElementIfExists(By locator) { return findElementWithRetry(locator); // reuse your existing retry logic } catch (Exception e) { // Optional: log for debugging - System.out.println("⚠️ Element not found after retries: " + locator); + System.out.println("Element not found after retries: " + locator); return null; // prevents NoSuchElementException / NPE } } @@ -637,4 +647,148 @@ protected void scrollToTop() { driver.perform(Collections.singletonList(scrollUp)); } } + + protected void ensureVisibleBySwiping(By fullId, By shortId) { + AndroidDriver ad = (AndroidDriver) driver; + int tries = 0; + while (tries++ < 6 && ad.findElements(fullId).isEmpty() && ad.findElements(shortId).isEmpty()) { + Dimension d = ad.manage().window().getSize(); + int x = d.width / 2; + int startY = (int) (d.height * 0.65); + int endY = (int) (d.height * 0.35); + new TouchAction<>(ad).press(PointOption.point(x, startY)) + .waitAction(WaitOptions.waitOptions(Duration.ofMillis(300))).moveTo(PointOption.point(x, endY)) + .release().perform(); + try { + Thread.sleep(300); + } catch (InterruptedException ignored) { + } + } + } + + protected String findWebViewContext(Duration timeout) { + long end = System.currentTimeMillis() + timeout.toMillis(); + while (System.currentTimeMillis() < end) { + Set contexts = ((SupportsContextSwitching) driver).getContextHandles(); + for (String c : contexts) { + if (c != null && c.toUpperCase().contains("WEBVIEW")) + return c; + } + try { + Thread.sleep(300); + } catch (InterruptedException ignored) { + } + } + return null; + } + + protected void openArcApplication(String targetContext) { + AndroidDriver driver = (AndroidDriver) this.driver; + + if (driver.isAppInstalled("com.android.chrome")) { + driver.terminateApp("com.android.chrome"); + } + + driver.activateApp("io.mosip.registration_client"); + + try { + switchContext(targetContext); + } catch (RuntimeException ex) { + System.out.println("Target context not available: " + targetContext); + throw ex; + } + } + + public void switchContext(String target) { + SupportsContextSwitching ctx = (SupportsContextSwitching) driver; + + for (String c : ctx.getContextHandles()) { + if (c.equalsIgnoreCase(target) || c.contains(target)) { + ctx.context(c); + return; + } + } + throw new RuntimeException("Context not found: " + target); + } + + public void scrollToTopSafe() { + try { + if (!((SupportsContextSwitching) driver).getContext().equals("NATIVE_APP")) { + ((SupportsContextSwitching) driver).context("NATIVE_APP"); + } + driver.manage().window().getSize(); // safe now + scrollToTop(); + } catch (Exception e) { + System.out.println("scrollToTop skipped — not in a native window"); + } + } + + protected void dismissAutoSaveOrKeyboard() { + if (!driver.findElements(By.id("com.android.chrome:id/sheet_container")).isEmpty()) { + try { + List bg = driver.findElements(By.id("com.android.chrome:id/background")); + if (!bg.isEmpty()) + bg.get(0).click(); + else + ((AndroidDriver) driver).pressKey(new KeyEvent(AndroidKey.BACK)); + } catch (Exception ignored) { + } + } + try { + ((HidesKeyboard) driver).hideKeyboard(); + } catch (Exception ignored) { + } + } + + protected void scrollTo(String contentDescFragment) { + for (int i = 0; i < 7; i++) { + try { + WebElement el = driver + .findElement(By.xpath("//*[contains(@content-desc,'" + contentDescFragment + "')]")); + if (el.isDisplayed()) { + return; + } + } catch (Exception ignore) { + } + swipeUp(); + } + + throw new NoSuchElementException( + "Element with content-desc containing '" + contentDescFragment + "' not found after scrolling."); + } + + protected void swipeUp() { + Dimension size = driver.manage().window().getSize(); + int startX = size.width / 2; + + int startY = (int) (size.height * 0.85); // lower point + int endY = (int) (size.height * 0.40); // higher point (scroll more) + + PointerInput finger = new PointerInput(PointerInput.Kind.TOUCH, "finger"); + Sequence swipe = new Sequence(finger, 1); + + swipe.addAction(finger.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), startX, startY)); + swipe.addAction(finger.createPointerDown(PointerInput.MouseButton.LEFT.asArg())); + swipe.addAction(finger.createPointerMove(Duration.ofMillis(700), PointerInput.Origin.viewport(), startX, endY)); + swipe.addAction(finger.createPointerUp(PointerInput.MouseButton.LEFT.asArg())); + + driver.perform(Collections.singletonList(swipe)); + } + + protected void scrollUntilElementVisible(By locator) { + for (int i = 0; i < 10; i++) { + try { + WebElement el = driver.findElement(locator); + if (el.isDisplayed()) { + return; + } + } catch (Exception ignored) { + } + + swipeUp(); + } + + throw new NoSuchElementException("Element not found after scrolling: " + locator); + } + } diff --git a/ui-test/src/main/java/regclient/page/CameraPage.java b/ui-test/src/main/java/regclient/page/CameraPage.java index 7ff5f55b2..3b0a21e8d 100644 --- a/ui-test/src/main/java/regclient/page/CameraPage.java +++ b/ui-test/src/main/java/regclient/page/CameraPage.java @@ -27,7 +27,7 @@ public CameraPage(AppiumDriver driver) { public void clickimage() { waitTime(1); - clickAtCoordinates(1835, 600); + clickAtCoordinates(1840, 598); } public void clickOkButton() { diff --git a/ui-test/src/main/java/regclient/page/DemographicDetailsPage.java b/ui-test/src/main/java/regclient/page/DemographicDetailsPage.java index 587cad533..a1f99545b 100644 --- a/ui-test/src/main/java/regclient/page/DemographicDetailsPage.java +++ b/ui-test/src/main/java/regclient/page/DemographicDetailsPage.java @@ -24,7 +24,7 @@ public DemographicDetailsPage(AppiumDriver driver) { public abstract boolean checkSecondLanguageTextBoxNotNull(String id); - public abstract boolean checkDateFormatAndCurrectDate(String id); + public abstract boolean checkDateFormatAndCurrentDate(String id); public abstract void fillIntroducerDetailsInDemographicDetailsPage(String age); diff --git a/ui-test/src/main/java/regclient/page/KeycloakPage.java b/ui-test/src/main/java/regclient/page/KeycloakPage.java index 7e932cd1b..9301eb074 100644 --- a/ui-test/src/main/java/regclient/page/KeycloakPage.java +++ b/ui-test/src/main/java/regclient/page/KeycloakPage.java @@ -1,17 +1,20 @@ + package regclient.page; import java.time.Duration; +import java.util.Set; +import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import io.appium.java_client.AppiumDriver; import io.appium.java_client.pagefactory.AndroidFindBy; +import io.appium.java_client.remote.SupportsContextSwitching; -public abstract class KeycloakPage extends BasePage { - - private WebDriverWait wait; +public class KeycloakPage extends BasePage { public KeycloakPage(AppiumDriver driver) { super(driver); @@ -35,40 +38,76 @@ public KeycloakPage(AppiumDriver driver) { @FindBy(id = "kc-login") private WebElement loginButton; - @AndroidFindBy(uiAutomator = "new UiSelector().text(\"Password\")") + @FindBy(xpath = "//android.widget.TextView[@text='Password']") private WebElement passwordOption; - @FindBy(id = "password") - private WebElement passwordTextbox; + @FindBy(xpath = "//android.widget.EditText[@resource-id='password']") + private WebElement passwordField; - @FindBy(id = "password-new") - private WebElement newPasswordTextbox; + @FindBy(xpath = "//android.widget.EditText[@resource-id='password-new']") + private WebElement newPasswordField; - @FindBy(id = "password-confirm") - private WebElement confirmPasswordTextbox; + @FindBy(xpath = "//android.widget.EditText[@resource-id='password-confirm']") + private WebElement confirmPasswordField; - @FindBy(xpath = "//button[text()='Save']") + @FindBy(xpath = "//android.widget.Button[@text='Save']") private WebElement saveButton; - @FindBy(xpath = "//*[contains(text(),'Your password has been updated.')]") + @FindBy(xpath = "//android.widget.TextView[contains(@text,'Your password has been updated.')]") private WebElement passwordUpdatedMessage; - @FindBy(xpath = "//*[contains(text(),'Sign Out')]") + @FindBy(xpath = "//android.widget.TextView[@text='Sign Out']") private WebElement signoutButton; @AndroidFindBy(accessibility = "LOGOUT") private WebElement logoutButton; public boolean openKeycloakWebView() { - switchContext("WEBVIEW_chrome"); + String webCtx = findWebViewContext(Duration.ofSeconds(5)); + if (webCtx != null) { + ((SupportsContextSwitching) driver).context(webCtx); + try { + Thread.sleep(250); + } catch (InterruptedException ignored) { + } + } else { + try { + ((SupportsContextSwitching) driver).context("NATIVE_APP"); + } catch (Exception ignored) { + } + } + retryFindElement(keycloakPageTitle, Duration.ofSeconds(10)); return isElementDisplayed(keycloakPageTitle); } public boolean openKeycloakPassword() { - switchContext("NATIVE_APP"); - retryFindElement(passwordOption, Duration.ofSeconds(10)); - return isElementDisplayed(passwordOption); + + scrollToTopSafe(); + + By nativePwd = By.xpath("//android.widget.TextView[@text='Password']"); + + try { + ((SupportsContextSwitching) driver).context("NATIVE_APP"); + new WebDriverWait(driver, Duration.ofSeconds(8)) + .until(ExpectedConditions.visibilityOfElementLocated(nativePwd)); + return true; + } catch (Exception e) { + System.out.println("Password not found in native."); + } + + for (String c : ((SupportsContextSwitching) driver).getContextHandles()) { + if (c.contains("WEBVIEW")) { + ((SupportsContextSwitching) driver).context(c); + try { + new WebDriverWait(driver, Duration.ofSeconds(8)) + .until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#password"))); + return true; + } catch (Exception ignore) { + } + } + } + return false; } public String getPageTitle() { @@ -84,7 +123,8 @@ public void clickOnEnglishLanguage() { } public void enterUserName(String username) { - clickAndsendKeysToTextBox(usernameTextBox, username); + switchContext("WEBVIEW_chrome"); + sendKeysToTextBox(usernameTextBox, username); } public void enterPassword(String password) { @@ -97,40 +137,31 @@ public void clickOnLoginButton() { } public void clickOnPasswordOption() { - switchContext("NATIVE_APP"); clickOnElement(passwordOption); } public void enterExistPassword(String password) { - switchContext("WEBVIEW_chrome"); - retryFindElement(passwordTextbox, Duration.ofSeconds(10)); - clickAndsendKeysToTextBox(passwordTextbox, password); + sendKeysToTextBox(passwordField, password); } public void enterNewPassword(String password) { - switchContext("WEBVIEW_chrome"); - retryFindElement(newPasswordTextbox, Duration.ofSeconds(10)); - clickAndsendKeysToTextBox(newPasswordTextbox, password); + clickAndsendKeysToTextBox(newPasswordField, password); } public void enterConfirmPassword(String password) { - switchContext("WEBVIEW_chrome"); - retryFindElement(confirmPasswordTextbox, Duration.ofSeconds(10)); - clickAndsendKeysToTextBox(confirmPasswordTextbox, password); + clickAndsendKeysToTextBox(confirmPasswordField, password); } public void clickOnSaveButton() { - switchContext("WEBVIEW_chrome"); clickOnElement(saveButton); } public boolean isPasswordUpdatedMessageDisplayed() { - switchContext("WEBVIEW_chrome"); return isElementDisplayed(passwordUpdatedMessage); } public void clickOnSignoutButton() { - switchContext("WEBVIEW_chrome"); + scrollToTop(); clickOnElement(signoutButton); } diff --git a/ui-test/src/main/java/regclient/page/MockSBIPage.java b/ui-test/src/main/java/regclient/page/MockSBIPage.java index 356b06ab5..2c2a4f54e 100644 --- a/ui-test/src/main/java/regclient/page/MockSBIPage.java +++ b/ui-test/src/main/java/regclient/page/MockSBIPage.java @@ -17,6 +17,7 @@ import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; +import io.appium.java_client.AppiumBy; import io.appium.java_client.AppiumDriver; import io.appium.java_client.MobileBy; import io.appium.java_client.TouchAction; @@ -74,27 +75,24 @@ public void setAllToNotReadyAndSave() { public void switchBackToArcApp() { AndroidDriver driver = (AndroidDriver) this.driver; try { - // detect the package from session capability (not hardcoded) + // detect the package from session capability String mainPackage = String.valueOf(driver.getCapabilities().getCapability("appium:appPackage")); String mainActivity = String.valueOf(driver.getCapabilities().getCapability("appium:appActivity")); - // if current package already matches, nothing to do if (mainPackage != null && mainPackage.equals(driver.getCurrentPackage())) { return; } - - // 1️⃣ Try to simply bring ARC app to foreground if installed + // Try to simply bring ARC app to foreground if installed if (driver.isAppInstalled(mainPackage)) { driver.activateApp(mainPackage); return; } - - // 2️⃣ Fallback: use startActivity if activateApp didn't work + // Fallback: use startActivity if activateApp didn't work if (mainActivity != null && !mainActivity.isEmpty()) { driver.startActivity(new Activity(mainPackage, mainActivity)); } - - } catch (Exception ignored) { + } catch (Exception e) { + System.err.println("Failed to switch back to ARC app: " + e.getMessage()); } } @@ -109,15 +107,16 @@ public void setAllToReadyAndSave() { clickOnElement(mockSbiSaveButton); } - public void setAllModalityLowScroe() { - setModalityScore("Face", 20); // ModalityScore should be (20-5=15) + public void setAllModalityLowScore() { + // ModalityScore should be (20-5=15) setModalityScore("Iris", 20); + swipeOrScroll(); clickOnElement(mockSbiSaveButton); } - public void setAllModalityHighScroe() { - setModalityScore("Face", 95); - setModalityScore("Iris", 95); + public void setAllModalityHighScore() { + setModalityScore("Iris", 90); + scrollUntilElementVisible(AppiumBy.id("io.mosip.mock.sbi:id/button12")); clickOnElement(mockSbiSaveButton); } @@ -155,16 +154,14 @@ private void setModalityScore(String modality, int score) { modLower, modality); WebElement seekBar = findElementIfExists(By.xpath(xpath)); // non-throwing - // fallback: a few swipes + re-checks for (int i = 0; i < 5 && seekBar == null; i++) { swipeOrScroll(); waitTime(1); seekBar = findElementIfExists(By.xpath(xpath)); } - + // final attempt using retry (may throw) — catch below if (seekBar == null) { - // final attempt using retry (may throw) — catch below seekBar = findElementWithRetry(By.xpath(xpath)); } diff --git a/ui-test/src/main/java/regclient/page/PendingApproval.java b/ui-test/src/main/java/regclient/page/PendingApproval.java index 7c4424bdf..44b347bcb 100644 --- a/ui-test/src/main/java/regclient/page/PendingApproval.java +++ b/ui-test/src/main/java/regclient/page/PendingApproval.java @@ -50,7 +50,7 @@ public PendingApproval(AppiumDriver driver) { public abstract boolean isInvalidUsernameMessageDisplayed(); - public abstract boolean isInvalidemptyUsernameSumbitButtonEnbled(); + public abstract boolean isSubmitButtonEnabledWithEmptyUsername(); public abstract boolean isNumberOfApplicationDisplayed(); diff --git a/ui-test/src/main/java/regclient/page/PreviewPage.java b/ui-test/src/main/java/regclient/page/PreviewPage.java index 040a062b5..a9fbb739e 100644 --- a/ui-test/src/main/java/regclient/page/PreviewPage.java +++ b/ui-test/src/main/java/regclient/page/PreviewPage.java @@ -37,5 +37,7 @@ public PreviewPage(AppiumDriver driver) { public abstract String getEmailId(); public abstract boolean isLostUinTitleDisplayed(); + + public abstract boolean isBiometricCorrectionTitleDisplayed(); } diff --git a/ui-test/src/main/java/regclient/page/RegistrationTasksPage.java b/ui-test/src/main/java/regclient/page/RegistrationTasksPage.java index bbfe4497d..c728e18d5 100644 --- a/ui-test/src/main/java/regclient/page/RegistrationTasksPage.java +++ b/ui-test/src/main/java/regclient/page/RegistrationTasksPage.java @@ -10,8 +10,6 @@ public RegistrationTasksPage(AppiumDriver driver) { public abstract SelectLanguagePage clickOnNewRegistrationButton(); - public abstract void clickOnSynchronizeDataButton(); - public abstract boolean isRegistrationTasksPageLoaded(); public abstract boolean isOperationalTaskDisplayed(); @@ -51,5 +49,7 @@ public RegistrationTasksPage(AppiumDriver driver) { public abstract void handleLocationPermission(); public abstract void clickOnRegistrationTasksTab(); + + public abstract boolean isSettingsButtonDisplayed(); } diff --git a/ui-test/src/main/java/regclient/page/SettingsPage.java b/ui-test/src/main/java/regclient/page/SettingsPage.java index e188eeea0..2a993e8f5 100644 --- a/ui-test/src/main/java/regclient/page/SettingsPage.java +++ b/ui-test/src/main/java/regclient/page/SettingsPage.java @@ -45,4 +45,16 @@ public SettingsPage(AppiumDriver driver) { public abstract boolean isSubmitChangesPopupDisplayed(); public abstract void clickOnChangesConfirmButton(); + + public abstract boolean isScheduledJobSettingsPageHeaderDisplayed(); + + public abstract boolean isToastVisible(String toastMessage); + + public abstract boolean isMasterDataSyncCardDisplayed(); + + public abstract void clickOnMasterDataSyncButton(); + + public abstract boolean validateJobCardFields(String jobName); + + } diff --git a/ui-test/src/main/java/regclient/page/SupervisorBiometricVerificationpage.java b/ui-test/src/main/java/regclient/page/SupervisorBiometricVerificationpage.java index 70d7855e6..cd6dc67b5 100644 --- a/ui-test/src/main/java/regclient/page/SupervisorBiometricVerificationpage.java +++ b/ui-test/src/main/java/regclient/page/SupervisorBiometricVerificationpage.java @@ -62,7 +62,7 @@ public SupervisorBiometricVerificationpage(AppiumDriver driver) { public abstract void markOneEyeException(); - public abstract void markOneFingreException(); + public abstract void markOneFingerException(); public abstract boolean isExceptionTypeTitleDisplayed(); diff --git a/ui-test/src/main/java/regclient/page/UpdateOperatorBiometricspage.java b/ui-test/src/main/java/regclient/page/UpdateOperatorBiometricspage.java index 530e5933e..dcb72a8b0 100644 --- a/ui-test/src/main/java/regclient/page/UpdateOperatorBiometricspage.java +++ b/ui-test/src/main/java/regclient/page/UpdateOperatorBiometricspage.java @@ -109,5 +109,9 @@ public UpdateOperatorBiometricspage(AppiumDriver driver) { public abstract void clickOnBackButton(); public abstract boolean isUpdateOperatorBiometricsPageLoaded(); + + public abstract boolean validateThreshold(int expected); + + public abstract void updateBiometricsAndWaitPopup(); } diff --git a/ui-test/src/main/java/regclient/pages/arabic/AuthenticationPageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/AuthenticationPageArabic.java index bdb4d12f5..949a60bf5 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/AuthenticationPageArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/AuthenticationPageArabic.java @@ -21,7 +21,7 @@ public class AuthenticationPageArabic extends AuthenticationPage { @AndroidFindBy(accessibility = "المصادقة") private WebElement authenticateButton; - @AndroidFindBy(xpath = "//android.view.View[@content-desc='content-desc='المصادقة باستخدام كلمة المرور'']/preceding-sibling::android.widget.ImageView") + @AndroidFindBy(xpath = "//android.view.View[@content-desc='المصادقة باستخدام كلمة المرور']/preceding-sibling::android.widget.ImageView") private WebElement authenticationImage; public AuthenticationPageArabic(AppiumDriver driver) { diff --git a/ui-test/src/main/java/regclient/pages/arabic/AutoLogoutPageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/AutoLogoutPageArabic.java new file mode 100644 index 000000000..b6ea427e7 --- /dev/null +++ b/ui-test/src/main/java/regclient/pages/arabic/AutoLogoutPageArabic.java @@ -0,0 +1,51 @@ +package regclient.pages.arabic; + +import java.time.Duration; + +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.pagefactory.AndroidFindBy; +import regclient.page.AutoLogoutPage; +import regclient.page.LoginPage; +import regclient.page.RegistrationTasksPage; +import regclient.pages.english.LoginPageEnglish; +import regclient.pages.english.RegistrationTasksPageEnglish; + +public class AutoLogoutPageArabic extends AutoLogoutPage { + + @AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"You have been idle\")") + private WebElement autoLogoutPopup; + + @AndroidFindBy(accessibility = "LOG OUT") + private WebElement logoutButton; + + @AndroidFindBy(accessibility = "STAY LOGGED IN") + private WebElement stayLoggedInButton; + + public AutoLogoutPageArabic(AppiumDriver driver) { + super(driver); + } + + public boolean isAutoLogoutPopupDisplayed() { + try { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofMinutes(10)); + wait.until(ExpectedConditions.visibilityOf(autoLogoutPopup)); + return true; + } catch (Exception e) { + return false; + } + } + + public RegistrationTasksPage clickOnStayLoggedInButton() { + clickOnElement(stayLoggedInButton); + return new RegistrationTasksPageArabic(driver); + } + + public LoginPage clickOnStayLogoutButton() { + clickOnElement(logoutButton); + return new LoginPageArabic(driver); + } +} diff --git a/ui-test/src/main/java/regclient/pages/arabic/DemographicDetailsPageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/DemographicDetailsPageArabic.java index 5a991896d..f5aba731b 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/DemographicDetailsPageArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/DemographicDetailsPageArabic.java @@ -20,7 +20,7 @@ import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.ConsentPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.utils.TestDataReader; public class DemographicDetailsPageArabic extends DemographicDetailsPage { @@ -188,7 +188,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -309,7 +309,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -361,7 +361,7 @@ public boolean checkSecondLanguageTextBoxNotNull(String id) { return value != null && !value.isEmpty(); } - public boolean checkDateFormatAndCurrectDate(String id) { + public boolean checkDateFormatAndCurrentDate(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"))) diff --git a/ui-test/src/main/java/regclient/pages/arabic/LoginPageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/LoginPageArabic.java index a90d771e4..cb89c9799 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/LoginPageArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/LoginPageArabic.java @@ -51,7 +51,7 @@ public class LoginPageArabic extends LoginPage { @AndroidFindBy(accessibility = "كلمة المرور غير صحيحة!") private WebElement passwordIncorrectErrorMessage; - @AndroidFindBy(accessibility = "العربية") + @AndroidFindBy(accessibility = "عربي") private WebElement arabicButton; @AndroidFindBy(accessibility = "انتقل إلى المنزل") diff --git a/ui-test/src/main/java/regclient/pages/arabic/PendingApprovalArabic.java b/ui-test/src/main/java/regclient/pages/arabic/PendingApprovalArabic.java index c287f3f92..0eef9485d 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/PendingApprovalArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/PendingApprovalArabic.java @@ -191,7 +191,7 @@ public boolean isSubmitButtonEnabled() { return isElementEnabled(submitButton); } - public boolean isInvalidemptyUsernameSumbitButtonEnbled() { + public boolean isSubmitButtonEnabledWithEmptyUsername() { return isElementEnabled(invalidUsernameMessageForempty); } @@ -246,4 +246,5 @@ public boolean isAuthenticateButtonEnabled() { return isElementEnabled(authenticateButton); } + } diff --git a/ui-test/src/main/java/regclient/pages/arabic/PreviewPageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/PreviewPageArabic.java index cab339610..bf6a07f9a 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/PreviewPageArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/PreviewPageArabic.java @@ -49,6 +49,9 @@ public class PreviewPageArabic extends PreviewPage { @AndroidFindBy(accessibility = "فقدت UIN") private WebElement lostUinTitle; + + @AndroidFindBy(accessibility = "تصحيح البيانات البيومترية") + private WebElement biometricCorrectionTitle; public PreviewPageArabic(AppiumDriver driver) { super(driver); @@ -131,5 +134,9 @@ public String getEmailId() { public boolean isLostUinTitleDisplayed() { return isElementDisplayed(lostUinTitle); } + + public boolean isBiometricCorrectionTitleDisplayed() { + return isElementDisplayed(biometricCorrectionTitle); + } } diff --git a/ui-test/src/main/java/regclient/pages/arabic/RegistrationTasksPageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/RegistrationTasksPageArabic.java index aa9f76a40..97fd53633 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/RegistrationTasksPageArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/RegistrationTasksPageArabic.java @@ -172,4 +172,8 @@ public void clickOnRegistrationTasksTab() { clickOnElement(registrationTasksTitle); } + public boolean isSettingsButtonDisplayed() { + return isElementDisplayed(settingsButton); + } + } diff --git a/ui-test/src/main/java/regclient/pages/arabic/SettingsPageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/SettingsPageArabic.java index ae9a5f5d4..6d8132276 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/SettingsPageArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/SettingsPageArabic.java @@ -66,6 +66,27 @@ public class SettingsPageArabic extends SettingsPage{ @AndroidFindBy(accessibility = "CANCEL") private WebElement changesCancelButton; + + @AndroidFindBy(accessibility = "Scheduled Job Settings") + private WebElement scheduledJobSettingsPageHeader; + + @AndroidFindBy(xpath = "//*[@content-desc[contains(.,'Master Data Sync')]]") + private WebElement masterDataSyncCard; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'Master Data Sync')]//android.widget.Button") + private WebElement masterDataSyncButton; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'thumbs_fingerprint_threshold')]//android.widget.EditText") + private WebElement thumbsThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'iris_threshold')]//android.widget.EditText") + private WebElement irisThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'rightslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement rightSlapThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'leftslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement leftSlapThresholdField; public SettingsPageArabic(AppiumDriver driver) { super(driver); @@ -173,4 +194,42 @@ public boolean isSubmitChangesPopupDisplayed() { public void clickOnChangesConfirmButton() { clickOnElement(changesConfirmButton); } + + public boolean isScheduledJobSettingsPageHeaderDisplayed() { + return isElementDisplayed(scheduledJobSettingsPageHeader); + } + + public boolean isMasterDataSyncCardDisplayed() { + return isElementDisplayed(masterDataSyncCard); + } + + public void clickOnMasterDataSyncButton() { + clickOnElement(masterDataSyncButton); + } + + public boolean isToastVisible(String toastMessage) { + for (int i = 0; i < 15; i++) { // ~3 seconds + if (driver.getPageSource().contains(toastMessage)) { + return true; + } + try { + Thread.sleep(200); + } catch (Exception ignored) { + } + } + return false; + } + + public WebElement getSyncButton(String jobName) { + return driver.findElement( + By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]//*[@clickable='true']")); + } + + public boolean validateJobCardFields(String jobName) { + WebElement card = driver + .findElement(By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]")); + String cd = card.getAttribute("content-desc"); + return cd.contains(jobName) && cd.contains("Next Run") && cd.contains("Last Sync") + && cd.contains("Cron Expression"); + } } diff --git a/ui-test/src/main/java/regclient/pages/arabic/SupervisorBiometricVerificationpageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/SupervisorBiometricVerificationpageArabic.java index a0207f08f..a526d9edd 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/SupervisorBiometricVerificationpageArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/SupervisorBiometricVerificationpageArabic.java @@ -243,7 +243,7 @@ public void markOneEyeException() { clickOnElement(oneEyeException); } - public void markOneFingreException() { + public void markOneFingerException() { clickOnElement(firstFingureExceptionImage); } diff --git a/ui-test/src/main/java/regclient/pages/arabic/UpdateOperatorBiometricspageArabic.java b/ui-test/src/main/java/regclient/pages/arabic/UpdateOperatorBiometricspageArabic.java index 5d068637a..d8d356919 100644 --- a/ui-test/src/main/java/regclient/pages/arabic/UpdateOperatorBiometricspageArabic.java +++ b/ui-test/src/main/java/regclient/pages/arabic/UpdateOperatorBiometricspageArabic.java @@ -1,8 +1,13 @@ package regclient.pages.arabic; +import java.time.Duration; + import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; import io.appium.java_client.AppiumDriver; +import io.appium.java_client.MobileBy; import io.appium.java_client.pagefactory.AndroidFindBy; import regclient.page.UpdateOperatorBiometricspage; @@ -378,4 +383,31 @@ public boolean isUpdateOperatorBiometricsPageLoaded() { return isElementDisplayed(updateOperatorBiometrics); } + public boolean validateThreshold(int expected) { + WebElement el = driver + .findElement(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true))" + + ".scrollIntoView(new UiSelector().descriptionContains(\"الحد\"));")); + + String text = el.getAttribute("contentDescription"); + int actual = Integer.parseInt(text.replaceAll("[^0-9]", "")); + + return actual >= expected; + } + + public void updateBiometricsAndWaitPopup() { + for (int i = 1; i <= 5; i++) { + clickOnVerifyAndSaveButton(); + try { + new WebDriverWait(driver, Duration.ofSeconds(60)).until(ExpectedConditions.visibilityOf(successPopup)); + return; // success + } catch (Exception ignored) { + } + try { + Thread.sleep(2000); + } catch (InterruptedException ignored) { + } + } + throw new AssertionError("Biometrics update success popup not displayed after 5 retries."); + } + } diff --git a/ui-test/src/main/java/regclient/pages/english/AutoLogoutPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/AutoLogoutPageEnglish.java new file mode 100644 index 000000000..9aab6d983 --- /dev/null +++ b/ui-test/src/main/java/regclient/pages/english/AutoLogoutPageEnglish.java @@ -0,0 +1,53 @@ +package regclient.pages.english; + +import java.time.Duration; + +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.pagefactory.AndroidFindBy; +import regclient.page.AcknowledgementPage; +import regclient.page.AuthenticationPage; +import regclient.page.AutoLogoutPage; +import regclient.page.LoginPage; +import regclient.page.RegistrationTasksPage; + +public class AutoLogoutPageEnglish extends AutoLogoutPage{ + + @AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"You have been idle\")") + private WebElement autoLogoutPopup; + + @AndroidFindBy(accessibility = "LOG OUT") + private WebElement logoutButton; + + @AndroidFindBy(accessibility = "STAY LOGGED IN") + private WebElement stayLoggedInButton; + + public AutoLogoutPageEnglish(AppiumDriver driver) { + super(driver); + } + + public boolean isAutoLogoutPopupDisplayed() { + try { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofMinutes(10)); + wait.until(ExpectedConditions.visibilityOf(autoLogoutPopup)); + return true; + } catch (Exception e) { + return false; + } + } + + public RegistrationTasksPage clickOnStayLoggedInButton() { + clickOnElement(stayLoggedInButton); + return new RegistrationTasksPageEnglish(driver); + } + + public LoginPage clickOnStayLogoutButton() { + clickOnElement(logoutButton); + return new LoginPageEnglish(driver); + } + + +} diff --git a/ui-test/src/main/java/regclient/pages/english/BiometricDetailsPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/BiometricDetailsPageEnglish.java index 7b14bbbb9..40d677d75 100644 --- a/ui-test/src/main/java/regclient/pages/english/BiometricDetailsPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/BiometricDetailsPageEnglish.java @@ -1,18 +1,32 @@ package regclient.pages.english; +import static org.testng.Assert.assertTrue; + +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebElement; +import org.openqa.selenium.remote.RemoteWebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; import io.appium.java_client.AppiumDriver; import io.appium.java_client.MobileBy; import io.appium.java_client.pagefactory.AndroidFindBy; +import io.appium.java_client.remote.SupportsContextSwitching; import io.mosip.testrig.apirig.testrunner.OTPListener; import regclient.api.FetchUiSpec; import regclient.page.ApplicantBiometricsPage; +import regclient.page.AutoLogoutPage; import regclient.page.BiometricDetailsPage; import regclient.page.IntroducerBiometricPage; import regclient.page.PreviewPage; +import regclient.page.RegistrationTasksPage; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,6 +59,15 @@ public class BiometricDetailsPageEnglish extends BiometricDetailsPage { @AndroidFindBy(xpath = "//android.widget.EditText[contains(@hint, 'Additional Info Request ID')]") private WebElement additionalInfoRequestIdTextbox; + @AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"You have been idle\")") + private WebElement autoLogoutPopup; + + @AndroidFindBy(accessibility = "LOG OUT") + private WebElement logoutButton; + + @AndroidFindBy(accessibility = "STAY LOGGED IN") + private WebElement stayLoggedInButton; + public BiometricDetailsPageEnglish(AppiumDriver driver) { super(driver); } @@ -143,47 +166,123 @@ public boolean isAdditionalInfoRequestIdTextboxDisplayed() { return isElementDisplayed(additionalInfoRequestIdTextbox); } - public void enterAdditionalInfoUsingEmail(String emailId) { - int retries = 20, waitSeconds = 10; - final String SUFFIX = "-BIOMETRIC_CORRECTION-1"; - - for (int i = 1; i <= retries; i++) { - String id = OTPListener.getAdditionalReqId(emailId); - if (id != null && !id.isEmpty() && !id.equals("{Failed}")) { - String sanitized = id.trim().replaceAll("\\p{C}", ""); - String finalId = sanitized.endsWith(SUFFIX) ? sanitized : sanitized + SUFFIX; - - try { - WebElement el = additionalInfoRequestIdTextbox; - try { - el.clear(); - el.sendKeys(finalId); - } catch (Exception ignored) { - } - if (finalId.equals(el.getAttribute("value"))) - return; - - ((JavascriptExecutor) driver).executeScript( - "arguments[0].value=arguments[1];arguments[0].dispatchEvent(new Event('input',{bubbles:true}));", - el, finalId); - if (finalId.equals(el.getAttribute("value"))) - return; - } catch (Exception e) { - logger.error("Enter ID failed: ", e); - } - throw new RuntimeException("Textbox not accepting: " + finalId); - } - sleepSeconds(waitSeconds); + public boolean isAutoLogoutPopupDisplayed() { + try { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofMinutes(10)); + wait.until(ExpectedConditions.visibilityOf(autoLogoutPopup)); + return true; + } catch (Exception e) { + return false; } - throw new RuntimeException("AdditionalInfoReqId not found after wait."); } + public RegistrationTasksPage clickOnStayLoggedInButton() { + clickOnElement(stayLoggedInButton); + return new RegistrationTasksPageEnglish(driver); + } + + public void enterAdditionalInfoUsingEmail(String emailId) { + final int totalTimeoutMinutes = 10; // stop after this many minutes + final int pollIntervalSeconds = 10; // poll every N seconds + final String SUFFIX = "-BIOMETRIC_CORRECTION-1"; + + long startMs = System.currentTimeMillis(); + long timeoutMs = TimeUnit.MINUTES.toMillis(totalTimeoutMinutes); + + while (System.currentTimeMillis() - startMs < timeoutMs) { + String id = null; + try { + id = OTPListener.getAdditionalReqId(emailId); + } catch (Exception e) { + // If getAdditionalReqId can throw, log and continue polling + System.out.println("OTPListener.getAdditionalReqId threw: " + e.getMessage()); + } + + if (id != null && !id.isEmpty() && !"{Failed}".equals(id)) { + String finalId = id.trim() + (id.endsWith(SUFFIX) ? "" : SUFFIX); + System.out.println("Found id: " + id + " -> finalId: " + finalId); + + // typeAndVerify should return true on success; handle its failure/exception + try { + if (typeAndVerify(additionalInfoRequestIdTextbox, finalId)) { + System.out.println("typeAndVerify succeeded."); + return; // success + } else { + throw new AssertionError("Textbox did not accept the id: " + finalId); + } + } catch (Exception e) { + // Fail fast if typing fails unexpectedly + throw new AssertionError("Failed while typing/verifying finalId: " + finalId + " : " + e.getMessage()); + } + } + + // handle auto logout popup + try { + if (isAutoLogoutPopupDisplayed()) { + System.out.println("Auto-logout popup displayed — staying logged in."); + clickOnStayLoggedInButton(); + } + } catch (Exception ignored) {} + + // log remaining time + long elapsed = System.currentTimeMillis() - startMs; + long remainingMs = Math.max(0, timeoutMs - elapsed); + System.out.println("ID not found yet. Elapsed " + (elapsed/1000) + "s, remaining " + (remainingMs/1000) + "s. Sleeping " + pollIntervalSeconds + "s."); + + try { + Thread.sleep(TimeUnit.SECONDS.toMillis(pollIntervalSeconds)); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + throw new AssertionError("Interrupted while waiting for AdditionalInfoReqId", ie); + } + } + + // If we reach here, timeout expired + throw new AssertionError("AdditionalInfoReqId not found within " + totalTimeoutMinutes + " minutes for " + emailId); + } + + private boolean typeAndVerify(WebElement el, String value) { + el.click(); + el.clear(); + el.sendKeys(value); + + // read the visible/real value in a safe way + String curr = readElementValue(el); + + // exact match (keeps your previous behavior) + return value.equals(curr); + } + + private String readElementValue(WebElement el) { + try { + String ctx = ""; + try { ctx = ((SupportsContextSwitching) driver).getContext(); } catch (Exception ignored) {} + + if (ctx != null && ctx.toUpperCase().contains("WEBVIEW")) { + String v = el.getAttribute("value"); + return v == null ? "" : v; + } + } catch (Exception ignored) {} + + try { + String t = el.getText(); + if (t != null && !t.isEmpty()) return t; + } catch (Exception ignored) {} + + for (String attr : new String[] {"text", "hint", "content-desc", "name"}) { + try { + String v = el.getAttribute(attr); + if (v != null && !v.isEmpty()) return v; + } catch (Exception ignored) {} + } + + return ""; + } + + private void sleepSeconds(int s) { - try { - Thread.sleep(s * 1000L); - } catch (InterruptedException ignored) { - Thread.currentThread().interrupt(); - } + try { Thread.sleep(s * 1000L); } + catch (InterruptedException ignored) { Thread.currentThread().interrupt(); } } private static final Logger logger = LoggerFactory.getLogger(BiometricDetailsPageEnglish.class); diff --git a/ui-test/src/main/java/regclient/pages/english/DemographicDetailsPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/DemographicDetailsPageEnglish.java index 4af7870dc..a052a1798 100644 --- a/ui-test/src/main/java/regclient/pages/english/DemographicDetailsPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/DemographicDetailsPageEnglish.java @@ -108,7 +108,7 @@ public ConsentPage clickOnPageTitle(String pageKey) { public DocumentUploadPage clickOnContinueButton() { clickOnElement(continueButton); - return new DocumentuploadPageEnglish(driver); + return new DocumentUploadPageEnglish(driver); } @@ -219,7 +219,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -340,7 +340,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -396,7 +396,7 @@ public boolean checkSecondLanguageTextBoxNotNull(String id) { return true; } - public boolean checkDateFormatAndCurrectDate(String id) { + public boolean checkDateFormatAndCurrentDate(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"))) @@ -452,11 +452,9 @@ public void fetchPreregApplicationId(String age) { By appIdLabel = By.xpath("//android.widget.EditText[contains(@hint,'Application ID')]"); By appIdTextbox = By.xpath("//android.widget.EditText[contains(@hint,'Please Enter Application ID')]"); - // Verify label is displayed boolean isDisplayed = isElementDisplayed(appIdLabel); assertTrue(isDisplayed, "Verify if Application ID label is displayed"); - // Enter prereg ID applicationIdTextBox = findElementWithRetry(appIdTextbox); clickAndsendKeysToTextBox(applicationIdTextBox, AdminTestUtil.getPreRegistrationFlow(age)); clickOnElement(fetchDataButton); diff --git a/ui-test/src/main/java/regclient/pages/english/DocumentuploadPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/DocumentuploadPageEnglish.java index fc9ef60ef..27926cad2 100644 --- a/ui-test/src/main/java/regclient/pages/english/DocumentuploadPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/DocumentuploadPageEnglish.java @@ -15,7 +15,7 @@ import regclient.page.CameraPage; import regclient.page.DocumentUploadPage; -public class DocumentuploadPageEnglish extends DocumentUploadPage { +public class DocumentUploadPageEnglish extends DocumentUploadPage { @AndroidFindBy(accessibility = "Scrim") private WebElement PopUpCloseButton; @@ -41,7 +41,7 @@ public class DocumentuploadPageEnglish extends DocumentUploadPage { @AndroidFindBy(className = "android.widget.ImageView") private WebElement captureImage; - public DocumentuploadPageEnglish(AppiumDriver driver) { + public DocumentUploadPageEnglish(AppiumDriver driver) { super(driver); } @@ -58,7 +58,7 @@ public boolean isDoccumentUploadPageDisplayed() { public DocumentUploadPage clickOnSaveButton() { clickOnElement(saveButton); - return new DocumentuploadPageEnglish(driver); + return new DocumentUploadPageEnglish(driver); } public boolean isRetakeButtonDisplayed() { @@ -71,6 +71,7 @@ public void cropCaptureImage() { } public void uploadDoccuments(String age, String type) { + scrollToTop(); List idList = FetchUiSpec.getAllIds("Documents"); for (String id : idList) { if (FetchUiSpec.getRequiredTypeUsingId(id)) { diff --git a/ui-test/src/main/java/regclient/pages/english/IdentityProofPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/IdentityProofPageEnglish.java index 3cba80407..20cf9c6c7 100644 --- a/ui-test/src/main/java/regclient/pages/english/IdentityProofPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/IdentityProofPageEnglish.java @@ -27,7 +27,7 @@ public IdentityProofPageEnglish(AppiumDriver driver) { public DocumentUploadPage clickOnSaveButton() { clickOnElement(saveButton); - return new DocumentuploadPageEnglish(driver); + return new DocumentUploadPageEnglish(driver); } public boolean isRetakeButtonDisplayed() { diff --git a/ui-test/src/main/java/regclient/pages/english/LoginPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/LoginPageEnglish.java index c7514cf8b..d5ade46d3 100644 --- a/ui-test/src/main/java/regclient/pages/english/LoginPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/LoginPageEnglish.java @@ -143,8 +143,6 @@ public boolean isLoginButtonEnabled() { public boolean isLoginPageLoaded() { return true; -// return isElementDisplayed(loginMessage); - } public boolean isPasswordHeaderDisplayed() { @@ -165,8 +163,6 @@ public boolean isMachineNotFoundMessageDisplayed() { public boolean isWelcomeMessageInSelectedLanguageDisplayed() { return true; -// return isElementDisplayed(welcomeMessageEnglish); - } public boolean isHelpButtonDisplayed() { diff --git a/ui-test/src/main/java/regclient/pages/english/ManageApplicationsPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/ManageApplicationsPageEnglish.java index 0d9db6501..4761a202a 100644 --- a/ui-test/src/main/java/regclient/pages/english/ManageApplicationsPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/ManageApplicationsPageEnglish.java @@ -231,9 +231,9 @@ public boolean isAcceptedDropdownOptionDisplayed() { public boolean isDeletionDropdownOptionDisplayed() { return isElementDisplayed(deletionValueDropdown); } - + public void clickOnBackButton() { - driver.navigate().back(); + driver.findElement(By.xpath("(//android.widget.ImageButton)[1]")).click(); } public void clickOnExportButton() { diff --git a/ui-test/src/main/java/regclient/pages/english/PendingApprovalEnglish.java b/ui-test/src/main/java/regclient/pages/english/PendingApprovalEnglish.java index 6f6aca1b9..6f9b0b099 100644 --- a/ui-test/src/main/java/regclient/pages/english/PendingApprovalEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/PendingApprovalEnglish.java @@ -132,7 +132,7 @@ public boolean isInvalidUsernameMessageDisplayed() { return isElementDisplayed(invalidUsernameMessage); } - public boolean isInvalidemptyUsernameSumbitButtonEnbled() { + public boolean isSubmitButtonEnabledWithEmptyUsername() { return isElementEnabled(invalidUsernameMessageForempty); } diff --git a/ui-test/src/main/java/regclient/pages/english/PreviewPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/PreviewPageEnglish.java index e37e4f823..cd3671805 100644 --- a/ui-test/src/main/java/regclient/pages/english/PreviewPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/PreviewPageEnglish.java @@ -48,6 +48,9 @@ public class PreviewPageEnglish extends PreviewPage { @AndroidFindBy(accessibility = "Lost UIN") private WebElement lostUinTitle; + + @AndroidFindBy(accessibility = "Biometric correction") + private WebElement biometricCorrectionTitle; public PreviewPageEnglish(AppiumDriver driver) { super(driver); @@ -132,5 +135,9 @@ public String getEmailId() { public boolean isLostUinTitleDisplayed() { return isElementDisplayed(lostUinTitle); } + + public boolean isBiometricCorrectionTitleDisplayed() { + return isElementDisplayed(biometricCorrectionTitle); + } } diff --git a/ui-test/src/main/java/regclient/pages/english/RegistrationTasksPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/RegistrationTasksPageEnglish.java index ba60f040d..c04d19c79 100644 --- a/ui-test/src/main/java/regclient/pages/english/RegistrationTasksPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/RegistrationTasksPageEnglish.java @@ -45,7 +45,7 @@ public class RegistrationTasksPageEnglish extends RegistrationTasksPage { @AndroidFindBy(xpath = "//android.widget.Toast[@text=\"Script Sync Completed\"]") private WebElement scriptSyncCompletedMessage; - @AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"Synchronize Data\")") + @AndroidFindBy(xpath = "//android.widget.ImageView[contains(@content-desc,'Synchronize Data')]") private WebElement synchronizeDataButton; @AndroidFindBy(accessibility = "Settings\nTab 2 of 4") @@ -170,5 +170,9 @@ public void handleLocationPermission() { public void clickOnRegistrationTasksTab() { clickOnElement(registrationTasksTitle); } + + public boolean isSettingsButtonDisplayed() { + return isElementDisplayed(settingsButton); + } } diff --git a/ui-test/src/main/java/regclient/pages/english/SettingsPageEnglish.java b/ui-test/src/main/java/regclient/pages/english/SettingsPageEnglish.java index fc44344cb..487e9d8dd 100644 --- a/ui-test/src/main/java/regclient/pages/english/SettingsPageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/SettingsPageEnglish.java @@ -70,7 +70,7 @@ public class SettingsPageEnglish extends SettingsPage { @AndroidFindBy(accessibility = "Device Settings\nTab 3 of 3") private WebElement deviceSettingsTab; - @AndroidFindBy(accessibility = "Key\nServer Value\nLocal Value") + @AndroidFindBy(accessibility = "Global Config Settings\nKey\nServer Value\nLocal Value") private WebElement globalConfigSettingsHeader; @AndroidFindBy(accessibility = "SUBMIT") @@ -106,6 +106,27 @@ public class SettingsPageEnglish extends SettingsPage { @AndroidFindBy(accessibility = "CANCEL") private WebElement changesCancelButton; + @AndroidFindBy(accessibility = "Scheduled Job Settings") + private WebElement scheduledJobSettingsPageHeader; + + @AndroidFindBy(xpath = "//*[@content-desc[contains(.,'Master Data Sync')]]") + private WebElement masterDataSyncCard; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'Master Data Sync')]//android.widget.Button") + private WebElement masterDataSyncButton; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'thumbs_fingerprint_threshold')]//android.widget.EditText") + private WebElement thumbsThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'iris_threshold')]//android.widget.EditText") + private WebElement irisThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'rightslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement rightSlapThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'leftslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement leftSlapThresholdField; + public SettingsPageEnglish(AppiumDriver driver) { super(driver); this.driver = driver; @@ -213,4 +234,42 @@ public void clickOnChangesConfirmButton() { clickOnElement(changesConfirmButton); } + public boolean isScheduledJobSettingsPageHeaderDisplayed() { + return isElementDisplayed(scheduledJobSettingsPageHeader); + } + + public boolean isMasterDataSyncCardDisplayed() { + return isElementDisplayed(masterDataSyncCard); + } + + public void clickOnMasterDataSyncButton() { + clickOnElement(masterDataSyncButton); + } + + public boolean isToastVisible(String toastMessage) { + for (int i = 0; i < 15; i++) { // ~3 seconds + if (driver.getPageSource().contains(toastMessage)) { + return true; + } + try { + Thread.sleep(200); + } catch (Exception ignored) { + } + } + return false; + } + + public WebElement getSyncButton(String jobName) { + return driver.findElement( + By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]//*[@clickable='true']")); + } + + public boolean validateJobCardFields(String jobName) { + WebElement card = driver + .findElement(By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]")); + String cd = card.getAttribute("content-desc"); + return cd.contains(jobName) && cd.contains("Next Run") && cd.contains("Last Sync") + && cd.contains("Cron Expression"); + } + } diff --git a/ui-test/src/main/java/regclient/pages/english/SupervisorBiometricVerificationpageEnglish.java b/ui-test/src/main/java/regclient/pages/english/SupervisorBiometricVerificationpageEnglish.java index 847a2a29c..dc5188aa4 100644 --- a/ui-test/src/main/java/regclient/pages/english/SupervisorBiometricVerificationpageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/SupervisorBiometricVerificationpageEnglish.java @@ -9,7 +9,7 @@ public class SupervisorBiometricVerificationpageEnglish extends SupervisorBiometricVerificationpage { - @AndroidFindBy(accessibility = "Supervisor's Biometric Onboarding") + @AndroidFindBy(accessibility = "Onboard Operator Biometrics") private WebElement supervisorBiometricVerificationPageTitle; @AndroidFindBy(uiAutomator = "new UiScrollable(new UiSelector().scrollable(true).instance(0)) .scrollIntoView(new UiSelector().descriptionContains(\"Iris\"))") @@ -248,7 +248,7 @@ public void markOneEyeException() { clickOnElement(oneEyeException); } - public void markOneFingreException() { + public void markOneFingerException() { clickOnElement(firstFingureExceptionImage); } @@ -355,13 +355,10 @@ public boolean checkThresholdValueFace() { public boolean isVerifyAndSaveButtonEnabled() { return isElementDisplayed(verifyAndSaveButton); - } - @Override public void clickOnVerifyAndSaveButton() { clickOnElement(verifyAndSaveButton); - } public boolean isDismissPageLoaded() { diff --git a/ui-test/src/main/java/regclient/pages/english/UpdateOperatorBiometricspageEnglish.java b/ui-test/src/main/java/regclient/pages/english/UpdateOperatorBiometricspageEnglish.java index 137146fdf..1891123a1 100644 --- a/ui-test/src/main/java/regclient/pages/english/UpdateOperatorBiometricspageEnglish.java +++ b/ui-test/src/main/java/regclient/pages/english/UpdateOperatorBiometricspageEnglish.java @@ -1,8 +1,13 @@ package regclient.pages.english; +import java.time.Duration; + import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; import io.appium.java_client.AppiumDriver; +import io.appium.java_client.MobileBy; import io.appium.java_client.pagefactory.AndroidFindBy; import regclient.page.UpdateOperatorBiometricspage; @@ -137,6 +142,8 @@ public UpdateOperatorBiometricspageEnglish(AppiumDriver driver) { @AndroidFindBy(accessibility = "Update Operator Biometrics") private WebElement updateOperatorBiometrics; + + public void clickOnIrisScan() { clickOnElement(irisScanIcon); @@ -384,4 +391,31 @@ public void clickOnBackButton() { public boolean isUpdateOperatorBiometricsPageLoaded() { return isElementDisplayed(updateOperatorBiometrics); } + + public boolean validateThreshold(int expected) { + WebElement el = driver.findElement(MobileBy.AndroidUIAutomator( + "new UiScrollable(new UiSelector().scrollable(true))" + + ".scrollIntoView(new UiSelector().descriptionContains(\"Threshold\"));" + )); + + String text = el.getAttribute("content-desc"); // "Threshold 75%" + int actual = Integer.parseInt(text.replaceAll("[^0-9]", "")); // extract 75 + + return actual == expected; + } + + public void updateBiometricsAndWaitPopup() { + for (int i = 1; i <= 5; i++) { + clickOnVerifyAndSaveButton(); + try { + new WebDriverWait(driver, Duration.ofSeconds(60)) + .until(ExpectedConditions.visibilityOf(successPopup)); + return; // success + } catch (Exception ignored) {} + try { Thread.sleep(2000); } catch (InterruptedException ignored) {} + } + throw new AssertionError("Biometrics update success popup not displayed after 5 retries."); + } + + } diff --git a/ui-test/src/main/java/regclient/pages/french/AutoLogoutPageFrench.java b/ui-test/src/main/java/regclient/pages/french/AutoLogoutPageFrench.java new file mode 100644 index 000000000..ba1e02bf1 --- /dev/null +++ b/ui-test/src/main/java/regclient/pages/french/AutoLogoutPageFrench.java @@ -0,0 +1,51 @@ +package regclient.pages.french; + +import java.time.Duration; + +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.pagefactory.AndroidFindBy; +import regclient.page.AutoLogoutPage; +import regclient.page.LoginPage; +import regclient.page.RegistrationTasksPage; + +public class AutoLogoutPageFrench extends AutoLogoutPage { + + @AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"You have been idle\")") + private WebElement autoLogoutPopup; + + @AndroidFindBy(accessibility = "LOG OUT") + private WebElement logoutButton; + + @AndroidFindBy(accessibility = "STAY LOGGED IN") + private WebElement stayLoggedInButton; + + public AutoLogoutPageFrench(AppiumDriver driver) { + super(driver); + // TODO Auto-generated constructor stub + } + + public boolean isAutoLogoutPopupDisplayed() { + try { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofMinutes(10)); + wait.until(ExpectedConditions.visibilityOf(autoLogoutPopup)); + return true; + } catch (Exception e) { + return false; + } + } + + public RegistrationTasksPage clickOnStayLoggedInButton() { + clickOnElement(stayLoggedInButton); + return new RegistrationTasksPageFrench(driver); + } + + public LoginPage clickOnStayLogoutButton() { + clickOnElement(logoutButton); + return new LoginPageFrench(driver); + } + +} diff --git a/ui-test/src/main/java/regclient/pages/french/DemographicDetailsPageFrench.java b/ui-test/src/main/java/regclient/pages/french/DemographicDetailsPageFrench.java index 2717bc2b6..1ff0b1429 100644 --- a/ui-test/src/main/java/regclient/pages/french/DemographicDetailsPageFrench.java +++ b/ui-test/src/main/java/regclient/pages/french/DemographicDetailsPageFrench.java @@ -21,7 +21,7 @@ import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.ConsentPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.utils.TestDataReader; public class DemographicDetailsPageFrench extends DemographicDetailsPage { @@ -187,7 +187,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -308,7 +308,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -364,7 +364,7 @@ public boolean checkSecondLanguageTextBoxNotNull(String id) { return true; } - public boolean checkDateFormatAndCurrectDate(String id) { + public boolean checkDateFormatAndCurrentDate(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"))) diff --git a/ui-test/src/main/java/regclient/pages/french/DocumentUploadPageFrench.java b/ui-test/src/main/java/regclient/pages/french/DocumentUploadPageFrench.java index 715d84c8f..01b6b892d 100644 --- a/ui-test/src/main/java/regclient/pages/french/DocumentUploadPageFrench.java +++ b/ui-test/src/main/java/regclient/pages/french/DocumentUploadPageFrench.java @@ -15,7 +15,7 @@ import regclient.page.CameraPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.BiometricDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; public class DocumentUploadPageFrench extends DocumentUploadPage { diff --git a/ui-test/src/main/java/regclient/pages/french/PendingApprovalFrench.java b/ui-test/src/main/java/regclient/pages/french/PendingApprovalFrench.java index a2fadfe08..fb383c6ad 100644 --- a/ui-test/src/main/java/regclient/pages/french/PendingApprovalFrench.java +++ b/ui-test/src/main/java/regclient/pages/french/PendingApprovalFrench.java @@ -192,7 +192,7 @@ public boolean isSubmitButtonEnabled() { return isElementEnabled(submitButton); } - public boolean isInvalidemptyUsernameSumbitButtonEnbled() { + public boolean isSubmitButtonEnabledWithEmptyUsername() { return isElementEnabled(invalidUsernameMessageForempty); } diff --git a/ui-test/src/main/java/regclient/pages/french/PreviewPageFrench.java b/ui-test/src/main/java/regclient/pages/french/PreviewPageFrench.java index 8fef6de0a..4b40ed07e 100644 --- a/ui-test/src/main/java/regclient/pages/french/PreviewPageFrench.java +++ b/ui-test/src/main/java/regclient/pages/french/PreviewPageFrench.java @@ -45,6 +45,9 @@ public class PreviewPageFrench extends PreviewPage { @AndroidFindBy(accessibility = "UIN perdu") private WebElement lostUinTitle; + + @AndroidFindBy(accessibility = "Correction biométrique") + private WebElement biometricCorrectionTitle; public PreviewPageFrench(AppiumDriver driver) { super(driver); @@ -127,4 +130,8 @@ public String getEmailId() { public boolean isLostUinTitleDisplayed() { return isElementDisplayed(lostUinTitle); } + + public boolean isBiometricCorrectionTitleDisplayed() { + return isElementDisplayed(biometricCorrectionTitle); + } } diff --git a/ui-test/src/main/java/regclient/pages/french/RegistrationTasksPageFrench.java b/ui-test/src/main/java/regclient/pages/french/RegistrationTasksPageFrench.java index 3a242d642..809d10cde 100644 --- a/ui-test/src/main/java/regclient/pages/french/RegistrationTasksPageFrench.java +++ b/ui-test/src/main/java/regclient/pages/french/RegistrationTasksPageFrench.java @@ -171,4 +171,8 @@ public void handleLocationPermission() { public void clickOnRegistrationTasksTab() { clickOnElement(registrationTasksTitle); } + + public boolean isSettingsButtonDisplayed() { + return isElementDisplayed(settingsButton); + } } diff --git a/ui-test/src/main/java/regclient/pages/french/SettingsPageFrench.java b/ui-test/src/main/java/regclient/pages/french/SettingsPageFrench.java index 9589654a0..5924741dd 100644 --- a/ui-test/src/main/java/regclient/pages/french/SettingsPageFrench.java +++ b/ui-test/src/main/java/regclient/pages/french/SettingsPageFrench.java @@ -66,6 +66,27 @@ public class SettingsPageFrench extends SettingsPage { @AndroidFindBy(accessibility = "CANCEL") private WebElement changesCancelButton; + + @AndroidFindBy(accessibility = "Scheduled Job Settings") + private WebElement scheduledJobSettingsPageHeader; + + @AndroidFindBy(xpath = "//*[@content-desc[contains(.,'Master Data Sync')]]") + private WebElement masterDataSyncCard; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'Master Data Sync')]//android.widget.Button") + private WebElement masterDataSyncButton; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'thumbs_fingerprint_threshold')]//android.widget.EditText") + private WebElement thumbsThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'iris_threshold')]//android.widget.EditText") + private WebElement irisThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'rightslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement rightSlapThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'leftslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement leftSlapThresholdField; public SettingsPageFrench(AppiumDriver driver) { super(driver); @@ -174,4 +195,41 @@ public void clickOnChangesConfirmButton() { clickOnElement(changesConfirmButton); } + public boolean isScheduledJobSettingsPageHeaderDisplayed() { + return isElementDisplayed(scheduledJobSettingsPageHeader); + } + + public boolean isMasterDataSyncCardDisplayed() { + return isElementDisplayed(masterDataSyncCard); + } + + public void clickOnMasterDataSyncButton() { + clickOnElement(masterDataSyncButton); + } + + public boolean isToastVisible(String toastMessage) { + for (int i = 0; i < 15; i++) { // ~3 seconds + if (driver.getPageSource().contains(toastMessage)) { + return true; + } + try { + Thread.sleep(200); + } catch (Exception ignored) { + } + } + return false; + } + + public WebElement getSyncButton(String jobName) { + return driver.findElement( + By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]//*[@clickable='true']")); + } + + public boolean validateJobCardFields(String jobName) { + WebElement card = driver + .findElement(By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]")); + String cd = card.getAttribute("content-desc"); + return cd.contains(jobName) && cd.contains("Next Run") && cd.contains("Last Sync") + && cd.contains("Cron Expression"); + } } diff --git a/ui-test/src/main/java/regclient/pages/french/SupervisorBiometricVerificationpageFrench.java b/ui-test/src/main/java/regclient/pages/french/SupervisorBiometricVerificationpageFrench.java index 096572263..2636b5404 100644 --- a/ui-test/src/main/java/regclient/pages/french/SupervisorBiometricVerificationpageFrench.java +++ b/ui-test/src/main/java/regclient/pages/french/SupervisorBiometricVerificationpageFrench.java @@ -243,7 +243,7 @@ public void markOneEyeException() { clickOnElement(oneEyeException); } - public void markOneFingreException() { + public void markOneFingerException() { clickOnElement(firstFingureExceptionImage); } diff --git a/ui-test/src/main/java/regclient/pages/french/UpdateOperatorBiometricspageFrench.java b/ui-test/src/main/java/regclient/pages/french/UpdateOperatorBiometricspageFrench.java index c1c4aaa59..5b4eb6af2 100644 --- a/ui-test/src/main/java/regclient/pages/french/UpdateOperatorBiometricspageFrench.java +++ b/ui-test/src/main/java/regclient/pages/french/UpdateOperatorBiometricspageFrench.java @@ -1,8 +1,13 @@ package regclient.pages.french; +import java.time.Duration; + import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; import io.appium.java_client.AppiumDriver; +import io.appium.java_client.MobileBy; import io.appium.java_client.pagefactory.AndroidFindBy; import regclient.page.UpdateOperatorBiometricspage; @@ -378,5 +383,30 @@ public void clickOnBackButton() { public boolean isUpdateOperatorBiometricsPageLoaded() { return isElementDisplayed(updateOperatorBiometrics); } + + public boolean validateThreshold(int expected) { + WebElement el = driver.findElement(MobileBy.AndroidUIAutomator( + "new UiScrollable(new UiSelector().scrollable(true))" + + ".scrollIntoView(new UiSelector().descriptionContains(\"Seuil\"));" + )); + + String text = el.getAttribute("content-desc"); // "Threshold 75%" + int actual = Integer.parseInt(text.replaceAll("[^0-9]", "")); // extract 75 + + return actual == expected; + } + + public void updateBiometricsAndWaitPopup() { + for (int i = 1; i <= 5; i++) { + clickOnVerifyAndSaveButton(); + try { + new WebDriverWait(driver, Duration.ofSeconds(60)) + .until(ExpectedConditions.visibilityOf(successPopup)); + return; // success + } catch (Exception ignored) {} + try { Thread.sleep(2000); } catch (InterruptedException ignored) {} + } + throw new AssertionError("Biometrics update success popup not displayed after 5 retries."); + } } diff --git a/ui-test/src/main/java/regclient/pages/hindi/AutoLogoutPageHindi.java b/ui-test/src/main/java/regclient/pages/hindi/AutoLogoutPageHindi.java new file mode 100644 index 000000000..eb4f95424 --- /dev/null +++ b/ui-test/src/main/java/regclient/pages/hindi/AutoLogoutPageHindi.java @@ -0,0 +1,52 @@ +package regclient.pages.hindi; + +import java.time.Duration; + +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.pagefactory.AndroidFindBy; +import regclient.page.AutoLogoutPage; +import regclient.page.LoginPage; +import regclient.page.RegistrationTasksPage; + +public class AutoLogoutPageHindi extends AutoLogoutPage{ + + + @AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"You have been idle\")") + private WebElement autoLogoutPopup; + + @AndroidFindBy(accessibility = "LOG OUT") + private WebElement logoutButton; + + @AndroidFindBy(accessibility = "STAY LOGGED IN") + private WebElement stayLoggedInButton; + + public AutoLogoutPageHindi(AppiumDriver driver) { + super(driver); + // TODO Auto-generated constructor stub + } + + public boolean isAutoLogoutPopupDisplayed() { + try { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofMinutes(10)); + wait.until(ExpectedConditions.visibilityOf(autoLogoutPopup)); + return true; + } catch (Exception e) { + return false; + } + } + + public RegistrationTasksPage clickOnStayLoggedInButton() { + clickOnElement(stayLoggedInButton); + return new RegistrationTasksPageHindi(driver); + } + + public LoginPage clickOnStayLogoutButton() { + clickOnElement(logoutButton); + return new LoginPageHindi(driver); + } + +} diff --git a/ui-test/src/main/java/regclient/pages/hindi/DemographicDetailsPageHindi.java b/ui-test/src/main/java/regclient/pages/hindi/DemographicDetailsPageHindi.java index 0269eb304..d9bea9e9a 100644 --- a/ui-test/src/main/java/regclient/pages/hindi/DemographicDetailsPageHindi.java +++ b/ui-test/src/main/java/regclient/pages/hindi/DemographicDetailsPageHindi.java @@ -20,7 +20,7 @@ import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.ConsentPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.utils.TestDataReader; public class DemographicDetailsPageHindi extends DemographicDetailsPage { @@ -186,7 +186,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -307,7 +307,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -363,7 +363,7 @@ public boolean checkSecondLanguageTextBoxNotNull(String id) { return true; } - public boolean checkDateFormatAndCurrectDate(String id) { + public boolean checkDateFormatAndCurrentDate(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"))) diff --git a/ui-test/src/main/java/regclient/pages/hindi/DocumentUploadPageHindi.java b/ui-test/src/main/java/regclient/pages/hindi/DocumentUploadPageHindi.java index 6d1d7ec5e..31a1c90ba 100644 --- a/ui-test/src/main/java/regclient/pages/hindi/DocumentUploadPageHindi.java +++ b/ui-test/src/main/java/regclient/pages/hindi/DocumentUploadPageHindi.java @@ -15,7 +15,7 @@ import regclient.page.CameraPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.BiometricDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; public class DocumentUploadPageHindi extends DocumentUploadPage{ diff --git a/ui-test/src/main/java/regclient/pages/hindi/PendingApprovalHindi.java b/ui-test/src/main/java/regclient/pages/hindi/PendingApprovalHindi.java index affbd7950..aa53d500e 100644 --- a/ui-test/src/main/java/regclient/pages/hindi/PendingApprovalHindi.java +++ b/ui-test/src/main/java/regclient/pages/hindi/PendingApprovalHindi.java @@ -146,7 +146,7 @@ public boolean isInvalidUsernameMessageDisplayed() { return isElementDisplayed(invalidUsernameMessage); } - public boolean isInvalidemptyUsernameSumbitButtonEnbled() { + public boolean isSubmitButtonEnabledWithEmptyUsername() { return isElementEnabled(invalidUsernameMessageForempty); } diff --git a/ui-test/src/main/java/regclient/pages/hindi/PreviewPageHindi.java b/ui-test/src/main/java/regclient/pages/hindi/PreviewPageHindi.java index fcd17d60d..3e9cb8262 100644 --- a/ui-test/src/main/java/regclient/pages/hindi/PreviewPageHindi.java +++ b/ui-test/src/main/java/regclient/pages/hindi/PreviewPageHindi.java @@ -45,6 +45,9 @@ public class PreviewPageHindi extends PreviewPage { @AndroidFindBy(accessibility = "खोया हुआ UIN") private WebElement lostUinTitle; + + @AndroidFindBy(accessibility = "बायोमेट्रिक सुधार") + private WebElement biometricCorrectionTitle; public PreviewPageHindi(AppiumDriver driver) { super(driver); @@ -125,4 +128,8 @@ public String getEmailId() { public boolean isLostUinTitleDisplayed() { return isElementDisplayed(lostUinTitle); } + + public boolean isBiometricCorrectionTitleDisplayed() { + return isElementDisplayed(biometricCorrectionTitle); + } } diff --git a/ui-test/src/main/java/regclient/pages/hindi/RegistrationTasksPageHindi.java b/ui-test/src/main/java/regclient/pages/hindi/RegistrationTasksPageHindi.java index 080c39b62..16dabc684 100644 --- a/ui-test/src/main/java/regclient/pages/hindi/RegistrationTasksPageHindi.java +++ b/ui-test/src/main/java/regclient/pages/hindi/RegistrationTasksPageHindi.java @@ -171,5 +171,9 @@ public void handleLocationPermission() { public void clickOnRegistrationTasksTab() { clickOnElement(registrationTasksTitle); } + + public boolean isSettingsButtonDisplayed() { + return isElementDisplayed(settingsButton); + } } diff --git a/ui-test/src/main/java/regclient/pages/hindi/SettingsPageHindi.java b/ui-test/src/main/java/regclient/pages/hindi/SettingsPageHindi.java index fc5c3adc6..306a505b2 100644 --- a/ui-test/src/main/java/regclient/pages/hindi/SettingsPageHindi.java +++ b/ui-test/src/main/java/regclient/pages/hindi/SettingsPageHindi.java @@ -66,6 +66,27 @@ public class SettingsPageHindi extends SettingsPage{ @AndroidFindBy(accessibility = "CANCEL") private WebElement changesCancelButton; + + @AndroidFindBy(accessibility = "Scheduled Job Settings") + private WebElement scheduledJobSettingsPageHeader; + + @AndroidFindBy(xpath = "//*[@content-desc[contains(.,'Master Data Sync')]]") + private WebElement masterDataSyncCard; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'Master Data Sync')]//android.widget.Button") + private WebElement masterDataSyncButton; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'thumbs_fingerprint_threshold')]//android.widget.EditText") + private WebElement thumbsThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'iris_threshold')]//android.widget.EditText") + private WebElement irisThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'rightslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement rightSlapThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'leftslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement leftSlapThresholdField; public SettingsPageHindi(AppiumDriver driver) { super(driver); @@ -173,5 +194,43 @@ public boolean isSubmitChangesPopupDisplayed() { public void clickOnChangesConfirmButton() { clickOnElement(changesConfirmButton); } + + public boolean isScheduledJobSettingsPageHeaderDisplayed() { + return isElementDisplayed(scheduledJobSettingsPageHeader); + } + + public boolean isMasterDataSyncCardDisplayed() { + return isElementDisplayed(masterDataSyncCard); + } + + public void clickOnMasterDataSyncButton() { + clickOnElement(masterDataSyncButton); + } + + public boolean isToastVisible(String toastMessage) { + for (int i = 0; i < 15; i++) { // ~3 seconds + if (driver.getPageSource().contains(toastMessage)) { + return true; + } + try { + Thread.sleep(200); + } catch (Exception ignored) { + } + } + return false; + } + + public WebElement getSyncButton(String jobName) { + return driver.findElement( + By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]//*[@clickable='true']")); + } + + public boolean validateJobCardFields(String jobName) { + WebElement card = driver + .findElement(By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]")); + String cd = card.getAttribute("content-desc"); + return cd.contains(jobName) && cd.contains("Next Run") && cd.contains("Last Sync") + && cd.contains("Cron Expression"); + } } diff --git a/ui-test/src/main/java/regclient/pages/hindi/SupervisorBiometricVerificationpageHindi.java b/ui-test/src/main/java/regclient/pages/hindi/SupervisorBiometricVerificationpageHindi.java index 50a077ee2..c397ce2ba 100644 --- a/ui-test/src/main/java/regclient/pages/hindi/SupervisorBiometricVerificationpageHindi.java +++ b/ui-test/src/main/java/regclient/pages/hindi/SupervisorBiometricVerificationpageHindi.java @@ -258,7 +258,7 @@ public void markOneEyeException() { clickOnElement(oneEyeException); } - public void markOneFingreException() { + public void markOneFingerException() { clickOnElement(firstFingureExceptionImage); } diff --git a/ui-test/src/main/java/regclient/pages/hindi/UpdateOperatorBiometricspageHindi.java b/ui-test/src/main/java/regclient/pages/hindi/UpdateOperatorBiometricspageHindi.java index 3a0c4531e..9b132231f 100644 --- a/ui-test/src/main/java/regclient/pages/hindi/UpdateOperatorBiometricspageHindi.java +++ b/ui-test/src/main/java/regclient/pages/hindi/UpdateOperatorBiometricspageHindi.java @@ -1,8 +1,13 @@ package regclient.pages.hindi; +import java.time.Duration; + import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; import io.appium.java_client.AppiumDriver; +import io.appium.java_client.MobileBy; import io.appium.java_client.pagefactory.AndroidFindBy; import regclient.page.UpdateOperatorBiometricspage; @@ -394,4 +399,26 @@ public boolean isUpdateOperatorBiometricsPageLoaded() { return isElementDisplayed(updateOperatorBiometrics); } + public boolean validateThreshold(int expected) { + WebElement el = driver.findElement(MobileBy.AndroidUIAutomator( + "new UiScrollable(new UiSelector().scrollable(true))" + + ".scrollIntoView(new UiSelector().descriptionContains(\"Threshold\"));")); + String text = el.getAttribute("content-desc"); // "Threshold 75%" + int actual = Integer.parseInt(text.replaceAll("[^0-9]", "")); // extract 75 + + return actual == expected; + } + + public void updateBiometricsAndWaitPopup() { + for (int i = 1; i <= 5; i++) { + clickOnVerifyAndSaveButton(); + try { + new WebDriverWait(driver, Duration.ofSeconds(60)) + .until(ExpectedConditions.visibilityOf(successPopup)); + return; // success + } catch (Exception ignored) {} + try { Thread.sleep(2000); } catch (InterruptedException ignored) {} + } + throw new AssertionError("Biometrics update success popup not displayed after 5 retries."); + } } diff --git a/ui-test/src/main/java/regclient/pages/kannada/AutoLogoutPageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/AutoLogoutPageKannada.java new file mode 100644 index 000000000..ad2036e45 --- /dev/null +++ b/ui-test/src/main/java/regclient/pages/kannada/AutoLogoutPageKannada.java @@ -0,0 +1,52 @@ +package regclient.pages.kannada; + +import java.time.Duration; + +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.pagefactory.AndroidFindBy; +import regclient.page.AutoLogoutPage; +import regclient.page.LoginPage; +import regclient.page.RegistrationTasksPage; + +public class AutoLogoutPageKannada extends AutoLogoutPage{ + + + @AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"You have been idle\")") + private WebElement autoLogoutPopup; + + @AndroidFindBy(accessibility = "LOG OUT") + private WebElement logoutButton; + + @AndroidFindBy(accessibility = "STAY LOGGED IN") + private WebElement stayLoggedInButton; + + public AutoLogoutPageKannada(AppiumDriver driver) { + super(driver); + // TODO Auto-generated constructor stub + } + + public boolean isAutoLogoutPopupDisplayed() { + try { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofMinutes(10)); + wait.until(ExpectedConditions.visibilityOf(autoLogoutPopup)); + return true; + } catch (Exception e) { + return false; + } + } + + public RegistrationTasksPage clickOnStayLoggedInButton() { + clickOnElement(stayLoggedInButton); + return new RegistrationTasksPageKannada(driver); + } + + public LoginPage clickOnStayLogoutButton() { + clickOnElement(logoutButton); + return new LoginPageKannada(driver); + } + +} diff --git a/ui-test/src/main/java/regclient/pages/kannada/DemographicDetailsPageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/DemographicDetailsPageKannada.java index f3eb9f7c5..889b47c06 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/DemographicDetailsPageKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/DemographicDetailsPageKannada.java @@ -20,7 +20,7 @@ import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.ConsentPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.utils.TestDataReader; public class DemographicDetailsPageKannada extends DemographicDetailsPage { @@ -86,7 +86,7 @@ public ConsentPage clickOnPageTitle(String pageKey) { public DocumentUploadPage clickOnContinueButton() { clickOnElement(continueButton); - return new DocumentuploadPageKannada(driver); + return new DocumentUploadPageKannada(driver); } public boolean isContinueButtonEnable() { @@ -184,7 +184,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -305,7 +305,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -361,7 +361,7 @@ public boolean checkSecondLanguageTextBoxNotNull(String id) { return true; } - public boolean checkDateFormatAndCurrectDate(String id) { + public boolean checkDateFormatAndCurrentDate(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"))) diff --git a/ui-test/src/main/java/regclient/pages/kannada/DocumentuploadPageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/DocumentuploadPageKannada.java index 38d4bb669..6a7051899 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/DocumentuploadPageKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/DocumentuploadPageKannada.java @@ -15,10 +15,10 @@ import regclient.page.CameraPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.BiometricDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; -public class DocumentuploadPageKannada extends DocumentUploadPage{ +public class DocumentUploadPageKannada extends DocumentUploadPage{ @AndroidFindBy(accessibility = "ಸ್ಕ್ರಿಮ್") private WebElement PopUpCloseButton; @@ -44,7 +44,7 @@ public class DocumentuploadPageKannada extends DocumentUploadPage{ @AndroidFindBy(uiAutomator = "UiSelector().className(\"android.view.View\").instance(8)") private WebElement imageleftCorner; - public DocumentuploadPageKannada(AppiumDriver driver) { + public DocumentUploadPageKannada(AppiumDriver driver) { super(driver); } @@ -60,7 +60,7 @@ public boolean isDoccumentUploadPageDisplayed() { public DocumentUploadPage clickOnSaveButton() { clickOnElement(saveButton); - return new DocumentuploadPageKannada(driver); + return new DocumentUploadPageKannada(driver); } public boolean isRetakeButtonDisplayed() { diff --git a/ui-test/src/main/java/regclient/pages/kannada/IdentityProofPageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/IdentityProofPageKannada.java index f781f8550..31381bcb8 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/IdentityProofPageKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/IdentityProofPageKannada.java @@ -27,7 +27,7 @@ public IdentityProofPageKannada(AppiumDriver driver) { public DocumentUploadPage clickOnSaveButton() { clickOnElement(saveButton); - return new DocumentuploadPageKannada(driver); + return new DocumentUploadPageKannada(driver); } public boolean isRetakeButtonDisplayed() { diff --git a/ui-test/src/main/java/regclient/pages/kannada/PendingApprovalKannada.java b/ui-test/src/main/java/regclient/pages/kannada/PendingApprovalKannada.java index 7b992a26e..839b1e7c8 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/PendingApprovalKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/PendingApprovalKannada.java @@ -193,7 +193,7 @@ public boolean isSubmitButtonEnabled() { return isElementEnabled(submitButton); } - public boolean isInvalidemptyUsernameSumbitButtonEnbled() { + public boolean isSubmitButtonEnabledWithEmptyUsername() { return isElementEnabled(invalidUsernameMessageForempty); } diff --git a/ui-test/src/main/java/regclient/pages/kannada/PreviewPageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/PreviewPageKannada.java index 56c86e604..15e3c8443 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/PreviewPageKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/PreviewPageKannada.java @@ -45,6 +45,9 @@ public class PreviewPageKannada extends PreviewPage { @AndroidFindBy(accessibility = "ಕಳೆದುಹೋದ UIN") private WebElement lostUinTitle; + + @AndroidFindBy(accessibility = "ಜೈವಿಕ ಗುರುತುಗಳ ತಿದ್ದುಪಡಿ") + private WebElement biometricCorrectionTitle; public PreviewPageKannada(AppiumDriver driver) { super(driver); @@ -127,5 +130,9 @@ public String getEmailId() { public boolean isLostUinTitleDisplayed() { return isElementDisplayed(lostUinTitle); } + + public boolean isBiometricCorrectionTitleDisplayed() { + return isElementDisplayed(biometricCorrectionTitle); + } } diff --git a/ui-test/src/main/java/regclient/pages/kannada/RegistrationTasksPageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/RegistrationTasksPageKannada.java index dd5d991ff..d205e05e1 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/RegistrationTasksPageKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/RegistrationTasksPageKannada.java @@ -172,4 +172,7 @@ public void clickOnRegistrationTasksTab() { clickOnElement(registrationTasksTitle); } + public boolean isSettingsButtonDisplayed() { + return isElementDisplayed(settingsButton); + } } diff --git a/ui-test/src/main/java/regclient/pages/kannada/SettingsPageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/SettingsPageKannada.java index 4c94f8154..0b6cdc238 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/SettingsPageKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/SettingsPageKannada.java @@ -66,6 +66,27 @@ public class SettingsPageKannada extends SettingsPage { @AndroidFindBy(accessibility = "CANCEL") private WebElement changesCancelButton; + + @AndroidFindBy(accessibility = "Scheduled Job Settings") + private WebElement scheduledJobSettingsPageHeader; + + @AndroidFindBy(xpath = "//*[@content-desc[contains(.,'Master Data Sync')]]") + private WebElement masterDataSyncCard; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'Master Data Sync')]//android.widget.Button") + private WebElement masterDataSyncButton; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'thumbs_fingerprint_threshold')]//android.widget.EditText") + private WebElement thumbsThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'iris_threshold')]//android.widget.EditText") + private WebElement irisThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'rightslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement rightSlapThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'leftslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement leftSlapThresholdField; public SettingsPageKannada(AppiumDriver driver) { super(driver); @@ -170,5 +191,43 @@ public boolean isSubmitChangesPopupDisplayed() { public void clickOnChangesConfirmButton() { clickOnElement(changesConfirmButton); } + + public boolean isScheduledJobSettingsPageHeaderDisplayed() { + return isElementDisplayed(scheduledJobSettingsPageHeader); + } + + public boolean isMasterDataSyncCardDisplayed() { + return isElementDisplayed(masterDataSyncCard); + } + + public void clickOnMasterDataSyncButton() { + clickOnElement(masterDataSyncButton); + } + + public boolean isToastVisible(String toastMessage) { + for (int i = 0; i < 15; i++) { // ~3 seconds + if (driver.getPageSource().contains(toastMessage)) { + return true; + } + try { + Thread.sleep(200); + } catch (Exception ignored) { + } + } + return false; + } + + public WebElement getSyncButton(String jobName) { + return driver.findElement( + By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]//*[@clickable='true']")); + } + + public boolean validateJobCardFields(String jobName) { + WebElement card = driver + .findElement(By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]")); + String cd = card.getAttribute("content-desc"); + return cd.contains(jobName) && cd.contains("Next Run") && cd.contains("Last Sync") + && cd.contains("Cron Expression"); + } } diff --git a/ui-test/src/main/java/regclient/pages/kannada/SupervisorBiometricVerificationpageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/SupervisorBiometricVerificationpageKannada.java index a623482ae..5a4d89803 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/SupervisorBiometricVerificationpageKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/SupervisorBiometricVerificationpageKannada.java @@ -258,7 +258,7 @@ public void markOneEyeException() { clickOnElement(oneEyeException); } - public void markOneFingreException() { + public void markOneFingerException() { clickOnElement(firstFingureExceptionImage); } diff --git a/ui-test/src/main/java/regclient/pages/kannada/UpdateOperatorBiometricspageKannada.java b/ui-test/src/main/java/regclient/pages/kannada/UpdateOperatorBiometricspageKannada.java index 58b546893..4a298ca7a 100644 --- a/ui-test/src/main/java/regclient/pages/kannada/UpdateOperatorBiometricspageKannada.java +++ b/ui-test/src/main/java/regclient/pages/kannada/UpdateOperatorBiometricspageKannada.java @@ -1,8 +1,13 @@ package regclient.pages.kannada; +import java.time.Duration; + import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; import io.appium.java_client.AppiumDriver; +import io.appium.java_client.MobileBy; import io.appium.java_client.pagefactory.AndroidFindBy; import regclient.page.UpdateOperatorBiometricspage; @@ -393,5 +398,30 @@ public void clickOnBackButton() { public boolean isUpdateOperatorBiometricsPageLoaded() { return isElementDisplayed(updateOperatorBiometrics); } + + public boolean validateThreshold(int expected) { + WebElement el = driver.findElement(MobileBy.AndroidUIAutomator( + "new UiScrollable(new UiSelector().scrollable(true))" + + ".scrollIntoView(new UiSelector().descriptionContains(\"Threshold\"));" + )); + + String text = el.getAttribute("content-desc"); // "Threshold 75%" + int actual = Integer.parseInt(text.replaceAll("[^0-9]", "")); // extract 75 + + return actual == expected; + } + + public void updateBiometricsAndWaitPopup() { + for (int i = 1; i <= 5; i++) { + clickOnVerifyAndSaveButton(); + try { + new WebDriverWait(driver, Duration.ofSeconds(60)) + .until(ExpectedConditions.visibilityOf(successPopup)); + return; // success + } catch (Exception ignored) {} + try { Thread.sleep(2000); } catch (InterruptedException ignored) {} + } + throw new AssertionError("Biometrics update success popup not displayed after 5 retries."); + } } diff --git a/ui-test/src/main/java/regclient/pages/tamil/AutoLogoutPageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/AutoLogoutPageTamil.java new file mode 100644 index 000000000..e4c01004c --- /dev/null +++ b/ui-test/src/main/java/regclient/pages/tamil/AutoLogoutPageTamil.java @@ -0,0 +1,52 @@ +package regclient.pages.tamil; + +import java.time.Duration; + +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.pagefactory.AndroidFindBy; +import regclient.page.AutoLogoutPage; +import regclient.page.LoginPage; +import regclient.page.RegistrationTasksPage; + +public class AutoLogoutPageTamil extends AutoLogoutPage{ + + + @AndroidFindBy(uiAutomator = "new UiSelector().descriptionContains(\"You have been idle\")") + private WebElement autoLogoutPopup; + + @AndroidFindBy(accessibility = "LOG OUT") + private WebElement logoutButton; + + @AndroidFindBy(accessibility = "STAY LOGGED IN") + private WebElement stayLoggedInButton; + + public AutoLogoutPageTamil(AppiumDriver driver) { + super(driver); + // TODO Auto-generated constructor stub + } + + public boolean isAutoLogoutPopupDisplayed() { + try { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofMinutes(10)); + wait.until(ExpectedConditions.visibilityOf(autoLogoutPopup)); + return true; + } catch (Exception e) { + return false; + } + } + + public RegistrationTasksPage clickOnStayLoggedInButton() { + clickOnElement(stayLoggedInButton); + return new RegistrationTasksPageTamil(driver); + } + + public LoginPage clickOnStayLogoutButton() { + clickOnElement(logoutButton); + return new LoginPageTamil(driver); + } + +} diff --git a/ui-test/src/main/java/regclient/pages/tamil/DemographicDetailsPageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/DemographicDetailsPageTamil.java index c2f6644ad..7ea8667c2 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/DemographicDetailsPageTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/DemographicDetailsPageTamil.java @@ -20,7 +20,7 @@ import regclient.page.DemographicDetailsPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.ConsentPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; import regclient.utils.TestDataReader; public class DemographicDetailsPageTamil extends DemographicDetailsPage { @@ -86,7 +86,7 @@ public boolean isErrorMessageInvalidInputTextDisplayed() { public DocumentUploadPage clickOnContinueButton() { clickOnElement(continueButton); - return new DocumentuploadPageTamil(driver); + return new DocumentUploadPageTamil(driver); } public boolean isContinueButtonEnable() { @@ -184,7 +184,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -305,7 +305,7 @@ else if (age.equals("currentCalenderDate")) { waitTime(1); clickOnElement(backgroundScreen); waitTime(1); - assertTrue(checkDateFormatAndCurrectDate(id), + assertTrue(checkDateFormatAndCurrentDate(id), "Verify date format and current date and time while selecting age date"); } } @@ -361,7 +361,7 @@ public boolean checkSecondLanguageTextBoxNotNull(String id) { return true; } - public boolean checkDateFormatAndCurrectDate(String id) { + public boolean checkDateFormatAndCurrentDate(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"))) diff --git a/ui-test/src/main/java/regclient/pages/tamil/DocumentuploadPageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/DocumentuploadPageTamil.java index 8083d2f10..fbdadbbf3 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/DocumentuploadPageTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/DocumentuploadPageTamil.java @@ -15,9 +15,9 @@ import regclient.page.CameraPage; import regclient.page.DocumentUploadPage; import regclient.pages.english.BiometricDetailsPageEnglish; -import regclient.pages.english.DocumentuploadPageEnglish; +import regclient.pages.english.DocumentUploadPageEnglish; -public class DocumentuploadPageTamil extends DocumentUploadPage { +public class DocumentUploadPageTamil extends DocumentUploadPage { @AndroidFindBy(accessibility = "ஸ்க்ரிம்") private WebElement PopUpCloseButton; @@ -43,7 +43,7 @@ public class DocumentuploadPageTamil extends DocumentUploadPage { @AndroidFindBy(uiAutomator = "UiSelector().className(\"android.view.View\").instance(8)") private WebElement imageleftCorner; - public DocumentuploadPageTamil(AppiumDriver driver) { + public DocumentUploadPageTamil(AppiumDriver driver) { super(driver); } @@ -59,7 +59,7 @@ public boolean isDoccumentUploadPageDisplayed() { public DocumentUploadPage clickOnSaveButton() { clickOnElement(saveButton); - return new DocumentuploadPageEnglish(driver); + return new DocumentUploadPageTamil(driver); } public boolean isRetakeButtonDisplayed() { diff --git a/ui-test/src/main/java/regclient/pages/tamil/IdentityProofPageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/IdentityProofPageTamil.java index 39734af01..6f359ae0a 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/IdentityProofPageTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/IdentityProofPageTamil.java @@ -29,7 +29,7 @@ public IdentityProofPageTamil(AppiumDriver driver) { public DocumentUploadPage clickOnSaveButton() { clickOnElement(saveButton); - return new DocumentuploadPageTamil(driver); + return new DocumentUploadPageTamil(driver); } public boolean isRetakeButtonDisplayed() { diff --git a/ui-test/src/main/java/regclient/pages/tamil/PendingApprovalTamil.java b/ui-test/src/main/java/regclient/pages/tamil/PendingApprovalTamil.java index d742c4a34..4fe5d7a6f 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/PendingApprovalTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/PendingApprovalTamil.java @@ -193,7 +193,7 @@ public boolean isSubmitButtonEnabled() { return isElementEnabled(submitButton); } - public boolean isInvalidemptyUsernameSumbitButtonEnbled() { + public boolean isSubmitButtonEnabledWithEmptyUsername() { return isElementEnabled(invalidUsernameMessageForempty); } diff --git a/ui-test/src/main/java/regclient/pages/tamil/PreviewPageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/PreviewPageTamil.java index 62a1ca512..7ab4f6fc1 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/PreviewPageTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/PreviewPageTamil.java @@ -45,6 +45,9 @@ public class PreviewPageTamil extends PreviewPage { @AndroidFindBy(accessibility = "இழந்த UIN") private WebElement lostUinTitle; + + @AndroidFindBy(accessibility = "பயோமெட்ரிக் திருத்தம்") + private WebElement biometricCorrectionTitle; public PreviewPageTamil(AppiumDriver driver) { super(driver); @@ -125,4 +128,8 @@ public String getEmailId() { public boolean isLostUinTitleDisplayed() { return isElementDisplayed(lostUinTitle); } + + public boolean isBiometricCorrectionTitleDisplayed() { + return isElementDisplayed(biometricCorrectionTitle); + } } diff --git a/ui-test/src/main/java/regclient/pages/tamil/RegistrationTasksPageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/RegistrationTasksPageTamil.java index 255e3c267..0af10692c 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/RegistrationTasksPageTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/RegistrationTasksPageTamil.java @@ -171,4 +171,8 @@ public void handleLocationPermission() { public void clickOnRegistrationTasksTab() { clickOnElement(registrationTasksTitle); } + + public boolean isSettingsButtonDisplayed() { + return isElementDisplayed(settingsButton); + } } diff --git a/ui-test/src/main/java/regclient/pages/tamil/SettingsPageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/SettingsPageTamil.java index cb9c6edad..4677d523a 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/SettingsPageTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/SettingsPageTamil.java @@ -66,6 +66,27 @@ public class SettingsPageTamil extends SettingsPage { @AndroidFindBy(accessibility = "CANCEL") private WebElement changesCancelButton; + + @AndroidFindBy(accessibility = "Scheduled Job Settings") + private WebElement scheduledJobSettingsPageHeader; + + @AndroidFindBy(xpath = "//*[@content-desc[contains(.,'Master Data Sync')]]") + private WebElement masterDataSyncCard; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'Master Data Sync')]//android.widget.Button") + private WebElement masterDataSyncButton; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'thumbs_fingerprint_threshold')]//android.widget.EditText") + private WebElement thumbsThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'iris_threshold')]//android.widget.EditText") + private WebElement irisThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'rightslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement rightSlapThresholdField; + + @AndroidFindBy(xpath = "//android.view.View[contains(@content-desc,'leftslap_fingerprint_threshold')]//android.widget.EditText") + private WebElement leftSlapThresholdField; public SettingsPageTamil(AppiumDriver driver) { super(driver); @@ -173,5 +194,43 @@ public boolean isSubmitChangesPopupDisplayed() { public void clickOnChangesConfirmButton() { clickOnElement(changesConfirmButton); } + + public boolean isScheduledJobSettingsPageHeaderDisplayed() { + return isElementDisplayed(scheduledJobSettingsPageHeader); + } + + public boolean isMasterDataSyncCardDisplayed() { + return isElementDisplayed(masterDataSyncCard); + } + + public void clickOnMasterDataSyncButton() { + clickOnElement(masterDataSyncButton); + } + + public boolean isToastVisible(String toastMessage) { + for (int i = 0; i < 15; i++) { // ~3 seconds + if (driver.getPageSource().contains(toastMessage)) { + return true; + } + try { + Thread.sleep(200); + } catch (Exception ignored) { + } + } + return false; + } + + public WebElement getSyncButton(String jobName) { + return driver.findElement( + By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]//*[@clickable='true']")); + } + + public boolean validateJobCardFields(String jobName) { + WebElement card = driver + .findElement(By.xpath("//android.view.View[contains(@content-desc,'" + jobName + "')]")); + String cd = card.getAttribute("content-desc"); + return cd.contains(jobName) && cd.contains("Next Run") && cd.contains("Last Sync") + && cd.contains("Cron Expression"); + } } diff --git a/ui-test/src/main/java/regclient/pages/tamil/SupervisorBiometricVerificationpageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/SupervisorBiometricVerificationpageTamil.java index 78c18f88c..52eaf7f0a 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/SupervisorBiometricVerificationpageTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/SupervisorBiometricVerificationpageTamil.java @@ -258,7 +258,7 @@ public void markOneEyeException() { clickOnElement(oneEyeException); } - public void markOneFingreException() { + public void markOneFingerException() { clickOnElement(firstFingureExceptionImage); } diff --git a/ui-test/src/main/java/regclient/pages/tamil/UpdateOperatorBiometricspageTamil.java b/ui-test/src/main/java/regclient/pages/tamil/UpdateOperatorBiometricspageTamil.java index 9e04442fc..6546cea46 100644 --- a/ui-test/src/main/java/regclient/pages/tamil/UpdateOperatorBiometricspageTamil.java +++ b/ui-test/src/main/java/regclient/pages/tamil/UpdateOperatorBiometricspageTamil.java @@ -1,8 +1,13 @@ package regclient.pages.tamil; +import java.time.Duration; + import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; import io.appium.java_client.AppiumDriver; +import io.appium.java_client.MobileBy; import io.appium.java_client.pagefactory.AndroidFindBy; import regclient.page.UpdateOperatorBiometricspage; @@ -393,4 +398,29 @@ public void clickOnBackButton() { public boolean isUpdateOperatorBiometricsPageLoaded() { return isElementDisplayed(updateOperatorBiometrics); } + + public boolean validateThreshold(int expected) { + WebElement el = driver.findElement(MobileBy.AndroidUIAutomator( + "new UiScrollable(new UiSelector().scrollable(true))" + + ".scrollIntoView(new UiSelector().descriptionContains(\"வரம்பு\"));" + )); + + String text = el.getAttribute("content-desc"); // "Threshold 75%" + int actual = Integer.parseInt(text.replaceAll("[^0-9]", "")); // extract 75 + + return actual == expected; + } + + public void updateBiometricsAndWaitPopup() { + for (int i = 1; i <= 5; i++) { + clickOnVerifyAndSaveButton(); + try { + new WebDriverWait(driver, Duration.ofSeconds(60)) + .until(ExpectedConditions.visibilityOf(successPopup)); + return; // success + } catch (Exception ignored) {} + try { Thread.sleep(2000); } catch (InterruptedException ignored) {} + } + throw new AssertionError("Biometrics update success popup not displayed after 5 retries."); + } } diff --git a/ui-test/src/main/java/regclient/utils/EmailableReport.java b/ui-test/src/main/java/regclient/utils/EmailableReport.java index 91f2c5716..ad0d29928 100644 --- a/ui-test/src/main/java/regclient/utils/EmailableReport.java +++ b/ui-test/src/main/java/regclient/utils/EmailableReport.java @@ -28,10 +28,6 @@ import regclient.api.ArcConfigManager; - - - - /** * Reporter that generates a single-page HTML report of the test results. */ @@ -124,27 +120,73 @@ protected void writeHead() { } protected void writeStylesheet() { - writer.print(""); + writer.print(""); } + + + + + protected void writeBody() { writer.print(""); writeSuiteSummary(); @@ -158,197 +200,198 @@ protected void writeDocumentEnd() { } protected void writeSuiteSummary() { - NumberFormat integerFormat = NumberFormat.getIntegerInstance(); - NumberFormat decimalFormat = NumberFormat.getNumberInstance(); - - totalPassedTests = 0; - totalSkippedTests = 0; - totalFailedTests = 0; - long totalDuration = 0; - writer.print(""); - int testIndex = 0; - for (SuiteResult suiteResult : suiteResults) { - - writer.print(""); - writer.print(""); - // writer.print(""); - writer.print(""); - writer.print(""); - writer.print(""); - writer.print(""); - // writer.print(""); - // writer.print(""); - writer.print(""); - - for (TestResult testResult : suiteResult.getTestResults()) { - int passedTests = testResult.getPassedTestCount(); - int skippedTests = testResult.getSkippedTestCount(); - int failedTests = testResult.getFailedTestCount(); - long duration = testResult.getDuration(); - - writer.print(""); - - buffer.setLength(0); - // writeTableData(buffer.append("") - // .append(Utils.escapeHtml(testResult.getTestName())).append("").toString()); - writeTableData(integerFormat.format(passedTests), (passedTests > 0 ? "num green-bg" : "num")); - writeTableData(integerFormat.format(skippedTests), (skippedTests > 0 ? "num orange-bg" : "num")); - writeTableData(integerFormat.format(failedTests), (failedTests > 0 ? "num attn" : "num")); - writeTableData(decimalFormat.format(duration), "num"); - /* - * writeTableData(testResult.getIncludedGroups()); - * writeTableData(testResult.getExcludedGroups()); - */ - - writer.print(""); - - totalPassedTests += passedTests; - totalSkippedTests += skippedTests; - totalFailedTests += failedTests; - totalDuration += duration; - - testIndex++; - } - } - - // Print totals if there was more than one test - if (testIndex > 1) { - writer.print(""); - writer.print(""); - writeTableHeader(integerFormat.format(totalPassedTests), "num"); - writeTableHeader(integerFormat.format(totalSkippedTests), (totalSkippedTests > 0 ? "num attn" : "num")); - writeTableHeader(integerFormat.format(totalFailedTests), (totalFailedTests > 0 ? "num attn" : "num")); - writeTableHeader(decimalFormat.format(totalDuration), "num"); - writer.print(""); - writer.print(""); - } + NumberFormat integerFormat = NumberFormat.getIntegerInstance(); + + totalPassedTests = 0; + totalSkippedTests = 0; + totalFailedTests = 0; + long totalDuration = 0; + + // compute totals across suites + for (SuiteResult suiteResult : suiteResults) { + for (TestResult testResult : suiteResult.getTestResults()) { + totalPassedTests += testResult.getPassedTestCount(); + totalSkippedTests += testResult.getSkippedTestCount(); + totalFailedTests += testResult.getFailedTestCount(); + totalDuration += testResult.getDuration(); + } + } - writer.print("
"); - writer.print(Utils.escapeHtml("Android Regclient Ui Automation ------- Env - "+ArcConfigManager.getEnv() )); - writer.print("
");
-			writer.print(Utils.escapeHtml("Date and Time  ")+printCurrentDateTime());
-			writer.print("
"); - // writer.print(GlobalConstants.TRTR); - - writer.print("
Test Suite# Passed# Skipped# FailedTime (ms)Included GroupsExcluded Groups
Total
"); + // top block (env info) + writer.print(""); + writer.print(""); + writer.print("
"); + writer.print(Utils.escapeHtml("Use Cases Test Report ---- Report Date: " + printCurrentDateTime() + + " ---- Tested Environment: " + ArcConfigManager.getEnv())); + writer.print("
"); + + // summary-of-test-results block + writer.print(""); + + // define columns widths: tweak percentages to match screenshot proportions + writer.print(""); + writer.print(""); // # Total + writer.print(""); // # Passed + writer.print(""); // # Ignored + writer.print(""); // # Known Issues + writer.print(""); // # Skipped + writer.print(""); // # Failed + writer.print(""); // Time + writer.print(""); + + // Title row + writer.print(""); + writer.print(""); + writer.print(""); + + // Labels row + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + + // Values row (colored bars) + writer.print(""); + writer.print(""); + writer.print(""); + // If you have an 'ignored' concept use it; here using 0 placeholder or compute if available + int totalIgnored = 0; + writer.print(""); + // If you track known issues, compute; placeholder 0 here + int totalKnown = 0; + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + + writer.print("
Summary of Test Results
# Total# Passed# Ignored# Known Issues# Skipped# FailedTime (HH:MM:SS)
" + integerFormat.format(totalPassedTests + totalFailedTests + totalSkippedTests) + "" + integerFormat.format(totalPassedTests) + "" + integerFormat.format(totalIgnored) + "" + integerFormat.format(totalKnown) + "" + integerFormat.format(totalSkippedTests) + "" + integerFormat.format(totalFailedTests) + "" + formatDurationMillis(totalDuration) + "
"); } /** * Writes a summary of all the test scenarios. */ protected void writeScenarioSummary() { - writer.print(""); - writer.print(""); - writer.print(""); - // writer.print(""); - writer.print(""); - writer.print(""); - writer.print(""); - writer.print(""); - - int testIndex = 0; - int scenarioIndex = 0; - for (SuiteResult suiteResult : suiteResults) { - /* - * writer.print(""); - */ - - for (TestResult testResult : suiteResult.getTestResults()) { - writer.print(""); - - String testName = Utils.escapeHtml("Scenarios"); - - scenarioIndex += writeScenarioSummary(testName + " — Failed (configuration methods)", - testResult.getFailedConfigurationResults(), "failed", scenarioIndex); - scenarioIndex += writeScenarioSummary(testName + " — Failed", testResult.getFailedTestResults(), - "failed", scenarioIndex); - scenarioIndex += writeScenarioSummary(testName + " — Skipped (configuration methods)", - testResult.getSkippedConfigurationResults(), "skipped", scenarioIndex); - scenarioIndex += writeScenarioSummary(testName + " — Skipped", testResult.getSkippedTestResults(), - "skipped", scenarioIndex); - scenarioIndex += writeScenarioSummary(testName + " — Passed", testResult.getPassedTestResults(), - "passed", scenarioIndex); - - writer.print(""); - - testIndex++; - } - } + writer.print("
Class Test Time (ms)
"); // - * writer.print(Utils.escapeHtml(suiteResult.getSuiteName())); - * writer.print("
"); + + // fixed columns widths: method 25%, desc 65%, time 10% (tweak if you like) + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + writer.print(""); + + int testIndex = 0; + int scenarioIndex = 0; + for (SuiteResult suiteResult : suiteResults) { + for (TestResult testResult : suiteResult.getTestResults()) { + writer.print(""); + + String testName = Utils.escapeHtml("Scenarios"); + + // The calls below print blocks for Failed / Skipped / Passed etc. + scenarioIndex += writeScenarioSummary(testName + " — Failed (configuration methods)", + testResult.getFailedConfigurationResults(), "failed", scenarioIndex); + scenarioIndex += writeScenarioSummary(testName + " — Failed", testResult.getFailedTestResults(), + "failed", scenarioIndex); + scenarioIndex += writeScenarioSummary(testName + " — Skipped (configuration methods)", + testResult.getSkippedConfigurationResults(), "skipped", scenarioIndex); + scenarioIndex += writeScenarioSummary(testName + " — Skipped", testResult.getSkippedTestResults(), + "skipped", scenarioIndex); + scenarioIndex += writeScenarioSummary(testName + " — Passed", testResult.getPassedTestResults(), + "passed", scenarioIndex); + + writer.print(""); + + testIndex++; + } + } - writer.print("
Test Description Time (HH:MM:SS)
"); + writer.print(""); } + + + + /** * Writes the scenario summary for the results of a given state for a single * test. */ private int writeScenarioSummary(String description, List classResults, String cssClassPrefix, - int startingScenarioIndex) { - int scenarioCount = 0; - if (!classResults.isEmpty()) { - writer.print(""); - writer.print(description); - writer.print(""); - - int scenarioIndex = startingScenarioIndex; - int classIndex = 0; - for (ClassResult classResult : classResults) { - String cssClass = cssClassPrefix + ((classIndex % 2) == 0 ? "even" : "odd"); - - buffer.setLength(0); - int scenariosPerClass = 0; - int methodIndex = 0; - - for (MethodResult methodResult : classResult.getMethodResults()) { - List results = methodResult.getResults(); - int resultsCount = results.size(); - assert resultsCount > 0; - ITestResult firstResult = results.iterator().next(); - String methodName=firstResult.getName(); - // Write the remaining scenarios for the method - - for (int i = 0; i < resultsCount; i++) { - - ITestResult result = results.get(i); - // String [] scenarioDetails = getScenarioDetails(result); - - // String scenarioName = Utils.escapeHtml("Scenario_" + scenarioDetails[0]); - // String scenarioDescription = Utils.escapeHtml(scenarioDetails[1]); - - long scenarioStart = result.getStartMillis(); - long scenarioDuration = result.getEndMillis() - scenarioStart; - - // buffer.append("").append("").append(scenarioName).append("") - // .append("").append(scenarioDescription).append("") - // .append("").append(scenarioDuration).append(""); - buffer.append("") // Start of table row with a specified CSS class - .append("").append(methodName).append("") // Table cell with a hyperlink - .append("").append(scenarioDuration).append(""); // Table cell with scenario duration - - scenarioIndex++; - } - scenariosPerClass += resultsCount; - methodIndex++; - } - - // Write the test results for the class - writer.print(buffer); - classIndex++; - } - scenarioCount = scenarioIndex - startingScenarioIndex; - } - return scenarioCount; + int startingScenarioIndex) { + int scenarioCount = 0; + if (!classResults.isEmpty()) { + // Apply result-based class to the block header row so it adopts the correct color. + // e.g. cssClassPrefix == "failed" -> header row class "failedodd" (uses CSS rule for that class) + writer.print(""); + writer.print(description); + writer.print(""); + + int scenarioIndex = startingScenarioIndex; + int classIndex = 0; + for (ClassResult classResult : classResults) { + int methodIndex = 0; + + for (MethodResult methodResult : classResult.getMethodResults()) { + List results = methodResult.getResults(); + int resultsCount = results.size(); + assert resultsCount > 0; + ITestResult firstResult = results.iterator().next(); + + String methodName = Utils.escapeHtml(firstResult.getMethod().getMethodName()); + String methodDesc = firstResult.getMethod().getDescription(); + if (methodDesc == null) { + methodDesc = ""; + } else { + methodDesc = Utils.escapeHtml(methodDesc); + } + + // pick odd/even suffix based on methodIndex to alternate row classes + String suffix = ((methodIndex % 2) == 0) ? "even" : "odd"; + String rowClassPrefix = cssClassPrefix + suffix; // e.g., "failedeven" or "passedeven" + + for (int i = 0; i < resultsCount; i++) { + ITestResult result = results.get(i); + long scenarioStart = result.getStartMillis(); + long scenarioDuration = result.getEndMillis() - scenarioStart; + + // each row: method | description | time (HH:MM:SS) + writer.print(""); + writer.print("" + methodName + ""); + writer.print("" + methodDesc + ""); + writer.print("" + formatDurationMillis(scenarioDuration) + ""); + writer.print(""); + + scenarioIndex++; + } + methodIndex++; + } + classIndex++; + } + scenarioCount = scenarioIndex - startingScenarioIndex; + } + return scenarioCount; } + + + public static String printCurrentDateTime() { LocalDateTime localDateTime = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE dd MMMM HH:mm:ss",Locale.ENGLISH); @@ -407,50 +450,39 @@ private int writeScenarioDetails(List classResults, int startingSce * Writes the details for an individual test scenario. */ private void writeScenario(int scenarioIndex, String label, ITestResult result) { - writer.print("

"); - writer.print(label); - writer.print("

"); - - writer.print(""); - - // Write test parameters (if any) - Object[] parameters = result.getParameters(); - int parameterCount = (parameters == null ? 0 : parameters.length); - - /* - * if (parameterCount > 0) { writer.print(""); for (int i = - * 1; i <= parameterCount; i++) { writer.print(""); } - * writer.print(""); for (Object parameter : - * parameters) { writer.print(""); } writer.print(""); } - */ - - // Write reporter messages (if any) - List reporterMessages = Reporter.getOutput(result); - if (!reporterMessages.isEmpty()) { - writer.print(""); - } + writer.print("

"); + writer.print(label); + writer.print("

"); + + writer.print("
Parameter #"); - * writer.print(i); writer.print("
"); - * writer.print(Utils.escapeHtml(Utils.toString(parameter))); - * writer.print("
"); - writeReporterMessages(reporterMessages); - writer.print("
"); + + // Reporter messages (if any) + List reporterMessages = Reporter.getOutput(result); + if (!reporterMessages.isEmpty()) { + writer.print(""); + } - // Write exception (if any) - Throwable throwable = result.getThrowable(); - if (throwable != null) { - writer.print(""); - writer.print(""); - } + // Exception (if any) + Throwable throwable = result.getThrowable(); + if (throwable != null) { + // nicer exception header + writer.print(""); + writer.print(""); + } - writer.print("
"); + writeReporterMessages(reporterMessages); + writer.print("
" - + (result.getStatus() == ITestResult.SUCCESS ? "Expected Exception" : "Exception") + "
"); - writeStackTrace(throwable); - writer.print("
Exception
"); + writer.print("
"); + writer.print(Utils.shortStackTrace(throwable, true)); + writer.print("
"); + writer.print("
"); - writer.print("

back to summary

"); + writer.print(""); + writer.print("

back to summary

"); } + protected void writeReporterMessages(List reporterMessages) { writer.print("
"); Iterator iterator = reporterMessages.iterator(); @@ -799,5 +831,17 @@ public List getResults() { return results; } } + + private String formatDurationMillis(long millis) { + if (millis < 0) { + millis = 0; + } + long totalSeconds = millis / 1000; + long hours = totalSeconds / 3600; + long minutes = (totalSeconds % 3600) / 60; + long seconds = totalSeconds % 60; + return String.format("%02d:%02d:%02d", hours, minutes, seconds); + } + } diff --git a/ui-test/src/main/java/regclient/utils/TestRunner.java b/ui-test/src/main/java/regclient/utils/TestRunner.java index dbe97b9f4..950b73609 100644 --- a/ui-test/src/main/java/regclient/utils/TestRunner.java +++ b/ui-test/src/main/java/regclient/utils/TestRunner.java @@ -14,6 +14,7 @@ import regclient.api.AdminTestUtil; import regclient.api.ArcConfigManager; import regclient.api.FetchUiSpec; +import regclient.api.KeycloakUserManager; public class TestRunner { @@ -34,7 +35,6 @@ public static void main(String[] args) { AdminTestUtil.getPreRegistrationFlow("adult"); AdminTestUtil.getPreRegistrationFlow("minor"); AdminTestUtil.getPreRegistrationFlow("infant"); - File homeDir = null; TestNG runner = new TestNG(); if (!ArcConfigManager.gettestcases().equals("")) { @@ -44,7 +44,7 @@ public static void main(String[] args) { XmlClass addMachineDetails = new XmlClass("regclient.androidTestCases.AddMachineDetails"); XmlClass initialLaunch = new XmlClass("regclient.androidTestCases.InitialLaunch"); - XmlClass logintest = new XmlClass("regclient.androidTestCases.logintest"); + XmlClass logintest = new XmlClass("regclient.androidTestCases.Logintest"); XmlClass newRegistrationAdult = new XmlClass("regclient.androidTestCases.NewRegistrationAdult"); XmlClass newRegistrationAdultException = new XmlClass( "regclient.androidTestCases.NewRegistrationAdultException"); @@ -54,13 +54,17 @@ public static void main(String[] args) { "regclient.androidTestCases.NewRegistrationMinorException"); XmlClass updateMyUinInfant = new XmlClass("regclient.androidTestCases.UpdateMyUinInfant"); XmlClass updateMyUinMinor = new XmlClass("regclient.androidTestCases.UpdateMyUinMinor"); - XmlClass updateMyUINUpdatebiometrics = new XmlClass( + XmlClass updateMyUinUpdatebiometrics = new XmlClass( "regclient.androidTestCases.UpdateMyUinUpdateBiometrics"); - XmlClass updateMyUINUpdateDemographicDetails = new XmlClass( - "regclient.androidTestCases.UpdateMyUINUpdateDemographicDetails"); + XmlClass updateMyUinUpdateDemographicDetails = new XmlClass( + "regclient.androidTestCases.UpdateMyUinUpdateDemographicDetails"); XmlClass updateMyUinUpdateDocuments = new XmlClass("regclient.androidTestCases.UpdateMyUinUpdateDocuments"); XmlClass lostUin = new XmlClass("regclient.androidTestCases.LostUin"); XmlClass settings = new XmlClass("regclient.androidTestCases.Settings"); + XmlClass resetPassword = new XmlClass("regclient.androidTestCases.ResetPassword"); + XmlClass autoLogout = new XmlClass("regclient.androidTestCases.AutoLogout"); + XmlClass biometricCorrection = new XmlClass("regclient.androidTestCases.BiometricCorrection"); + XmlClass preRegFetchingPacket = new XmlClass("regclient.androidTestCases.PreRegFetchingPacket"); List classes = new ArrayList<>(); String[] Scenarionames = ArcConfigManager.gettestcases().split(","); @@ -78,7 +82,7 @@ public static void main(String[] args) { if (Scenarioname.equalsIgnoreCase("newRegistrationAdult")) classes.add(newRegistrationAdult); - + if (Scenarioname.equalsIgnoreCase("newRegistrationAdultException")) classes.add(newRegistrationAdultException); @@ -97,11 +101,11 @@ public static void main(String[] args) { if (Scenarioname.equalsIgnoreCase("updateMyUinMinor")) classes.add(updateMyUinMinor); - if (Scenarioname.equalsIgnoreCase("updateMyUINUpdatebiometrics")) - classes.add(updateMyUINUpdatebiometrics); + if (Scenarioname.equalsIgnoreCase("updateMyUinUpdateBiometrics")) + classes.add(updateMyUinUpdatebiometrics); - if (Scenarioname.equalsIgnoreCase("updateMyUINUpdateDemographicDetails")) - classes.add(updateMyUINUpdateDemographicDetails); + if (Scenarioname.equalsIgnoreCase("updateMyUinUpdateDemographicDetails")) + classes.add(updateMyUinUpdateDemographicDetails); if (Scenarioname.equalsIgnoreCase("updateMyUinUpdateDocuments")) classes.add(updateMyUinUpdateDocuments); @@ -111,6 +115,18 @@ public static void main(String[] args) { if (Scenarioname.equalsIgnoreCase("settings")) classes.add(settings); + + if (Scenarioname.equalsIgnoreCase("resetPassword")) + classes.add(resetPassword); + + if (Scenarioname.equalsIgnoreCase("autoLogout")) + classes.add(autoLogout); + + if (Scenarioname.equalsIgnoreCase("biometricCorrection")) + classes.add(biometricCorrection); + + if (Scenarioname.equalsIgnoreCase("preRegFetchingPacket")) + classes.add(preRegFetchingPacket); } XmlTest test = new XmlTest(suite); diff --git a/ui-test/src/main/resources/testdata.json b/ui-test/src/main/resources/testdata.json index 1b4e8907b..366a52e81 100644 --- a/ui-test/src/main/resources/testdata.json +++ b/ui-test/src/main/resources/testdata.json @@ -1,11 +1,11 @@ { - "UIN": "3054097528", + "UIN": "2153672893", "UINinfant": "5074162518", "UINminor": "2312798573", "language": "eng", "defaultlanguage": "eng", "notificationLanguage": "eng", - "RID": "10001105671003120240215071549", + "RID": "10001142850000120251130090022", "id": "com.motorola.camera3:id/capture_bar_shutter_button", "fingerprint_threshold": "45" } diff --git a/ui-test/testng.xml b/ui-test/testng.xml index 98fd05fa5..ab31c3312 100644 --- a/ui-test/testng.xml +++ b/ui-test/testng.xml @@ -3,21 +3,17 @@ - + + + + + + + - @@ -50,14 +46,14 @@ - + - + - + @@ -65,31 +61,33 @@ + + + + + + - + + + + + + + + + + + + + - + @@ -97,4 +95,4 @@ - + \ No newline at end of file