diff --git a/uitest-admin/Dockerfile b/uitest-admin/Dockerfile index 5475b9d4..6c119d60 100644 --- a/uitest-admin/Dockerfile +++ b/uitest-admin/Dockerfile @@ -1,53 +1,59 @@ -# Start with a base image that includes Java 21 -FROM openjdk:21-slim +# --- Base image --- +FROM eclipse-temurin:21-jre-alpine -# Install additional dependencies, such as Selenium, Chrome, and kubectl -USER root - -RUN apt-get update && \ - apt-get install -y wget curl unzip xvfb libxi6 libgconf-2-4 chromium chromium-driver - -# Install kubectl -RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && \ - chmod +x kubectl && \ - mv kubectl /usr/local/bin/kubectl - -# Define build-time arguments and labels +# --- Build-time arguments (MUST be declared before LABEL) --- ARG SOURCE ARG COMMIT_HASH ARG COMMIT_ID ARG BUILD_TIME -# Set labels for metadata +# --- Metadata labels (used by CI for validation) --- LABEL source=${SOURCE} LABEL commit_hash=${COMMIT_HASH} LABEL commit_id=${COMMIT_ID} LABEL build_time=${BUILD_TIME} -# Define build-time arguments for user and group +# --- Additional build-time args --- ARG container_user=mosip ARG container_user_group=mosip ARG container_user_uid=1001 ARG container_user_gid=1001 - -# Set working directory for the user -ENV work_dir=/home/${container_user}/ - -# Create a new user with specified permissions -RUN groupadd -g ${container_user_gid} ${container_user_group} \ - && useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/bash -m ${container_user} -d ${work_dir} \ - && chown -R ${container_user}:${container_user} /home/${container_user}/ - -# Switch to the specified user for the subsequent commands -USER ${container_user_uid}:${container_user_gid} +ARG KUBECTL_VERSION=1.22.9 + +# --- Environment variables --- +ENV DISPLAY=:99 +ENV work_dir=/home/${container_user} + +# --- Install dependencies & setup user --- +RUN apk -q update && \ + apk add --no-cache wget curl unzip xvfb libxi chromium chromium-chromedriver bash shadow && \ + \ + addgroup -g ${container_user_gid} ${container_user_group} && \ + adduser -s /bin/sh -u ${container_user_uid} -G ${container_user_group} -h /home/${container_user} --disabled-password ${container_user} && \ + \ + curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + chmod +x kubectl && mv kubectl /usr/local/bin/ && \ + \ + mkdir -p ${work_dir}/src/test/resources/ \ + ${work_dir}/test-output/SparkReport/ \ + ${work_dir}/screenshots/ && \ + chmod -R 775 ${work_dir} # Copy your application files into the container COPY --chown=${container_user_uid}:${container_user} --chmod=771 ./entrypoint.sh ${work_dir}/entrypoint.sh COPY --chown=${container_user}:${container_user} ./src/main/resources/ ${work_dir}/resources/ COPY --chown=${container_user_uid}:${container_user} ./target/*.jar ${work_dir} -# Set the working directory -WORKDIR /home/${container_user}/ +# --- Fix permissions for entrypoint and JARs --- +RUN chmod +x ${work_dir}/entrypoint.sh && \ + find ${work_dir} -name "*.jar" -exec chmod 644 {} \; && \ + chown -R ${container_user}:${container_user} ${work_dir}; + +# --- Switch to non-root user --- +USER ${container_user_uid}:${container_user_gid} + +# --- Set working directory --- +WORKDIR ${work_dir} -# Entrypoint for the container -ENTRYPOINT ["/bin/bash", "-c", "./entrypoint.sh"] +# --- Default entrypoint --- +ENTRYPOINT ["bash", "entrypoint.sh"] \ No newline at end of file diff --git a/uitest-admin/pom.xml b/uitest-admin/pom.xml index 846706e2..e18fdbe9 100644 --- a/uitest-admin/pom.xml +++ b/uitest-admin/pom.xml @@ -75,7 +75,7 @@ com.aventstack extentreports - 5.0.9 + 5.1.2 io.github.bonigarcia diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BlockListTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BlockListTest.java index a44cf4b5..bdce18ad 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BlockListTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BlockListTest.java @@ -7,27 +7,38 @@ import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; - public class BlockListTest extends BaseClass { @Test public void blocklistedwordsCRUD() throws IOException { - String blocklistedWord=ConfigManager.getdummyData(); - String idBlocklisted="admin/masterdata/blocklisted-words/view"; - Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(), By.id(idBlocklisted)); - Commons.click(driver(), By.id("Create")); - Commons.enter(driver(), By.id("word"), blocklistedWord); - Commons.enter(driver(), By.id("description"), data); - Commons.create(driver()); - Commons.filter(driver(), By.id("word"), blocklistedWord); - Commons.edit(driver(),blocklistedWord+"auto",By.id("word")); - Commons.filter(driver(), By.id("word"), blocklistedWord+"A"); - Commons.activate(driver()); - Commons.edit(driver(),blocklistedWord+"B",By.id("word")); - Commons.filter(driver(), By.id("word"), blocklistedWord+"B"); - Commons.deactivate(driver()); + String blocklistedWord = ConfigManager.getdummyData(); + String idBlocklisted = "admin/masterdata/blocklisted-words/view"; + + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + + Commons.click(driver(), By.id(idBlocklisted), "Opened Blocklisted Words page"); + + Commons.click(driver(), By.id("Create"), "Clicked on Create Blocklisted Word button"); + + Commons.enter(driver(), By.id("word"), blocklistedWord, "Entered new blocklisted word"); + + Commons.enter(driver(), By.id("description"), data, "Entered description for blocklisted word"); + + Commons.create(driver(), "Submitted Blocklisted Word creation"); + + Commons.filter(driver(), By.id("word"), blocklistedWord, "Filtered using created word"); + + Commons.edit(driver(), blocklistedWord + "auto", By.id("word"), "Edited blocklisted word first time"); + + Commons.filter(driver(), By.id("word"), blocklistedWord + "A", "Filtered using updated word"); + + Commons.activate(driver(), "Activated the word record"); + + Commons.edit(driver(), blocklistedWord + "B", By.id("word"), "Edited blocklisted word second time"); + + Commons.filter(driver(), By.id("word"), blocklistedWord + "B", "Filtered after second update"); + Commons.deactivate(driver(), "Deactivated the word record"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java index 35f7a292..a09cda9d 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java @@ -11,40 +11,50 @@ import io.mosip.testrig.adminui.utility.Screenshot; import io.mosip.testrig.adminui.utility.TestRunner; - public class BulkUploadTest extends BaseClass { - private static final Logger logger = Logger.getLogger(BulkUploadTest.class); + private static final Logger logger = Logger.getLogger(BulkUploadTest.class); - @Test (dataProvider = "data-provider") + @Test(dataProvider = "data-provider") public void bulkUploadCRUD(String table) throws Exception { - Commons.click(driver(),By.id("admin/bulkupload")); - Commons.click(driver(),By.xpath("//a[@href='#/admin/bulkupload/masterdataupload']")); - - for(int count=0;count<=2;count++) { - Commons.click(driver(),By.id("Upload Data")); - - if(count==0) Commons.dropdown(driver(),By.id("operation"),By.id("Insert")); - if(count==1) Commons.dropdown(driver(),By.id("operation"),By.id("Update")); - if(count==2) Commons.dropdown(driver(),By.id("operation"),By.id("Delete")); - Commons.dropdown(driver(),By.id("tableName"),By.id(table)); - String filePath = TestRunner.getResourcePath()+ "//BulkUploadFiles//"+ ConfigManager.getloginlang()+"//"+table+".csv"; - Commons.enter( driver(), By.id("fileInput"), filePath); - - Commons.click(driver(),By.xpath("//button[@id='createButton']")); - Commons.click(driver(),By.id("confirmpopup")); - Commons.wait(2000); - String divText=driver().findElement(By.xpath("//div[@class='mat-dialog-content']//div")).getText(); - String divTextArr[]=divText.split(":"); - logger.info(divTextArr[1].trim()); - Commons.click(driver(),By.id("confirmmessagepopup")); //DONE - Commons.wait(2000); - String transId=driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[1]")).getText(); - String status=driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[5]")).getText(); - Reporter.log("

"); + Commons.click(driver(), By.id("admin/bulkupload"), "Clicked on Bulk Upload menu"); + Commons.click(driver(), By.xpath("//a[@href='#/admin/bulkupload/masterdataupload']"), + "Opened Master Data Upload page"); + + for (int count = 0; count <= 2; count++) { + + Commons.click(driver(), By.id("Upload Data"), "Clicked on Upload Data button"); + + if (count == 0) + Commons.dropdown(driver(), By.id("operation"), By.id("Insert"), "Selected Insert operation"); + if (count == 1) + Commons.dropdown(driver(), By.id("operation"), By.id("Update"), "Selected Update operation"); + if (count == 2) + Commons.dropdown(driver(), By.id("operation"), By.id("Delete"), "Selected Delete operation"); + + Commons.dropdown(driver(), By.id("tableName"), By.id(table), "Selected table: " + table); + + String filePath = TestRunner.getResourcePath() + "//BulkUploadFiles//" + ConfigManager.getloginlang() + "//" + + table + ".csv"; + Commons.enter(driver(), By.id("fileInput"), filePath, "Entered file path for table: " + table); + + Commons.click(driver(), By.xpath("//button[@id='createButton']"), "Clicked on Create/Upload button"); + Commons.click(driver(), By.id("confirmpopup"), "Confirmed the upload in popup"); + Commons.waitForElementVisible(driver(), By.xpath("//div[@class='mat-dialog-content']//div")); + + String divText = driver().findElement(By.xpath("//div[@class='mat-dialog-content']//div")).getText(); + String divTextArr[] = divText.split(":"); + logger.info("Bulk Upload Result: " + divTextArr[1].trim()); + + Commons.click(driver(), By.id("confirmmessagepopup"), "Closed the confirmation message popup"); + Commons.waitForElementVisible(driver(), By.xpath("//table[@class='mat-table']//tr[2]//td[1]")); + String transId = driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[1]")).getText(); + String status = driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[5]")).getText(); + Reporter.log("

"); Assert.assertTrue(transId.equals(divTextArr[1].trim())); - Assert.assertTrue(status.equalsIgnoreCase("COMPLETED"),"Status Should be COMPLETED"); + Assert.assertTrue(status.equalsIgnoreCase("COMPLETED"), "Status Should be COMPLETED"); } } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTest.java index 54e00eec..067c0db0 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTest.java @@ -7,56 +7,75 @@ import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.BaseTestCaseFunc; import io.mosip.testrig.adminui.utility.Commons; -public class CenterTest extends BaseClass{ + +public class CenterTest extends BaseClass { @Test public void centerCRUD() throws Exception { - int totalHierarchyLevels=BaseTestCaseFunc.getHierarchyNumbers(); - Reporter.log("centerCRUD",true); - String holidayDate=ConfigManager.getholidayDateCenter(); - Commons.click(driver(),By.id("admin/resources")); - Commons.click(driver(),By.id("/admin/resources/centers")); - Commons.click(driver(), By.id("Create Center")); - Commons.enter(driver(), By.id("name"), data); - Commons.dropdown(driver(),By.id("centerTypeCode")); - Commons.enter(driver(), By.id("contactPerson"),data); - Commons.enter(driver(),By.id("contactPhone"),data); - Commons.enter(driver(),By.id("longitude"),"1.1234"); - Commons.enter(driver(),By.id("latitude"),"2.2345"); - Commons.enter(driver(),By.id("addressLine1"),data); - Commons.enter(driver(),By.id("addressLine2"),data); - Commons.enter(driver(),By.id("addressLine3"),data); - for(int i=1;i<=totalHierarchyLevels;i++) { - Commons.dropdown(driver(), By.xpath("(//*[@id='fieldName'])["+i+"]")); + int totalHierarchyLevels = BaseTestCaseFunc.getHierarchyNumbers(); + Reporter.log("centerCRUD", true); + String holidayDate = ConfigManager.getholidayDateCenter(); + + Commons.click(driver(), By.id("admin/resources"), "Clicked on Resources menu"); + Commons.click(driver(), By.id("/admin/resources/centers"), "Opened Centers page"); + Commons.click(driver(), By.id("Create Center"), "Clicked on Create Center button"); + + Commons.enter(driver(), By.id("name"), data, "Entered Center name"); + Commons.dropdown(driver(), By.id("centerTypeCode"), "Selected Center Type"); + Commons.enter(driver(), By.id("contactPerson"), data, "Entered contact person"); + Commons.enter(driver(), By.id("contactPhone"), data, "Entered contact phone"); + Commons.enter(driver(), By.id("longitude"), "1.1234", "Entered longitude"); + Commons.enter(driver(), By.id("latitude"), "2.2345", "Entered latitude"); + Commons.enter(driver(), By.id("addressLine1"), data, "Entered address line 1"); + Commons.enter(driver(), By.id("addressLine2"), data, "Entered address line 2"); + Commons.enter(driver(), By.id("addressLine3"), data, "Entered address line 3"); + + for (int i = 1; i <= totalHierarchyLevels; i++) { + Commons.dropdown(driver(), By.xpath("(//*[@id='fieldName'])[" + i + "]"), "Selected hierarchy level " + i); } - try{ - Commons.dropdown(driver(), By.id("zone")); - }catch(Exception e) { + try { + Commons.dropdown(driver(), By.id("zone"), "Selected Zone"); + } catch (Exception e) { + Reporter.log("Zone dropdown not available", true); } - Commons.dropdown(driver(), By.id("holidayZone")); - Commons.enter(driver(),By.id("noKiosk"),"10"); - Commons.dropdown(driver(),By.id("processingTime"),"45"); - Commons.dropdown(driver(),By.id("startTime"),"9:00 AM"); - Commons.dropdown(driver(),By.id("endTime"),"5:00 PM"); - Commons.dropdown(driver(),By.id("lunchStartTime"),"1:00 PM"); - Commons.dropdown(driver(),By.id("lunchEndTime"),"2:00 PM"); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(1) .mat-pseudo-checkbox")); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(2) .mat-pseudo-checkbox")); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(3) > .mat-list-item-content")); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(4) > .mat-list-item-content")); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(5) > .mat-list-item-content")); - Commons.calendar(holidayDate); - Commons.click(driver(), By.id("createExceptionalHoliday")); - Commons.createRes(driver()); - Commons.filterCenter(driver(), By.id("name"), data); - Commons.editCenter(driver(),data+1,By.id("name")); - Commons.filterCenter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.editCenter(driver(),data+2,By.id("name")); - Commons.filterCenter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); - Commons.decommission(driver()); + + Commons.dropdown(driver(), By.id("holidayZone"), "Selected Holiday Zone"); + Commons.enter(driver(), By.id("noKiosk"), "10", "Entered number of kiosks"); + Commons.dropdown(driver(), By.id("processingTime"), "45", "Selected processing time"); + Commons.dropdown(driver(), By.id("startTime"), "9:00 AM", "Selected start time"); + Commons.dropdown(driver(), By.id("endTime"), "5:00 PM", "Selected end time"); + Commons.dropdown(driver(), By.id("lunchStartTime"), "1:00 PM", "Selected lunch start time"); + Commons.dropdown(driver(), By.id("lunchEndTime"), "2:00 PM", "Selected lunch end time"); + + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(1) .mat-pseudo-checkbox"), + "Selected first service checkbox"); + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(2) .mat-pseudo-checkbox"), + "Selected second service checkbox"); + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(3) > .mat-list-item-content"), + "Selected third service"); + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(4) > .mat-list-item-content"), + "Selected fourth service"); + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(5) > .mat-list-item-content"), + "Selected fifth service"); + + Commons.calendar(holidayDate, "Selected exceptional holiday date"); + Commons.click(driver(), By.id("createExceptionalHoliday"), "Created exceptional holiday"); + + Commons.createRes(driver(), "Submitted Center creation"); + Commons.filterCenter(driver(), By.id("name"), data, "Filtered using created Center name"); + + Commons.editCenter(driver(), data + 1, By.id("name"), "Edited Center name first time"); + Commons.filterCenter(driver(), By.id("name"), data + 1, "Filtered using updated Center name first time"); + + Commons.activate(driver(), "Activated the Center"); + + Commons.editCenter(driver(), data + 2, By.id("name"), "Edited Center name second time"); + Commons.filterCenter(driver(), By.id("name"), data + 2, "Filtered using updated Center name second time"); + + Commons.deactivate(driver(), "Deactivated the Center"); + Commons.decommission(driver(), "Decommissioned the Center"); } + } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTypeTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTypeTest.java index c1c7a741..245717cc 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTypeTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTypeTest.java @@ -1,34 +1,37 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; - import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class CenterTypeTest extends BaseClass{ + +public class CenterTypeTest extends BaseClass { @Test public void centerTypeCRUD() throws IOException { - String idCenterTypeCard="admin/masterdata/center-type/view"; - - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(idCenterTypeCard)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("descr"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String idCenterTypeCard = "admin/masterdata/center-type/view"; + + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(idCenterTypeCard), "Opened Center Type page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Center Type button"); + + Commons.enter(driver(), By.id("code"), data, "Entered code for new Center Type"); + Commons.enter(driver(), By.id("name"), data, "Entered name for new Center Type"); + Commons.enter(driver(), By.id("descr"), data, "Entered description for new Center Type"); + + Commons.create(driver(), "Submitted new Center Type creation"); + Commons.filter(driver(), By.id("name"), data, "Filtered using created Center Type name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Center Type name first time"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered using updated Center Type name"); + + Commons.activate(driver(), "Activated the Center Type"); + Commons.edit(driver(), data + 2, By.id("name"), "Edited Center Type name second time"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered using updated Center Type name second time"); + Commons.deactivate(driver(), "Deactivated the Center Type"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceSpecificationTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceSpecificationTest.java index a588464f..2df08649 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceSpecificationTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceSpecificationTest.java @@ -1,34 +1,40 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DeviceSpecificationTest extends BaseClass{ - +public class DeviceSpecificationTest extends BaseClass { @Test public void deviceSpecCRUD() throws IOException { - String devicespec="admin/masterdata/device-specs/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(devicespec)); - Commons.click(driver(),By.id("Create")); - - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.enter(driver(),By.id("brand"),data); - Commons.enter(driver(),By.id("model"),data); - Commons.enter(driver(),By.id("minDriverversion"),data); - Commons.dropdown(driver(),By.id("deviceTypeCode")); - - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String devicespec = "admin/masterdata/device-specs/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(devicespec), "Opened Device Specification page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Device Specification"); + + Commons.enter(driver(), By.id("name"), data, "Entered Device Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Device Description"); + Commons.enter(driver(), By.id("brand"), data, "Entered Device Brand"); + Commons.enter(driver(), By.id("model"), data, "Entered Device Model"); + Commons.enter(driver(), By.id("minDriverversion"), data, "Entered Minimum Driver Version"); + + Commons.dropdown(driver(), By.id("deviceTypeCode"), "Selected Device Type"); + + Commons.create(driver(), "Saved the new Device Specification"); + + Commons.filter(driver(), By.id("name"), data, "Filtered Device Spec by name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Device Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered again after edit"); + + Commons.activate(driver(), "Activated Device Specification"); + + Commons.edit(driver(), data + 2, By.id("name"), "Edited Device Name again after activation"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered again after second edit"); + + Commons.deactivate(driver(), "Deactivated Device Specification"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTest.java index 69eab082..39a3fd54 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTest.java @@ -1,6 +1,5 @@ package io.mosip.testrig.adminui.testcase; - import java.io.IOException; import org.openqa.selenium.By; @@ -9,31 +8,38 @@ import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DeviceTest extends BaseClass{ +public class DeviceTest extends BaseClass { @Test public void deviceCRUD() throws InterruptedException, IOException { String validityDate; validityDate = ConfigManager.getvalidityDate(); - Commons.click(driver(),By.id("admin/resources")); - Commons.click(driver(),By.id("/admin/resources/devices")); - Commons.click(driver(),By.id("Create Device")); - Commons.enter(driver(), By.id("name"),data); - Commons.enter(driver(), By.id("serialNumber"),data); - Commons.enter(driver(), By.id("macAddress"),"1.1234"); - Commons.enter(driver(), By.id("ipAddress"),"2.2345"); - Commons.calendar(validityDate); - Commons.dropdown(driver(),By.id("deviceSpecId")); - Commons.dropdown(driver(),By.id("regCenterId")); - Commons.createRes(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.editRes(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.editRes(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); - Commons.decommission(driver()); + Commons.click(driver(), By.id("admin/resources"), "Clicked on Resources menu"); + Commons.click(driver(), By.id("/admin/resources/devices"), "Opened Devices page"); + Commons.click(driver(), By.id("Create Device"), "Clicked on Create Device"); + + Commons.enter(driver(), By.id("name"), data, "Entered Device Name"); + Commons.enter(driver(), By.id("serialNumber"), data, "Entered Serial Number"); + Commons.enter(driver(), By.id("macAddress"), "1.1234", "Entered MAC Address"); + Commons.enter(driver(), By.id("ipAddress"), "2.2345", "Entered IP Address"); + + Commons.calendar(validityDate, "Selected Device Validity Date"); + Commons.dropdown(driver(), By.id("deviceSpecId"), "Selected Device Specification"); + Commons.dropdown(driver(), By.id("regCenterId"), "Selected Registration Center"); + + Commons.createRes(driver(), "Created Device Record Successfully"); + + Commons.filter(driver(), By.id("name"), data, "Filtered device by name"); + + Commons.editRes(driver(), data + 1, By.id("name"), "Edited Device Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered again after edit"); + + Commons.activate(driver(), "Activated Device"); + + Commons.editRes(driver(), data + 2, By.id("name"), "Edited Device again after activation"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + Commons.deactivate(driver(), "Deactivated Device"); + Commons.decommission(driver(), "Decommissioned Device"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java index 40184efb..6de9edd8 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java @@ -1,28 +1,37 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DeviceTypesTest extends BaseClass{ +public class DeviceTypesTest extends BaseClass { @Test public void deviceTypesCRUD() throws IOException { - String deviceTypes="admin/masterdata/device-types/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(deviceTypes)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String deviceTypes = "admin/masterdata/device-types/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(deviceTypes), "Opened Device Types page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Device Type button"); + + Commons.enter(driver(), By.id("code"), data, "Entered Device Type Code"); + Commons.enter(driver(), By.id("name"), data, "Entered Device Type Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Device Type Description"); + Commons.create(driver(), "Created Device Type"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by device type name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Editing Device Type Name"); + + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Device Type"); + + Commons.edit(driver(), data + 2, By.id("name"), "Editing Device Type Name"); + + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Device Type"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java index f79389f4..84115300 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java @@ -1,32 +1,41 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; - import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DocumentCategoriesTest extends BaseClass{ - +public class DocumentCategoriesTest extends BaseClass { + @Test public void documentCategoriesCRUD() throws IOException { - - String documentCategories="admin/masterdata/document-categories/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(documentCategories)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + + String documentCategories = "admin/masterdata/document-categories/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(documentCategories), "Opened Document Categories page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Document Category"); + + Commons.enter(driver(), By.id("code"), data, "Entered Document Category Code"); + Commons.enter(driver(), By.id("name"), data, "Entered Document Category Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Document Category Description"); + + Commons.create(driver(), "Created Document Category"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by Document Category Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Editing Document Category Name"); + + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Document Category"); + + Commons.edit(driver(), data + 2, By.id("name"), "Editing Document Category again"); + + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Document Category"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentTypes.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentTypes.java index ecb8cde4..f43853bf 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentTypes.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentTypes.java @@ -1,4 +1,5 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; @@ -6,25 +7,32 @@ import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DocumentTypes extends BaseClass{ - +public class DocumentTypes extends BaseClass { + @Test public void documentTypesCRUD() throws IOException { - String documentTypes="admin/masterdata/document-type/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(documentTypes)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String documentTypes = "admin/masterdata/document-type/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(documentTypes), "Opened Document Types page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Document Type"); + + Commons.enter(driver(), By.id("code"), data, "Entered Document Type Code"); + Commons.enter(driver(), By.id("name"), data, "Entered Document Type Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Document Type Description"); + + Commons.create(driver(), "Created Document Type"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by Document Type Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Editing Document Type Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after editing Document Type"); + + Commons.activate(driver(), "Activated Document Type"); + + Commons.edit(driver(), data + 2, By.id("name"), "Editing Document Type Name again"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Document Type"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DynamicFieldTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DynamicFieldTest.java index 770c51b4..336c0c90 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DynamicFieldTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DynamicFieldTest.java @@ -1,29 +1,35 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DynamicFieldTest extends BaseClass{ - +public class DynamicFieldTest extends BaseClass { @Test public void dynamicFieldCRUD() throws IOException { - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id("createDynamicField")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),"Automation"); - Commons.enter(driver(),By.id("description"),"Automation"); - Commons.enter(driver(),By.id("value"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("description"), "Automation"); - Commons.edit(driver(),data+1,By.id("code")); - Commons.filter(driver(), By.id("description"), "Automation"); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("code")); - Commons.filter(driver(), By.id("description"), "Automation"); - Commons.deactivate(driver()); + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id("createDynamicField"), "Opened Create Dynamic Field page"); + + Commons.enter(driver(), By.id("code"), data, "Entered Dynamic Field Code"); + Commons.enter(driver(), By.id("name"), "Automation", "Entered Dynamic Field Name"); + Commons.enter(driver(), By.id("description"), "Automation", "Entered Dynamic Field Description"); + Commons.enter(driver(), By.id("value"), data, "Entered Dynamic Field Value"); + + Commons.create(driver(), "Created Dynamic Field"); + Commons.filter(driver(), By.id("description"), "Automation", "Filtered by Dynamic Field Description"); + + Commons.edit(driver(), data + 1, By.id("code"), "Editing Dynamic Field Code"); + Commons.filter(driver(), By.id("description"), "Automation", "Filtered after Dynamic Field edit"); + + Commons.activate(driver(), "Activated Dynamic Field"); + + Commons.edit(driver(), data + 2, By.id("code"), "Editing Dynamic Field Code again"); + Commons.filter(driver(), By.id("description"), "Automation", "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Dynamic Field"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/HolidaysTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/HolidaysTest.java index ad7464c8..42a39ec7 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/HolidaysTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/HolidaysTest.java @@ -1,31 +1,40 @@ package io.mosip.testrig.adminui.testcase; + import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class HolidaysTest extends BaseClass{ +public class HolidaysTest extends BaseClass { @Test public void holidaysCRUD() throws Exception { - String listofholidays="admin/masterdata/holiday/view"; - String holidayDate=ConfigManager.getholidayDate(); - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(listofholidays)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("holidayName"),data); - Commons.enter(driver(),By.id("holidayDesc"),data); - Commons.calendar(holidayDate); - Commons.dropdown(driver(),By.id("locationCode")); - Commons.create(driver()); - Commons.filter(driver(), By.id("holidayName"), data); - Commons.edit(driver(),data+1,By.id("holidayName")); - Commons.filter(driver(), By.id("holidayName"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("holidayName")); - Commons.filter(driver(), By.id("holidayName"), data+2); - Commons.deactivate(driver()); + String listofholidays = "admin/masterdata/holiday/view"; + String holidayDate = ConfigManager.getholidayDate(); + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(listofholidays), "Opened List of Holidays page"); + Commons.click(driver(), By.id("Create"), "Clicked Create Holiday"); + + Commons.enter(driver(), By.id("holidayName"), data, "Entered Holiday Name"); + Commons.enter(driver(), By.id("holidayDesc"), data, "Entered Holiday Description"); + + Commons.calendar(holidayDate, "Selected Holiday Date"); + Commons.dropdown(driver(), By.id("locationCode"), "Selected Holiday Location"); + + Commons.create(driver(), "Created Holiday"); + + Commons.filter(driver(), By.id("holidayName"), data, "Filtered Holiday by Name"); + + Commons.edit(driver(), data + 1, By.id("holidayName"), "Editing Holiday Name"); + Commons.filter(driver(), By.id("holidayName"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Holiday"); + + Commons.edit(driver(), data + 2, By.id("holidayName"), "Editing Holiday Name again"); + Commons.filter(driver(), By.id("holidayName"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Holiday"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineSpecificationTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineSpecificationTest.java index 4e901858..50f5b6b5 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineSpecificationTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineSpecificationTest.java @@ -1,32 +1,41 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class MachineSpecificationTest extends BaseClass{ +public class MachineSpecificationTest extends BaseClass { @Test public void machineSpecCRUD() throws IOException { - String machinespec="admin/masterdata/machine-specs/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(machinespec)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("brand"),data); - Commons.enter(driver(),By.id("model"),data); - Commons.enter(driver(),By.id("minDriverversion"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.dropdown(driver(),By.id("machineTypeCode")); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String machinespec = "admin/masterdata/machine-specs/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(machinespec), "Opened Machine Specs page"); + Commons.click(driver(), By.id("Create"), "Clicked Create Machine Spec"); + + Commons.enter(driver(), By.id("name"), data, "Entered Machine Name"); + Commons.enter(driver(), By.id("brand"), data, "Entered Machine Brand"); + Commons.enter(driver(), By.id("model"), data, "Entered Machine Model"); + Commons.enter(driver(), By.id("minDriverversion"), data, "Entered Minimum Driver Version"); + Commons.enter(driver(), By.id("description"), data, "Entered Machine Description"); + + Commons.dropdown(driver(), By.id("machineTypeCode"), "Selected Machine Type"); + + Commons.create(driver(), "Created Machine Spec"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by Machine Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Machine Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Machine Spec"); + + Commons.edit(driver(), data + 2, By.id("name"), "Edited Machine Name again"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Machine Spec"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java index 7a81f5dd..c21bd258 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java @@ -1,45 +1,59 @@ package io.mosip.testrig.adminui.testcase; + +import org.apache.log4j.Logger; import org.openqa.selenium.By; +import org.openqa.selenium.NoSuchElementException; import org.testng.annotations.Test; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class MachineTest extends BaseClass{ +public class MachineTest extends BaseClass { + protected static Logger logger = Logger.getLogger(MachineTest.class); @Test public void machineCRUD() throws Exception { - String holidayDateCenter=ConfigManager.getholidayDateCenter(); - String publicKey=ConfigManager.getpublicKey(); - String signPublicKey=ConfigManager.getsignPublicKey(); - Commons.click(driver(),By.id("admin/resources")); - Commons.click(driver(),By.xpath("//a[@href='#/admin/resources/machines']")); - Commons.click(driver(),By.id("Create Machine")); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("serialNumber"),"1234567"); - Commons.enter(driver(),By.id("macAddress"),"1.2.3.4.5.6"); - Commons.enter(driver(),By.id("ipAddress"),"2.3.4.5.6"); - + String holidayDateCenter = ConfigManager.getholidayDateCenter(); + String publicKey = ConfigManager.getpublicKey(); + String signPublicKey = ConfigManager.getsignPublicKey(); + Commons.click(driver(), By.id("admin/resources"), "Clicked on Resources menu"); + Commons.click(driver(), By.xpath("//a[@href='#/admin/resources/machines']"), "Opened Machines page"); + Commons.click(driver(), By.id("Create Machine"), "Clicked Create Machine"); + + Commons.enter(driver(), By.id("name"), data, "Entered Machine Name"); + Commons.enter(driver(), By.id("serialNumber"), "1234567", "Entered Serial Number"); + Commons.enter(driver(), By.id("macAddress"), "1.2.3.4.5.6", "Entered MAC Address"); + Commons.enter(driver(), By.id("ipAddress"), "2.3.4.5.6", "Entered IP Address"); + String loginLang = ConfigManager.getloginlang(); - Commons.calendar(holidayDateCenter, loginLang.toLowerCase()); + Commons.calendar(holidayDateCenter, loginLang.toLowerCase(), "Selected Validity Date"); - Commons.dropdown(driver(),By.id("machineSpecId")); - Commons.enter(driver(),By.id("publicKey"),publicKey); - Commons.enter(driver(),By.id("signPublicKey"),signPublicKey); - try{ - Commons.dropdown(driver(), By.id("zone")); + Commons.dropdown(driver(), By.id("machineSpecId"), "Selected Machine Spec"); + Commons.enter(driver(), By.id("publicKey"), publicKey, "Entered Public Key"); + Commons.enter(driver(), By.id("signPublicKey"), signPublicKey, "Entered Sign Public Key"); - }catch(Exception e) { + try { + Commons.dropdown(driver(), By.id("zone"), "Selected Zone"); + } catch (NoSuchElementException e) { + logger.info("Zone dropdown not available"); } - Commons.dropdown(driver(),By.id("regCenterId")); - Commons.createRes(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.editRes(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.editRes(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); - Commons.decommission(driver()); + + Commons.dropdown(driver(), By.id("regCenterId"), "Selected Registration Center"); + + Commons.createRes(driver(), "Created Machine Record"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by Machine Name"); + + Commons.editRes(driver(), data + 1, By.id("name"), "Edited Machine Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Machine Record"); + + Commons.editRes(driver(), data + 2, By.id("name"), "Edited Machine Name again"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Machine Record"); + + Commons.decommission(driver(), "Decommissioned Machine Record"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTypesTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTypesTest.java index 11195536..0a080436 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTypesTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTypesTest.java @@ -1,29 +1,37 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class MachineTypesTest extends BaseClass{ +public class MachineTypesTest extends BaseClass { @Test public void machineTypesCRUD() throws IOException { - String machinetypes="admin/masterdata/machine-type/view" ; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(machinetypes)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String machinetypes = "admin/masterdata/machine-type/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(machinetypes), "Navigated to Machine Types page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create button"); + + Commons.enter(driver(), By.id("code"), data, "Entered Machine Type Code"); + Commons.enter(driver(), By.id("name"), data, "Entered Machine Type Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Machine Type Description"); + + Commons.create(driver(), "Clicked Create to save the Machine Type"); + + Commons.filter(driver(), By.id("name"), data, "Filtered Machine Types by Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Machine Type Name to " + (data + 1)); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered Machine Types by Edited Name"); + + Commons.activate(driver(), "Activated the Machine Type"); + + Commons.edit(driver(), data + 2, By.id("name"), "Edited Machine Type Name to " + (data + 2)); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered Machine Types by Edited Name"); + + Commons.deactivate(driver(), "Deactivated the Machine Type"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/TemplateTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/TemplateTest.java index 14943e14..9e8e4ce4 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/TemplateTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/TemplateTest.java @@ -1,33 +1,41 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class TemplateTest extends BaseClass{ - +public class TemplateTest extends BaseClass { @Test public void templateCRUD() throws IOException { - String templatesid="admin/masterdata/templates/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(templatesid)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.enter(driver(),By.id("model"),data); - Commons.enter(driver(),By.id("fileText"),data); - Commons.dropdown(driver(),By.id("fileFormatCode")); - Commons.dropdown(driver(),By.id("templateTypeCode")); - Commons.dropdown(driver(),By.id("moduleId")); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String templatesid = "admin/masterdata/templates/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(templatesid), "Navigated to Templates page"); + + Commons.click(driver(), By.id("Create"), "Clicked on Create button"); + Commons.enter(driver(), By.id("name"), data, "Entered Template Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Template Description"); + Commons.enter(driver(), By.id("model"), data, "Entered Template Model"); + Commons.enter(driver(), By.id("fileText"), data, "Entered File Text"); + + Commons.dropdown(driver(), By.id("fileFormatCode"), "Selected File Format"); + Commons.dropdown(driver(), By.id("templateTypeCode"), "Selected Template Type"); + Commons.dropdown(driver(), By.id("moduleId"), "Selected Module"); + + Commons.create(driver(), "Clicked Create to save the Template"); + + Commons.filter(driver(), By.id("name"), data, "Filtered Templates by Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Template Name to " + (data + 1)); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered Templates by Edited Name"); + + Commons.activate(driver(), "Activated the Template"); + + Commons.edit(driver(), data + 2, By.id("name"), "Edited Template Name to " + (data + 2)); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered Templates by Edited Name"); + + Commons.deactivate(driver(), "Deactivated the Template"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java new file mode 100644 index 00000000..fb178d7a --- /dev/null +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java @@ -0,0 +1,271 @@ +package io.mosip.testrig.adminui.utility; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import com.aventstack.extentreports.ExtentReports; +import com.aventstack.extentreports.ExtentTest; +import com.aventstack.extentreports.MediaEntityBuilder; +import com.aventstack.extentreports.reporter.ExtentSparkReporter; +import com.aventstack.extentreports.reporter.configuration.Theme; + +import io.mosip.testrig.adminui.kernel.util.ConfigManager; +import io.mosip.testrig.adminui.kernel.util.S3Adapter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AdminExtentReportManager { + + private static ExtentReports extent; + private static final ThreadLocal testThread = new ThreadLocal<>(); + private static final Logger LOGGER = LoggerFactory.getLogger(AdminExtentReportManager.class); + + private static boolean systemInfoAdded = false; + private static String gitBranch = "unknown"; + private static String gitCommitId = "unknown"; + private static final String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + + private static int passedCount = 0; + private static int failedCount = 0; + private static int skippedCount = 0; + private static int knownIssueCount = 0; + private static String reportPath; + + public synchronized static void initReport() { + if (extent == null) { + fetchGitDetails(); + + String reportName = "Admin UI Test Execution Report"; + reportName += " ---- Admin UI ---- Report Date: " + currentDate + " ---- Tested Environment: " + + safeEnvName() + " ---- Branch: " + gitBranch + " & Commit: " + gitCommitId; + + String timestamp = new SimpleDateFormat("yyyy-MMM-dd_HH-mm").format(new Date()).toLowerCase(); + reportPath = "test-output/AdminReport_" + timestamp + ".html"; + + ExtentSparkReporter spark = new ExtentSparkReporter(reportPath); + spark.config().setTheme(Theme.DARK); + spark.config().setDocumentTitle("Admin UI Automation Report"); + spark.config().setReportName(reportName); + + extent = new ExtentReports(); + extent.attachReporter(spark); + + addSystemInfo(); + } + } + + public synchronized static ExtentTest createTest(String testName) { + initReport(); + ExtentTest test = extent.createTest(testName); + testThread.set(test); + return test; + } + + public static ExtentTest getTest() { + return testThread.get(); + } + + public static void removeTest() { + testThread.remove(); + } + + private synchronized static void addSystemInfo() { + if (extent != null && !systemInfoAdded) { + LOGGER.info("Adding Git info to extent report: Branch = {}, Commit = {}", gitBranch, gitCommitId); + + extent.setSystemInfo("Git Branch", gitBranch); + extent.setSystemInfo("Git Commit ID", gitCommitId); + extent.setSystemInfo("Generated On", currentDate); + extent.setSystemInfo("Env", safeEnvName()); + + try { + extent.setSystemInfo("Run Language", ConfigManager.getloginlang()); + } catch (Exception ignored) { + } + + systemInfoAdded = true; + } + } + + private static String runCommand(String... command) throws IOException { + Process process = new ProcessBuilder(command).redirectErrorStream(true).start(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + + String line = reader.readLine(); + int exit = 0; + try { + exit = process.waitFor(); + } catch (InterruptedException ie) { + } + if (exit == 0 && line != null) { + return line.trim(); + } + } + throw new IOException("Command produced no output or non-zero exit code"); + } + + private static void fetchGitDetails() { + try { + gitBranch = runCommand("git", "rev-parse", "--abbrev-ref", "HEAD"); + gitCommitId = runCommand("git", "rev-parse", "--short", "HEAD"); + LOGGER.info("Fetched git via CLI: branch={}, commit={}", gitBranch, gitCommitId); + } catch (Exception e) { + LOGGER.warn("Failed to fetch git via CLI: {}. Falling back to git.properties", e.getMessage()); + loadFromGitProperties(); + } + } + + private static void loadFromGitProperties() { + Properties properties = new Properties(); + try (InputStream is = AdminExtentReportManager.class.getClassLoader().getResourceAsStream("git.properties")) { + + if (is != null) { + properties.load(is); + gitBranch = properties.getProperty("git.branch", "unknown"); + gitCommitId = properties.getProperty("git.commit.id.abbrev", "unknown"); + LOGGER.info("Loaded git.properties: branch={}, commit={}", gitBranch, gitCommitId); + } else { + LOGGER.warn("git.properties not found; using defaults"); + } + } catch (IOException ex) { + LOGGER.error("Error reading git.properties: {}", ex.getMessage()); + } + } + + private static String safeEnvName() { + try { + String env = ConfigManager.getiam_adminportal_path(); + if (env != null && !env.isEmpty()) { + env = env.toLowerCase().replace("https://", "").replace("http://", ""); + return env.replaceAll("^.*?\\.([^.]+)\\.mosip.*$", "$1"); + } + } catch (Exception ignored) { + } + + return "unknown"; + } + + public synchronized static void incrementPassed() { + passedCount++; + } + + public synchronized static void incrementFailed() { + failedCount++; + } + + public synchronized static void incrementSkipped() { + skippedCount++; + } + + public synchronized static void incrementKnownIssue() { + knownIssueCount++; + } + + public static int getPassedCount() { + return passedCount; + } + + public static int getFailedCount() { + return failedCount; + } + + public static int getSkippedCount() { + return skippedCount; + } + + public static int getKnownIssueCount() { + return knownIssueCount; + } + + public static int getTotalCount() { + return passedCount + failedCount + skippedCount + knownIssueCount; + } + + public static void logStep(String message) { + ExtentTest test = testThread.get(); + if (test != null) { + test.info(message); + } else { + LOGGER.warn("logStep called but no extent test active: {}", message); + } + } + + public static void logStepWithLocator(String message, String locatorHtml) { + ExtentTest test = testThread.get(); + if (test != null) { + String safeLocator = (locatorHtml == null) ? "[no locator]" : locatorHtml; + String html = message + "
Locator Details
" + escapeHtml(safeLocator)
+					+ "
"; + test.info(html); + } else { + LOGGER.warn("logStepWithLocator called but no extent test active: {} / {}", message, locatorHtml); + } + } + + public static void logLocator(String locatorHtml) { + ExtentTest test = testThread.get(); + if (test != null) { + String safeLocator = (locatorHtml == null) ? "[no locator]" : locatorHtml; + String html = "
Locator Details
" + escapeHtml(safeLocator)
+					+ "
"; + test.info(html); + } else { + LOGGER.warn("logLocator called but no extent test active: {}", locatorHtml); + } + } + + private static String escapeHtml(String s) { + if (s == null) + return ""; + return s.replace("&", "&").replace("<", "<").replace(">", ">"); + } + + public static void attachScreenshotFromBase64(String base64, String title) { + ExtentTest test = testThread.get(); + if (test != null && base64 != null) { + try { + test.info(title, MediaEntityBuilder.createScreenCaptureFromBase64String(base64).build()); + } catch (Exception e) { + LOGGER.warn("Failed to attach screenshot to report: {}", e.getMessage()); + } + } + } + + public static synchronized void flushReport() { + if (extent != null) { + extent.flush(); + LOGGER.info("Extent report flushed successfully."); + } + } + + public static String getReportPath() { + return reportPath; + } + + public static synchronized void pushReportToS3(String reportFilePath) { + if (ConfigManager.getPushReportsToS3().equalsIgnoreCase("yes")) { + S3Adapter s3Adapter = new S3Adapter(); + File reportFile = new File(reportFilePath); + boolean isStoreSuccess = false; + try { + isStoreSuccess = s3Adapter.putObject(ConfigManager.getS3Account(), "Adminui", null, null, + reportFile.getName(), reportFile); + if (isStoreSuccess) { + LOGGER.info("Admin Extent report successfully pushed to S3/MinIO: {} " + reportFile.getName()); + } else { + LOGGER.error("Failed to push Admin Extent report to S3/MinIO: { } " + reportFile.getName()); + } + } catch (Exception e) { + LOGGER.error("Exception while pushing Admin Extent report to S3/MinIO: {} " + e.getMessage()); + } + } + } + +} diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java new file mode 100644 index 00000000..74de6faf --- /dev/null +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java @@ -0,0 +1,124 @@ +package io.mosip.testrig.adminui.utility; + +import org.testng.ITestListener; +import org.testng.ITestResult; + +import com.aventstack.extentreports.ExtentTest; + +import org.testng.ITestContext; + +import java.io.File; + +import org.apache.log4j.Logger; + +import io.mosip.testrig.adminui.kernel.util.ConfigManager; + +public class AdminTestListener implements ITestListener { + static Logger logger = Logger.getLogger(AdminTestListener.class); + private static final String BUG_BASE_URL = "https://mosip.atlassian.net/browse/"; + + @Override + public void onStart(ITestContext context) { + AdminExtentReportManager.initReport(); + } + + @Override + public void onTestStart(ITestResult result) { + String className = result.getTestClass().getRealClass().getSimpleName(); + String methodName = result.getMethod().getMethodName(); + + String lang = "unknown"; + try { + lang = ConfigManager.getloginlang(); + } catch (Exception ignored) { + } + + String testName = className + " | " + methodName + " | Language: " + lang; + + AdminExtentReportManager.createTest(testName); + AdminExtentReportManager.logStep("🟦 Test Started : " + testName); + } + + @Override + public void onTestSuccess(ITestResult result) { + ExtentTest test = AdminExtentReportManager.getTest(); + if (test != null) { + AdminExtentReportManager.logStep("🟩 Test Passed : " + result.getName()); + AdminExtentReportManager.incrementPassed(); + test.pass("Test Passed Successfully!"); + } + } + + @Override + public void onTestFailure(ITestResult result) { + ExtentTest test = AdminExtentReportManager.getTest(); + if (test != null) { + AdminExtentReportManager.logStep("🟥 Test Failed : " + result.getName()); + AdminExtentReportManager.incrementFailed(); + test.fail(result.getThrowable()); + } + } + + @Override + public void onTestSkipped(ITestResult result) { + ExtentTest test = AdminExtentReportManager.getTest(); + if (test == null) + return; + + String testName = result.getName(); + + if (TestRunner.knownIssues.containsKey(testName)) { + + String bugId = TestRunner.knownIssues.get(testName); + String bugUrl = BUG_BASE_URL + bugId; + + AdminExtentReportManager.incrementKnownIssue(); + + String message = "🟠 Test skipped due to a known issue.
" + "Refer to Bug ID: " + bugId + ""; + + test.skip(message); + AdminExtentReportManager.logStep("Test is Marked as Known Issue: " + bugId); + + } else { + + AdminExtentReportManager.incrementSkipped(); + test.skip("⚠️ Test Skipped due to preconditions / dependencies"); + AdminExtentReportManager.logStep("⚠️ Test Skipped : " + testName); + } + } + + @Override + public void onFinish(ITestContext context) { + + AdminExtentReportManager.flushReport(); + + int passed = AdminExtentReportManager.getPassedCount(); + int failed = AdminExtentReportManager.getFailedCount(); + int skipped = AdminExtentReportManager.getSkippedCount(); + int knownIssues = AdminExtentReportManager.getKnownIssueCount(); + + int total = passed + failed + skipped + knownIssues; + + String originalReport = AdminExtentReportManager.getReportPath(); + File oldFile = new File(originalReport); + + String newReportName = originalReport.replace(".html", + "-T-" + total + "-P-" + passed + "-F-" + failed + "-S-" + skipped + "-KI-" + knownIssues + ".html"); + + File newFile = new File(newReportName); + + if (oldFile.renameTo(newFile)) { + logger.info("Renamed Report: " + newReportName); + } else { + logger.info("Report rename failed, still uploading original name."); + newReportName = originalReport; + } + + AdminExtentReportManager.pushReportToS3(newReportName); + } + + @Override + public void onTestFailedButWithinSuccessPercentage(ITestResult result) { + } +} diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java index d1e6cd9b..30da8c42 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java @@ -1,9 +1,10 @@ package io.mosip.testrig.adminui.utility; import java.io.File; +import java.lang.reflect.Method; +import java.time.Duration; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; import org.openqa.selenium.By; @@ -15,6 +16,9 @@ import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; +import org.testng.ITestResult; + +import com.aventstack.extentreports.ExtentTest; import io.github.bonigarcia.wdm.WebDriverManager; import io.mosip.testrig.adminui.kernel.util.ConfigManager; @@ -42,8 +46,9 @@ protected static WebDriver driver() { } @BeforeMethod - public void setUp() throws Exception { - Reporter.log("BaseClass", true); + public void setUp(Method testMethod) throws Exception { + AdminExtentReportManager.initReport(); + Reporter.log("BaseClass setup started", true); logger.info("Start set up"); if (System.getProperty("os.name").equalsIgnoreCase("Linux") && ConfigManager.getdocker().equals("yes")) { @@ -69,10 +74,11 @@ public void setUp() throws Exception { js = (JavascriptExecutor) driver(); vars = new HashMap(); driver().get(envPath); - logger.info("launch url --" + envPath); + logger.info("Launch URL: " + envPath); driver().manage().window().maximize(); - Commons.wait(500); - driver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); + Commons.waitForPageLoad(driver()); + ; + driver().manage().timeouts().implicitlyWait(Duration.ofSeconds(20)); String language1 = ConfigManager.getloginlang(); String loginlang; @@ -83,24 +89,44 @@ public void setUp() throws Exception { loginlang = JsonUtil.JsonObjArrayListParsing2(ConfigManager.getlangcode()); } - Commons.click(driver(), By.xpath("//*[@id='kc-locale-dropdown']")); + Commons.click(driver(), By.xpath("//*[@id='kc-locale-dropdown']"), "Clicked on language dropdown"); String xpath = "//li/a[" + "normalize-space(text())='" + loginlang + "' " + "or contains(translate(normalize-space(text()), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '" + language1.toLowerCase() + "') " + "]"; - Commons.click(driver(), By.xpath(xpath)); + Commons.click(driver(), By.xpath(xpath), "Selected language: " + loginlang); + + Commons.enter(driver(), By.id("username"), userid, "Entered username"); + Commons.enterSensitive(driver(), By.id("password"), password, "Entered password"); + Commons.click(driver(), By.xpath("//input[@name='login']"), "Clicked login button"); - Commons.enter(driver(), By.id("username"), userid); - Commons.enter(driver(), By.id("password"), password); - Commons.click(driver(), By.xpath("//input[@name='login']")); } - @AfterMethod - public void tearDown() { - if (driverThread.get() != null) { - driverThread.get().quit(); - driverThread.remove(); + @AfterMethod(alwaysRun = true) + public void tearDown(ITestResult result) { + try { + if (result != null && result.getStatus() == ITestResult.FAILURE) { + try { + WebDriver drv = driver(); + if (drv != null) { + byte[] screenshot = ((org.openqa.selenium.TakesScreenshot) drv) + .getScreenshotAs(org.openqa.selenium.OutputType.BYTES); + String base64 = java.util.Base64.getEncoder().encodeToString(screenshot); + + AdminExtentReportManager.attachScreenshotFromBase64(base64, + "Failure Screenshot - " + result.getName()); + } + } catch (Exception e) { + logger.warn("Unable to capture screenshot in tearDown: " + e.getMessage()); + } + } + } finally { + if (driverThread.get() != null) { + driverThread.get().quit(); + driverThread.remove(); + } + AdminExtentReportManager.removeTest(); } } @@ -143,9 +169,7 @@ public static String convertDigits(String number, String locale) { } return result.toString(); } else { - return number; } } - -} +} \ No newline at end of file diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java index e941da9b..8e711564 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java @@ -13,389 +13,514 @@ import org.openqa.selenium.TimeoutException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import java.time.Duration; import org.testng.Assert; import org.testng.Reporter; import io.mosip.testrig.adminui.kernel.util.ConfigManager; -public class Commons extends BaseClass{ +public class Commons extends BaseClass { + private static final Logger logger = Logger.getLogger(Commons.class); - public static String appendDate=getPreAppend()+getDateTime(); + public static String appendDate = getPreAppend() + getDateTime(); - public static String getDateTime() { + public static String getDateTime() { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmm"); LocalDateTime now = LocalDateTime.now(); return dtf.format(now); } - public static void filter(WebDriver driver, By by,String data) throws IOException { - try { - logger.info("Inside Filter " + by + data); - Commons.click(driver, By.id("Filter")); - wait(3000); - Commons.enter(driver, by, data); - wait(3000); - Commons.click(driver, By.id("applyTxt")); + private static WebDriverWait getWait(WebDriver driver) { + return new WebDriverWait(driver, Duration.ofSeconds(20)); + } + + public static void waitForElementClickable(WebDriver driver, By by) { + getWait(driver).until(ExpectedConditions.elementToBeClickable(by)); + } + + public static void waitForElementVisible(WebDriver driver, By by) { + getWait(driver).until(ExpectedConditions.visibilityOfElementLocated(by)); + } + + public static void waitForPageLoad(WebDriver driver) { + getWait(driver).until(webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState") + .equals("complete")); + } + + private static void logStep(String description, By by) { + AdminExtentReportManager.logStepWithLocator(description, getLocator(by)); + } + + private static String getLocator(By by) { + if (by == null) + return ""; + String s = by.toString(); + if (s.contains(": ")) { + String[] p = s.split(": ", 2); + return "By." + p[0].replace("By.", "") + "(\"" + p[1] + "\")"; } - catch (Exception e) { - Reporter.log("

"); + return s; + } + + public static void filter(WebDriver driver, By by, String data, String description) throws IOException { + AdminExtentReportManager.logStep(description + " | Filter Value → " + data); + try { + logger.info("Inside Filter " + by + " with data: " + data); + Commons.click(driver, By.id("Filter"), "Click Filter"); + waitForElementVisible(driver, by); + Commons.enter(driver, by, data, "Enter filter text"); + waitForElementClickable(driver, By.id("applyTxt")); + Commons.click(driver, By.id("applyTxt"), "Apply filter"); + } catch (Exception e) { + Reporter.log("

"); logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void filterCenter(WebDriver driver, By by,String data) throws IOException { - logger.info("Inside filterCenter " + by + data); - try { - Commons.click(driver, By.id("Filter")); - - Commons.dropdowncenter(driver, by, data); + public static void filter(WebDriver driver, By by, String data) throws IOException { + filter(driver, by, data, "Filter by text"); + } - Commons.click(driver, By.id("applyTxt")); - } - catch (Exception e) { - Reporter.log("

"); + public static void filterCenter(WebDriver driver, By by, String data, String description) throws IOException { + AdminExtentReportManager.logStep(description + " | Filter Value → " + data); + try { + Commons.click(driver, By.id("Filter"), "Click Filter"); + Commons.dropdowncenter(driver, by, data); + Commons.click(driver, By.id("applyTxt"), "Apply Filter"); + } catch (Exception e) { + Reporter.log("

"); logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void click(WebDriver driver, By by) throws IOException { - logger.info("Clicking " + by ); + public static void filterCenter(WebDriver driver, By by, String data) throws IOException { + filterCenter(driver, by, data, "Filter Center by value"); + } + + public static void click(WebDriver driver, By by, String description) throws IOException { + logStep(description, by); + logger.info("Clicking " + by); try { - wait(1000); + waitForElementClickable(driver, by); driver.findElement(by).click(); - wait(500); } catch (Exception e) { - Reporter.log("

"); - logger.error( e.getMessage()); + Reporter.log("

"); + logger.error(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); } } - public static void enter(WebDriver driver, By by,String value) throws IOException { - logger.info("Entering " + by +value); + public static void click(WebDriver driver, By by) throws IOException { + click(driver, by, "Clicked element"); + } + + public static void enter(WebDriver driver, By by, String value, String description) throws IOException { + logStep(description + " | Value → " + value, by); + logger.info("Entering " + by + value); try { driver.findElement(by).clear(); driver.findElement(by).sendKeys(value); - }catch (StaleElementReferenceException sere) { - Reporter.log("

"); + } catch (StaleElementReferenceException sere) { + Reporter.log("

"); driver.findElement(by).sendKeys(value); - } - catch (TimeoutException toe) { - Reporter.log("

"); + } catch (TimeoutException toe) { + Reporter.log("

"); driver.findElement(by).sendKeys(value); - logger.info( "Element identified by " + by.toString() + " was not clickable after 20 seconds"); - } - catch (Exception e) { - Reporter.log("

"); + logger.info("Element identified by " + by.toString() + " was not clickable after 20 seconds"); + } catch (Exception e) { + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); } + } + public static void enter(WebDriver driver, By by, String value) throws IOException { + enter(driver, by, value, "Entered text"); } - public static void dropdown(WebDriver driver, By by) throws IOException{ - logger.info("Selecting DropDown Index Zero Value " + by ); + public static void enterSensitive(WebDriver driver, By by, String value, String description) throws IOException { + logStep(description + " | Value → ****", by); + logger.info("Entering sensitive value into element " + by); + try { - wait(500); - click(driver,by);//REGION - wait(500); - - String att= driver.findElement(by).getAttribute("aria-owns"); - String[] list=att.split(" "); - click(driver,By.id(list[0])); - wait(500); - }catch (Exception e) { - Reporter.log("

"); + driver.findElement(by).clear(); + driver.findElement(by).sendKeys(value); + } catch (StaleElementReferenceException sere) { + Reporter.log("

"); + driver.findElement(by).sendKeys(value); + } catch (TimeoutException toe) { + Reporter.log("

"); + driver.findElement(by).sendKeys(value); + logger.info("Sensitive element " + by.toString() + " was not clickable after timeout"); + } catch (Exception e) { + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); + } + } + public static void dropdown(WebDriver driver, By by, String description) throws IOException { + logStep(description + " | Selected index 0", by); + logger.info("Selecting DropDown Index Zero Value " + by); + try { + waitForElementClickable(driver, by); + click(driver, by, "Clicked dropdown to expand options"); + + String att = driver.findElement(by).getAttribute("aria-owns"); + String[] list = att.split(" "); + waitForElementClickable(driver, By.id(list[0])); + click(driver, By.id(list[0]), "Clicked on first element from the list"); + + } catch (Exception e) { + Reporter.log("

"); + JavascriptExecutor executor = (JavascriptExecutor) driver; + executor.executeScript("arguments[0].click();", driver.findElement(by)); } } - public static void dropdown(WebDriver driver, By by,String value){ - logger.info("Selecting DropDown By Value " + by +value ); + public static void dropdown(WebDriver driver, By by, String value, String description) throws IOException { + logStep(description + " | Select dropdown using value: " + value, by); + logger.info("Selecting DropDown By Value " + by + value); try { - wait(500); - click(driver,by); - wait(500); - String val="'"+value +"'"; - click(driver,By.xpath("//span[contains(text(),"+val+")]")); - wait(500); - }catch (Exception e) { - logger.info(e.getMessage()); + waitForElementClickable(driver, by); + click(driver, by, "Clicked dropdown to expand options"); + waitForElementClickable(driver, By.xpath("//span[contains(text(),'" + value + "')]")); + String val = "'" + value + "'"; + click(driver, By.xpath("//span[contains(text()," + val + ")]"), + "Selected value: " + value + " from the list"); + + } catch (Exception e) { + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void dropdowncenter(WebDriver driver, By by,String value){ - logger.info("Selecting DropDown By Value " + by +value ); + public static void dropdowncenter(WebDriver driver, By by, String value, String description) throws IOException { + logStep(description + " | Select dropdown center using value: " + value, by); + logger.info("Selecting DropDown By Value " + by + value); try { - wait(500); - click(driver,by); - wait(500); - click(driver,By.id(value)); - wait(500); + waitForElementClickable(driver, by); + click(driver, by, "Clicked dropdown field to view options"); + waitForElementClickable(driver, By.id(value)); + click(driver, By.id(value), "Selected dropdown value with ID: " + value); - }catch (Exception e) { - logger.info(e.getMessage()); + } catch (Exception e) { + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void dropdown(WebDriver driver, By by,By value){ - logger.info("Selecting DropDown By Value " + by +value ); - try { - wait(500); - click(driver,by); - wait(500); - click(driver,value); - wait(500); - }catch (Exception e) { - logger.info(e.getMessage()); + public static void dropdowncenter(WebDriver driver, By by, String value) throws IOException { + dropdowncenter(driver, by, value, "Select dropdown center value"); + } + + public static void dropdown(WebDriver driver, By by, By value, String description) throws IOException { + logStep(description, by); + logger.info("Selecting DropDown By Value " + by + value); + try { + waitForElementClickable(driver, by); + click(driver, by, "Clicked on dropdown field to expand options"); + waitForElementClickable(driver, value); + click(driver, value, "Selected value from the dropdown"); + } catch (Exception e) { + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static String getTestData(){ + public static String getTestData() { return JsonUtil.readJsonFileText("TestData.json"); } - public static void deactivate(WebDriver driver) throws IOException { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Deactivate0")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void deactivate(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + waitForElementClickable(driver, By.id("Deactivate0")); + Commons.click(driver, By.id("Deactivate0"), "Clicked on Deactivate for the first record"); + if (isElementDisplayed(By.id("confirmpopup"))) { + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + } + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after deactivation"); logger.info("Click deactivate and Confirm"); } - public static void activate(WebDriver driver) throws IOException { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Activate0")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void deactivate(WebDriver driver) throws IOException { + deactivate(driver, "Deactivate Record"); + } + + public static void activate(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + waitForElementClickable(driver, By.id("Activate0")); + Commons.click(driver, By.id("Activate0"), "Clicked on Activate for the first record"); + if (isElementDisplayed(By.id("confirmpopup"))) { + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + } + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after activation"); logger.info("Click activate and Confirm"); } - public static void edit(WebDriver driver,String data,By by) { + public static void activate(WebDriver driver) throws IOException { + activate(driver, "Activate Record"); + } - try { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Edit0")); + public static void edit(WebDriver driver, String data, By by, String description) throws IOException { + logStep(description + " | New Value → " + data, by); - Assert.assertNotEquals(data, - driver.findElement(by).getText()); + try { + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Edit0"), "Clicked on Edit for the first record"); + Assert.assertNotEquals(data, driver.findElement(by).getText(), + "Verified existing value is different from new data"); driver.findElement(by).clear(); + Commons.enter(driver, by, data, "Entered new data: " + data); + Commons.click(driver, By.id("createButton"), "Clicked on Create button to save changes"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); - Commons.enter(driver, by, data); - - Commons.click(driver, By.id("createButton")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); - - logger.info("Click Edit and Confirm" + by + data); - } - catch (Exception e) { + logger.info("Click Edit and Confirm " + by + data); + } catch (Exception e) { logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void editRes(WebDriver driver,String data,By by) throws IOException { - try { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Edit0")); - wait(3000); - Assert.assertNotEquals(data, - driver.findElement(by).getText()); - wait(3000); - driver.findElement(by).clear(); - - Commons.enter(driver, by, data); + public static void edit(WebDriver driver, String data, By by) throws IOException { + edit(driver, data, by, "Edit the record and confirm"); + } - Commons.click(driver, By.id("createButton")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void editRes(WebDriver driver, String data, By by, String description) throws IOException { + logStep(description + " | New Value → " + data, by); - logger.info("Click Edit and Confirm" + by + data); - }catch (Exception e) { - Reporter.log("

"); + try { + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Edit0"), "Clicked on Edit for the first record"); + waitForElementVisible(driver, by); + Assert.assertNotEquals(data, driver.findElement(by).getText(), + "Verified existing value is different from new data"); + driver.findElement(by).clear(); + Commons.enter(driver, by, data, "Entered new data: " + data); + Commons.click(driver, By.id("createButton"), "Clicked on Create button to save changes"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); + logger.info("Click Edit and Confirm " + by + data); + } catch (Exception e) { + Reporter.log("

"); logger.info(e.getMessage()); + JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void editCenter(WebDriver driver,String data,By by) { - try { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Edit0")); - - Assert.assertNotEquals(data, - driver.findElement(by).getText()); - driver.findElement(by).clear(); - - Commons.enter(driver, by, data); + public static void editRes(WebDriver driver, String data, By by) throws IOException { + editRes(driver, data, by, "Edit Resource"); + } - Commons.click(driver, By.xpath("(//*[@id='createButton'])[1]")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void editCenter(WebDriver driver, String data, By by, String description) throws IOException { + logStep(description + " | New Value → " + data, by); - Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]")); - Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]")); - logger.info("Click editCenter and Confirm" + by + data); - } - catch (Exception e) { + try { + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Edit0"), "Clicked on Edit for the first record"); + waitForPageLoad(driver); + Assert.assertNotEquals(data, driver.findElement(by).getText(), + "Verified existing value is different from new data"); + driver.findElement(by).clear(); + Commons.enter(driver, by, data, "Entered new data: " + data); + waitForElementClickable(driver, By.xpath("(//*[@id='createButton'])[1]")); + Commons.click(driver, By.xpath("(//*[@id='createButton'])[1]"), "Clicked on Create button to save changes"); + if (isElementDisplayed(By.id("confirmpopup"))) { + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + } + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); + waitForElementClickable(driver, By.xpath("(//*[@id='cancel'])[1]")); + Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]"), "Clicked on first Cancel button"); + Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]"), "Clicked on second Cancel button"); + logger.info("Click editCenter and Confirm " + by + data); + } catch (Exception e) { + Reporter.log("

"); logger.info(e.getMessage()); + JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void create(WebDriver driver) throws IOException { - Commons.click(driver, By.xpath("//button[@id='createButton']")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver, By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void editCenter(WebDriver driver, String data, By by) throws IOException { + editCenter(driver, data, by, "Edit Center"); + } + + public static void create(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.xpath("//button[@id='createButton']"), "Clicked on Create button"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup"); logger.info("Click create"); } - public static void createRes(WebDriver driver) throws IOException { - Commons.click(driver, By.xpath("//button[@id='createButton']")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void create(WebDriver driver) throws IOException { + create(driver, "Submit Create"); + } + + public static void createRes(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.xpath("//button[@id='createButton']"), "Clicked on Create button"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup"); logger.info("Click and confirm"); } - public static void decommission(WebDriver driver) throws IOException { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver,By.id("Decommission0")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void createRes(WebDriver driver) throws IOException { + createRes(driver, "Create Resource"); + } + + public static void decommission(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + waitForElementClickable(driver, By.id("Decommission0")); + Commons.click(driver, By.id("Decommission0"), "Clicked on Decommission for the first record"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after decommission"); logger.info("Click decommission and confirm"); } + public static void decommission(WebDriver driver) throws IOException { + decommission(driver, "Decommission Record"); + } + public static String getPreAppend() { String preappend = null; try { - preappend =ConfigManager.getpreappend(); + preappend = ConfigManager.getpreappend(); } catch (Exception e) { e.printStackTrace(); } return preappend; } - public static void calendar(String date) throws IOException { - String a=date.replaceAll("/",""); - String mon=""; - if(a.substring(0,2).equals("10")) { - mon= a.substring(0,2); - }else { - mon=a.substring(0,2).replace("0",""); + public static void calendar(String date, String description) throws IOException { + AdminExtentReportManager.logStep(description + " | Date → " + date); + String a = date.replaceAll("/", ""); + String mon = ""; + if (a.substring(0, 2).equals("10")) { + mon = a.substring(0, 2); + } else { + mon = a.substring(0, 2).replace("0", ""); } - String d=""; - if(a.substring(2,4).equals("10") || a.substring(2,4).equals("20")||a.substring(2,4).equals("30")) { - d=a.substring(2,4); - }else { - d=a.substring(2,4).replace("0",""); + String d = ""; + if (a.substring(2, 4).equals("10") || a.substring(2, 4).equals("20") || a.substring(2, 4).equals("30")) { + d = a.substring(2, 4); + } else { + d = a.substring(2, 4).replace("0", ""); } - int month=Integer.parseInt(mon) ; - int day=Integer.parseInt(d); - int year=Integer.parseInt(a.substring(4,8)); + int month = Integer.parseInt(mon); + int day = Integer.parseInt(d); + int year = Integer.parseInt(a.substring(4, 8)); try { - Commons.click(driver(),By.xpath("//*[@class='mat-datepicker-toggle']//button")); - wait(500); - Commons.click(driver(),By.xpath("//*[@class='mat-calendar-arrow']")); - wait(500); - Commons.click(driver(),By.xpath("//*[text()='"+year+"']")); - wait(500); - List cli= driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); - cli.get(month-1).click(); - wait(500); - Commons.click(driver(),By.xpath("//*[text()='"+day+"']")); - }catch (Exception e) { - Reporter.log("

"); + waitForElementClickable(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button")); + Commons.click(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button"), "Opened the datepicker"); + + waitForElementClickable(driver(), By.xpath("//*[@class='mat-calendar-arrow']")); + Commons.click(driver(), By.xpath("//*[@class='mat-calendar-arrow']"), + "Navigated to year selection in datepicker"); + + waitForElementClickable(driver(), By.xpath("//*[text()='" + year + "']")); + Commons.click(driver(), By.xpath("//*[text()='" + year + "']"), "Selected year: " + year); + + List cli = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); + cli.get(month - 1).click(); + + waitForElementClickable(driver(), By.xpath("//*[text()='" + day + "']")); + Commons.click(driver(), By.xpath("//*[text()='" + day + "']"), "Selected day: " + day); + } catch (Exception e) { + Reporter.log("

"); logger.info(e.getMessage()); } } - - public static void calendar(String date, String locale) throws IOException { - String a = date.replaceAll("/", ""); - int month = Integer.parseInt(a.substring(0, 2)); - int day = Integer.parseInt(a.substring(2, 4)); - int year = Integer.parseInt(a.substring(4, 8)); - - try { - // Open calendar - Commons.click(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button")); - Thread.sleep(500); - - // Expand year/month selector - Commons.click(driver(), By.xpath("//*[@class='mat-calendar-arrow']")); - Thread.sleep(500); - - // Click year - String yearText = convertDigits(String.valueOf(year), locale); - Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + yearText + "']")); - Thread.sleep(500); - - // Select month (index based to avoid translation issues) - List months = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); - months.get(month - 1).click(); - Thread.sleep(500); - - // Select day (convert if Arabic locale) - String dayText = convertDigits(String.valueOf(day), locale); - Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + dayText + "']")); - } catch (Exception e) { - Reporter.log("

"); - logger.info(e.getMessage()); - } - } - - public static void wait(int waitTime) { + + public static void calendar(String date, String locale, String description) throws IOException { + AdminExtentReportManager.logStep(description + " | Date → " + date); + String a = date.replaceAll("/", ""); + int month = Integer.parseInt(a.substring(0, 2)); + int day = Integer.parseInt(a.substring(2, 4)); + int year = Integer.parseInt(a.substring(4, 8)); + try { - Thread.sleep(waitTime); - } catch (InterruptedException e) { - e.printStackTrace(); + // Open calendar + waitForElementClickable(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button")); + Commons.click(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button"), "Opened the datepicker"); + waitForElementClickable(driver(), By.xpath("//*[@class='mat-calendar-arrow']")); + + // Expand year/month selector + Commons.click(driver(), By.xpath("//*[@class='mat-calendar-arrow']"), + "Expanded year/month selector in datepicker"); + + // Click the desired year + String yearText = convertDigits(String.valueOf(year), locale); + Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + yearText + "']"), + "Selected year: " + yearText); + + // Select month (index based to avoid translation issues) + List months = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); + months.get(month - 1).click(); + + // Select day (convert if Arabic locale) + String dayText = convertDigits(String.valueOf(day), locale); + waitForElementClickable(driver(), By.xpath("//*[normalize-space(text())='" + dayText + "']")); + Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + dayText + "']"), + "Selected day: " + dayText); + } catch (Exception e) { + Reporter.log("

"); + logger.info(e.getMessage()); } } public static boolean isElementDisplayed(By by) { - try { - wait(500); // Make sure you have a proper wait method or use Thread.sleep(500); - return driver().findElement(by).isDisplayed(); - } catch (Exception e) { - return false; - } + try { + waitForElementVisible(driver(), by); + return driver().findElement(by).isDisplayed(); + } catch (Exception e) { + return false; + } } -} +} \ No newline at end of file diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java index fc061021..16fc3af6 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java @@ -12,6 +12,7 @@ import java.text.NumberFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; @@ -35,6 +36,7 @@ import io.mosip.testrig.adminui.fw.util.AdminTestUtil; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.kernel.util.S3Adapter; +import io.mosip.testrig.adminui.utility.TestRunner; /** * Reporter that generates a single-page HTML report of the test results. @@ -56,6 +58,7 @@ public class EmailableReport implements IReporter { int totalPassedTests = 0; int totalSkippedTests = 0; int totalFailedTests = 0; + int totalKnownIssues = 0; public void setFileName(String fileName) { this.fileName = fileName; @@ -65,50 +68,73 @@ public String getFileName() { return fileName; } - @Override - public void generateReport(List xmlSuites, List suites, String outputDir) { - try (PrintWriter writer = createWriter(outputDir)) { - this.writer = writer; - - for (ISuite suite : suites) suiteResults.add(new SuiteResult(suite)); - - writeDocumentStart(); - writeHead(); - writeBody(); - writeDocumentEnd(); - } catch (IOException e) { - logger.error("Error creating TestNG report", e); - return; - } - - // --- Prepare filename details --- - String lang = getValueForKey("loginlang"); - if (lang == null || lang.isEmpty()) lang = "eng"; - - String date = java.time.LocalDateTime.now() - .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm")); - - String env = "base-run"; - try { - String envUser = ConfigManager.getiam_apienvuser(); - if (envUser != null && !envUser.isEmpty()) - env = envUser.replaceAll(".*?\\.([^\\.]+\\.[^\\.]+).*", "$1"); - } catch (Exception ignored) {} - - int total = totalPassedTests + totalSkippedTests + totalFailedTests; - - String newName = String.format( - "ADMINUI-%s-%s-%s-report_T-%d_P-%d_S-%d_F-%d.html", - env, lang, date, total, totalPassedTests, totalSkippedTests, totalFailedTests - ); - - // --- Rename file --- - File oldFile = new File(outputDir, fileName); - File newFile = new File(outputDir, newName); - if (oldFile.exists() && oldFile.renameTo(newFile)) - logger.info("Report renamed to: " + newName); + public void generateReport(List xmlSuites, List suites, String outputDirectory) { + totalKnownIssues = 0; + try { + writer = createWriter(outputDirectory); + } catch (IOException e) { + logger.error("Unable to create output file", e); + return; + } + for (ISuite suite : suites) { + suiteResults.add(new SuiteResult(suite)); + } + writeDocumentStart(); + writeHead(); + writeBody(); + writeDocumentEnd(); + writer.close(); + + for (SuiteResult sr : suiteResults) { + for (TestResult tr : sr.getTestResults()) { + totalKnownIssues += tr.getKnownIssueTestCount(); + } + } + + int totalTestCases = totalPassedTests + totalSkippedTests + totalFailedTests + totalKnownIssues; + + String oldString = System.getProperty("emailable.report2.name", fileName); + String temp = "-report_T-" + totalTestCases + "_P-" + totalPassedTests + "_S-" + totalSkippedTests + "_F-" + + totalFailedTests + "_KI-" + totalKnownIssues; + String newString = oldString.replace("-report", temp); + + File orignialReportFile = new File(outputDirectory, oldString); + File newReportFile = new File(outputDirectory, newString); + logger.info("reportFile is::" + orignialReportFile.getAbsolutePath()); + logger.info("New reportFile is::" + newReportFile.getAbsolutePath()); + + if (orignialReportFile.exists()) { + if (orignialReportFile.renameTo(newReportFile)) { + orignialReportFile.delete(); + logger.info("Report File re-named successfully!"); + + if (ConfigManager.getPushReportsToS3().equalsIgnoreCase("yes")) { + S3Adapter s3Adapter = new S3Adapter(); + boolean isStoreSuccess = false; // or remove this flag until a second upload is added + try { + isStoreSuccess = s3Adapter.putObject(ConfigManager.getS3Account(), "Adminui", null, null, + newString, newReportFile); + logger.info("isStoreSuccess:: " + isStoreSuccess); + + /* Need to figure how to handle EXTENT report handling */ + + } catch (Exception e) { + logger.error("error occured while pushing the object" + e.getMessage()); + } + if (isStoreSuccess) { + logger.info("Pushed report to S3"); + } else { + logger.error("Failed while pushing file to S3"); + } + } + } else { + logger.error("Renamed report file doesn't exist"); + } + } else { + logger.error("Original report File does not exist!"); + } } - + private String getCommitId() { Properties properties = new Properties(); try (InputStream is = EmailableReport.class.getClassLoader().getResourceAsStream("git.properties")) { @@ -155,21 +181,22 @@ protected void writeStylesheet() { writer.print("table a {font-weight:bold}"); writer.print(".stripe td {background-color: #E6EBF9}"); writer.print(".num {text-align:center}"); - writer.print(".orange-bg {background-color: #FFA500}"); + writer.print(".orange-bg {background-color: #FFCF70}"); writer.print(".grey-bg {background-color: #808080}"); - writer.print(".thich-orange-bg {background-color: #CC5500}"); - writer.print(".green-bg {background-color: #0A0}"); - writer.print(".attn {background-color: #D00}"); - writer.print(".passedodd td {background-color: #3F3}"); - writer.print(".passedeven td {background-color: #0A0}"); - writer.print(".skippedodd td {background-color: #FFA500}"); - writer.print(".skippedeven td,.stripe {background-color: #FFA500}"); - writer.print(".failedodd td {background-color: #F33}"); - writer.print(".failedeven td,.stripe {background-color: #D00}"); - writer.print(".ignoredodd td {background-color: #808080}"); - writer.print(".ignoredeven td {background-color: #808080}"); - writer.print(".known_issuesodd td {background-color: #CC5500}"); - writer.print(".known_issueseven td {background-color: #CC5500}"); + writer.print(".thich-orange-bg {background-color: #E6934B}"); + writer.print(".green-bg {background-color: #6FD96F}"); + writer.print(".attn {background-color: #FF4C4C}"); + writer.print(".passedodd td {background-color: #6FD96F;}"); + writer.print(".passedeven td {background-color: #6FD96F;}"); + writer.print(".skippedodd td {background-color: #FFE7A6;}"); + writer.print(".skippedeven td {background-color: #FFE7A6;}"); + writer.print(".failedodd td {background-color: #FF4C4C;}"); + writer.print(".failedeven td {background-color: #FF4C4C;}"); + writer.print(".ignoredodd td {background-color: #808080;}"); + writer.print(".ignoredeven td {background-color: #808080;}"); + writer.print(".known_issuesodd td {background-color: #E6934B;}"); + writer.print(".known_issueseven td {background-color: #E6934B;}"); + writer.print(".stripe td {background-color: #E6EBF9}"); writer.print(".stacktrace {white-space:pre;font-family:monospace}"); writer.print(".totop {font-size:85%;text-align:center;border-bottom:2px solid #000}"); writer.print(""); @@ -198,11 +225,8 @@ protected void writeSuiteSummary() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); formattedDate = currentDate.format(formatter); - Process process = Runtime.getRuntime().exec("git rev-parse --abbrev-ref HEAD"); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - branch = reader.readLine(); } catch (Exception e) { - // TODO: handle exception + formattedDate = currentDate.toString(); } totalPassedTests = 0; totalSkippedTests = 0; @@ -229,6 +253,7 @@ protected void writeSuiteSummary() { writer.print("# Passed"); writer.print("# Skipped"); writer.print("# Failed"); + writer.print("# Known Issues"); writer.print("Time (min)"); // writer.print("Included Groups"); // writer.print("Excluded Groups"); @@ -252,6 +277,9 @@ protected void writeSuiteSummary() { 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")); + int knownIssues = testResult.getKnownIssueTestCount(); + writeTableData(String.valueOf(knownIssues), (knownIssues > 0 ? "num thich-orange-bg" : "num")); + double minutes = duration / 60000.0; writeTableData(String.format("%.2f", minutes), "num"); @@ -325,6 +353,8 @@ protected void writeScenarioSummary() { "skipped", scenarioIndex); scenarioIndex += writeScenarioSummary(testName + " — Passed", testResult.getPassedTestResults(), "passed", scenarioIndex); + scenarioIndex += writeScenarioSummary(testName + " — Known Issues", + testResult.getKnownIssueTestResults(), "known_issues", scenarioIndex); writer.print(""); @@ -385,8 +415,10 @@ private int writeScenarioSummary(String description, List classResu // specified CSS class .append("").append(methodName) .append("") // Table cell with a hyperlink - .append("").append(String.format("%.2f", scenarioDurationMin)).append(""); // Table cell with - // scenario duration + .append("").append(String.format("%.2f", scenarioDurationMin)).append(""); // Table + // cell + // with + // scenario duration scenarioIndex++; } @@ -426,10 +458,6 @@ protected void writeScenarioDetails() { } } - /** - * Writes the scenario details for the results of a given state for a single - * test. - */ private int writeScenarioDetails(List classResults, int startingScenarioIndex) { int scenarioIndex = startingScenarioIndex; for (ClassResult classResult : classResults) { @@ -451,9 +479,6 @@ private int writeScenarioDetails(List classResults, int startingSce return scenarioIndex - startingScenarioIndex; } - /** - * Writes the details for an individual test scenario. - */ private void writeScenario(int scenarioIndex, String label, ITestResult result) { writer.print("

getTestResults() { } } + private static Set getKnownIssueSubset(Set resultsSet) { + List filtered = new ArrayList<>(); + + for (ITestResult r : resultsSet) { + if (TestRunner.knownIssues.containsKey(r.getName())) { + filtered.add(r); + } + } + return Set.copyOf(filtered); + } + /** * Groups {@link ClassResult}s by test, type (configuration or test), and * status. @@ -635,28 +671,34 @@ public int compare(ITestResult o1, ITestResult o2) { private final int failedTestCount; private final int skippedTestCount; private final int passedTestCount; + private final List knownIssueTestResults; + private final int knownIssueTestCount; private final long duration; private final String includedGroups; private final String excludedGroups; public TestResult(ITestContext context) { testName = context.getName(); - Set failedConfigurations = context.getFailedConfigurations().getAllResults(); Set failedTests = context.getFailedTests().getAllResults(); Set skippedConfigurations = context.getSkippedConfigurations().getAllResults(); - Set skippedTests = context.getSkippedTests().getAllResults(); + Set rawSkipped = context.getSkippedTests().getAllResults(); Set passedTests = context.getPassedTests().getAllResults(); + Set knownIssueTests = getKnownIssueSubset(rawSkipped); + Set finalSkipped = new java.util.HashSet<>(rawSkipped); + finalSkipped.removeAll(knownIssueTests); failedConfigurationResults = groupResults(failedConfigurations); failedTestResults = groupResults(failedTests); skippedConfigurationResults = groupResults(skippedConfigurations); - skippedTestResults = groupResults(skippedTests); + skippedTestResults = groupResults(finalSkipped); passedTestResults = groupResults(passedTests); failedTestCount = failedTests.size(); - skippedTestCount = skippedTests.size(); + skippedTestCount = finalSkipped.size(); passedTestCount = passedTests.size(); + knownIssueTestCount = knownIssueTests.size(); + knownIssueTestResults = groupResults(knownIssueTests); duration = context.getEndDate().getTime() - context.getStartDate().getTime(); @@ -758,6 +800,14 @@ public List getPassedTestResults() { return passedTestResults; } + public List getKnownIssueTestResults() { + return knownIssueTestResults; + } + + public int getKnownIssueTestCount() { + return knownIssueTestCount; + } + public int getFailedTestCount() { return failedTestCount; } @@ -847,25 +897,5 @@ public List getResults() { return results; } } - - private static String getValueForKey(String key) { - String value = System.getenv(key); - if (value == null || value.isEmpty()) { - try { - java.lang.reflect.Field field = io.mosip.testrig.adminui.kernel.util.ConfigManager.class.getDeclaredField("propsKernel"); - field.setAccessible(true); - Object props = field.get(null); - if (props instanceof java.util.Properties) { - value = ((java.util.Properties) props).getProperty(key); - } - } catch (Exception e) { - value = ""; - } - } - - return value; - } - - } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java new file mode 100644 index 00000000..59b7c429 --- /dev/null +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java @@ -0,0 +1,27 @@ +package io.mosip.testrig.adminui.utility; + +import org.apache.log4j.Logger; +import org.testng.IInvokedMethod; +import org.testng.IInvokedMethodListener; +import org.testng.ITestResult; +import org.testng.SkipException; + +public class KnownIssueListener implements IInvokedMethodListener { + static Logger logger = Logger.getLogger(KnownIssueListener.class); + + @Override + public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { + if (method.isTestMethod()) { + String tcName = testResult.getMethod().getMethodName(); + + if (TestRunner.knownIssues.containsKey(tcName)) { + logger.info("Skipping Known Issue TestCase: " + tcName); + throw new SkipException("Known Issue - Skipped: " + tcName); + } + } + } + + @Override + public void afterInvocation(IInvokedMethod method, ITestResult testResult) { + } +} diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java index 97bba12a..0592e671 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java @@ -1,8 +1,11 @@ package io.mosip.testrig.adminui.utility; import java.io.File; +import java.io.BufferedReader; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.log4j.Logger; import org.testng.TestListenerAdapter; @@ -11,39 +14,71 @@ import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + import io.mosip.testrig.adminui.dbaccess.DBManager; import io.mosip.testrig.adminui.fw.util.AdminTestUtil; import io.mosip.testrig.adminui.kernel.util.ConfigManager; - public class TestRunner { private static final Logger logger = Logger.getLogger(TestRunner.class); static TestListenerAdapter tla = new TestListenerAdapter(); public static String jarUrl = TestRunner.class.getProtectionDomain().getCodeSource().getLocation().getPath(); - public static String uin=""; - public static String perpetualVid=""; - public static String onetimeuseVid=""; - public static String temporaryVid=""; + public static String uin = ""; + public static String perpetualVid = ""; + public static String onetimeuseVid = ""; + public static String temporaryVid = ""; static TestNG testNg; + public static Map knownIssues = new HashMap<>(); public static void main(String[] args) throws Exception { - + AdminTestUtil.initialize(); DBManager.clearMasterDbData(); + + try (BufferedReader br = new BufferedReader(new InputStreamReader( + new FileInputStream(getResourcePath() + "/config/Known_Issues.txt"), StandardCharsets.UTF_8))) { + + String line; + while ((line = br.readLine()) != null) { + line = line.trim(); + + if (line.isEmpty() || line.startsWith("#") || !line.contains("------")) { + continue; + } + + String[] parts = line.split("------", 2); + if (parts.length == 2 && !parts[0].trim().isEmpty() && !parts[1].trim().isEmpty()) { + String bugId = parts[0].trim(); + String testCaseName = parts[1].trim(); + + knownIssues.put(testCaseName, bugId); + } + } + + logger.info("Known Issues Loaded: " + knownIssues); + + } catch (Exception e) { + logger.warn("Known_Issues.txt not found or unreadable: " + e.getMessage()); + } + startTestRunner(); } - public static void startTestRunner() throws Exception { File homeDir = null; TestNG runner = new TestNG(); - if(!ConfigManager.gettestcases().equals("")) { + if (!ConfigManager.gettestcases().equals("")) { XmlSuite suite = new XmlSuite(); suite.setName("ADMIN-UI-AUTOMATION"); suite.addListener("io.mosip.testrig.adminui.utility.EmailableReport"); + suite.addListener("io.mosip.testrig.adminui.utility.AdminTestListener"); + suite.addListener("io.mosip.testrig.adminui.utility.KnownIssueListener"); XmlClass blocklistedwordsCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.BlockListTest"); XmlClass bulkUploadCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.BulkUploadTest"); XmlClass centerCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.CenterTest"); @@ -56,61 +91,60 @@ public static void startTestRunner() throws Exception { XmlClass dynamicFieldCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.DynamicFieldTest"); XmlClass holidaysCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.HolidaysTest"); XmlClass machineSpecCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.MachineSpecificationTest"); - XmlClass machineCRUD= new XmlClass("io.mosip.testrig.adminui.testcase.MachineTest"); + XmlClass machineCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.MachineTest"); XmlClass machineTypesCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.MachineTypesTest"); XmlClass templateCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.TemplateTest"); List classes = new ArrayList<>(); - String[] Scenarioname=ConfigManager.gettestcases().split(","); - for(String test:Scenarioname) { - if(test.equals("blocklistedwordsCRUD")) + String[] Scenarioname = ConfigManager.gettestcases().split(","); + for (String test : Scenarioname) { + if (test.equals("blocklistedwordsCRUD")) classes.add(blocklistedwordsCRUD); - if(test.equals("bulkUploadCRUD")) + if (test.equals("bulkUploadCRUD")) classes.add(bulkUploadCRUD); - if(test.equals("centerCRUD")) + if (test.equals("centerCRUD")) classes.add(centerCRUD); - if(test.equals("centerTypeCRUD")) + if (test.equals("centerTypeCRUD")) classes.add(centerTypeCRUD); - if(test.equals("deviceSpecCRUD")) + if (test.equals("deviceSpecCRUD")) classes.add(deviceSpecCRUD); - if(test.equals("deviceCRUD")) + if (test.equals("deviceCRUD")) classes.add(deviceCRUD); - if(test.equals("deviceTypesCRUD")) + if (test.equals("deviceTypesCRUD")) classes.add(deviceTypesCRUD); - if(test.equals("documentCategoriesCRUD")) + if (test.equals("documentCategoriesCRUD")) classes.add(documentCategoriesCRUD); - if(test.equals("documentTypesCRUD")) + if (test.equals("documentTypesCRUD")) classes.add(documentTypesCRUD); - if(test.equals("dynamicFieldCRUD")) + if (test.equals("dynamicFieldCRUD")) classes.add(dynamicFieldCRUD); - if(test.equals("holidaysCRUD")) + if (test.equals("holidaysCRUD")) classes.add(holidaysCRUD); - if(test.equals("machineSpecCRUD")) + if (test.equals("machineSpecCRUD")) classes.add(machineSpecCRUD); - if(test.equals("machineCRUD")) + if (test.equals("machineCRUD")) classes.add(machineCRUD); - if(test.equals("machineTypesCRUD")) + if (test.equals("machineTypesCRUD")) classes.add(machineTypesCRUD); - if(test.equals("templateCRUD")) + if (test.equals("templateCRUD")) classes.add(templateCRUD); } - XmlTest test = new XmlTest(suite); test.setName("MyTest"); test.setXmlClasses(classes); @@ -120,7 +154,7 @@ public static void startTestRunner() throws Exception { runner.setXmlSuites(suites); - }else { + } else { List suitefiles = new ArrayList(); String os = System.getProperty("os.name"); if (checkRunType().contains("IDE") || os.toLowerCase().contains("windows") == true) { @@ -136,23 +170,20 @@ public static void startTestRunner() throws Exception { suitefiles.add(file.getAbsolutePath()); } } - + runner.addListener(new KnownIssueListener()); runner.setTestSuites(suitefiles); - } // Set other properties and run TestNG - System.getProperties().setProperty("testng.outpur.dir", "testng-report"); + System.getProperties().setProperty("testng.output.dir", "testng-report"); runner.setOutputDirectory("testng-report"); - System.getProperties().setProperty("emailable.report2.name", "ADMINUI-" + BaseTestCaseFunc.environment - + "-run-" + System.currentTimeMillis() + "-report.html"); + System.getProperties().setProperty("emailable.report2.name", + "ADMINUI-" + BaseTestCaseFunc.environment + "-run-" + System.currentTimeMillis() + "-report.html"); runner.run(); DBManager.clearMasterDbData(); System.exit(0); } - - public static String getGlobalResourcePath() { if (checkRunType().equalsIgnoreCase("JAR")) { return new File(jarUrl).getParentFile().getAbsolutePath().toString(); @@ -168,12 +199,13 @@ public static String getGlobalResourcePath() { public static String getResourcePath() { if (checkRunType().equalsIgnoreCase("JAR")) { - return new File(jarUrl).getParentFile().getAbsolutePath().toString()+"/resources/"; + return new File(jarUrl).getParentFile().getAbsolutePath().toString() + "/resources/"; } else if (checkRunType().equalsIgnoreCase("IDE")) { String path = System.getProperty("user.dir") + System.getProperty("path.config"); - // String path = new File(TestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath() - // .toString(); + // String path = new + // File(TestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath() + // .toString(); if (path.contains("test-classes")) path = path.replace("test-classes", "classes"); return path; @@ -187,17 +219,17 @@ public static String checkRunType() { else return "IDE"; } - public static String GetKernalFilename(){ + + public static String GetKernalFilename() { String path = System.getProperty("env.user"); - String kernalpath=null; - if(System.getProperty("env.user")==null || System.getProperty("env.user").equals("")) { - kernalpath="Kernel.properties"; + String kernalpath = null; + if (System.getProperty("env.user") == null || System.getProperty("env.user").equals("")) { + kernalpath = "Kernel.properties"; - }else { - kernalpath="Kernel_"+path+".properties"; + } else { + kernalpath = "Kernel_" + path + ".properties"; } return kernalpath; } - } diff --git a/uitest-admin/src/main/resources/config/Known_Issues.txt b/uitest-admin/src/main/resources/config/Known_Issues.txt new file mode 100644 index 00000000..48731920 --- /dev/null +++ b/uitest-admin/src/main/resources/config/Known_Issues.txt @@ -0,0 +1,3 @@ +#Add the Known Issue Testcase with its bug id here +#Ex:bugId------testcaseName +#Ex:MOSIP-2724------deviceTypesCRUD \ No newline at end of file diff --git a/uitest-admin/src/main/resources/testngFile/testng.xml b/uitest-admin/src/main/resources/testngFile/testng.xml index a72d9faa..b55bc77c 100644 --- a/uitest-admin/src/main/resources/testngFile/testng.xml +++ b/uitest-admin/src/main/resources/testngFile/testng.xml @@ -26,6 +26,8 @@ + +