diff --git a/Test-Output/Logs/Test.log b/Test-Output/Logs/Test.log index 81ac7cf..9b6ad44 100644 --- a/Test-Output/Logs/Test.log +++ b/Test-Output/Logs/Test.log @@ -1,6 +1,94 @@ -2024-12-04 22:04:30 DEBUG TestNG - suiteXmlPath: "C:\Users\lenovo\IdeaProjects\Ellithium\TestNGRunner.xml" -2024-12-04 22:04:31 INFO logsUtils - Getting Timestamp: 2024-12-04 -2024-12-04 22:04:31 INFO logsUtils - Reading value for key: LastRunDate from JSON file: Test-Output\UpdateChecker\checker -2024-12-04 22:04:31 INFO logsUtils - Successfully read value for key: LastRunDate from JSON file: Test-Output\UpdateChecker\checker -2024-12-04 22:04:31 INFO logsUtils - Setting value for key: LastRunDate in JSON file: Test-Output\UpdateChecker\checker -2024-12-04 22:04:31 INFO logsUtils - Successfully updated JSON file: Test-Output\UpdateChecker\checker +2024-12-11 22:58:48 DEBUG TestNG - suiteXmlPath: "C:\Users\lenovo\IdeaProjects\Ellithium\TestNGRunner.xml" +2024-12-11 22:58:49 INFO Logger - Getting Timestamp: 2024-12-11 +2024-12-11 22:58:49 INFO Logger - Reading value for key: LastRunDate from JSON file: Test-Output\UpdateChecker\checker +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid e0aa492b-0fe3-42ae-bc21-d1f4011c53dd not found +2024-12-11 22:58:49 INFO Logger - Successfully read value for key: LastRunDate from JSON file: Test-Output\UpdateChecker\checker +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid bd753d9c-b012-4919-af6f-45ea5e89bf1f not found +2024-12-11 22:58:49 INFO Logger - Successfully loaded properties file: src\main\resources\properties\config +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid f5108031-3522-4425-aec3-1012c7873255 not found +2024-12-11 22:58:49 INFO Logger - Initialize default Timeout for Element  +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid d6c03f7c-128a-4b57-9295-ae37b7896a6a not found +2024-12-11 22:58:49 INFO Logger - Successfully loaded properties file: src\main\resources\properties\config +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid 64d411a4-746c-4437-91d3-f490dec5d5a7 not found +2024-12-11 22:58:49 INFO Logger - Initialize default Polling Time for Element  +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid 8f8affe7-0a62-4858-8eae-6d14c238d0b6 not found +2024-12-11 22:58:49 INFO Logger - Successfully loaded properties file: src\main\resources\properties\config +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid af0dfe93-706b-4663-ba7e-647d86440594 not found +2024-12-11 22:58:49 INFO Logger - Initialize default Implicit Wait for the Driver  +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid 747c97a6-f635-4219-9df2-a5227288bdb8 not found +2024-12-11 22:58:49 INFO Logger - Successfully loaded properties file: src\main\resources\properties\config +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not start step: no test case running +2024-12-11 22:58:49 ERROR AllureLifecycle - Could not stop step: step with uuid 48fbd617-398d-4465-89d5-4f66fb565531 not found +2024-12-11 22:58:49 INFO Logger - --------------------------------------------- +2024-12-11 22:58:49 INFO Logger - ------- Ellithium Engine Setup ------------- +2024-12-11 22:58:49 INFO Logger - --------------------------------------------- +2024-12-11 22:58:49 INFO Logger - Successfully loaded properties file: src\main\resources\properties\allure +2024-12-11 22:58:49 TRACE Graph - [Graph] ADDING NODE BaseRemote.Setup()[pri:0, instance:null] -152046584 +2024-12-11 22:58:49 TRACE Graph - [Graph] ================ SORTING +2024-12-11 22:58:49 TRACE Graph - [Graph] =============== DONE SORTING +2024-12-11 22:58:49 TRACE Graph - [Graph] ====== SORTED NODES +2024-12-11 22:58:49 TRACE Graph - [Graph] ====== END SORTED NODES +2024-12-11 22:58:49 TRACE Graph - [Graph] ADDING NODE BaseRemote.tareDown()[pri:0, instance:null] 391358389 +2024-12-11 22:58:49 TRACE Graph - [Graph] ================ SORTING +2024-12-11 22:58:49 TRACE Graph - [Graph] =============== DONE SORTING +2024-12-11 22:58:49 TRACE Graph - [Graph] ====== SORTED NODES +2024-12-11 22:58:49 TRACE Graph - [Graph] ====== END SORTED NODES +2024-12-11 22:58:49 TRACE Graph - [Graph] ADDING NODE loginTestsRemote.validLogin()[pri:2, instance:Tests.loginTestsRemote@46d9aec8] 832491811 +2024-12-11 22:58:49 TRACE Graph - [Graph] ADDING NODE loginTestsRemote.invalidLogin(java.lang.String,java.lang.String,java.lang.String)[pri:1, instance:Tests.loginTestsRemote@46d9aec8] -686925744 +2024-12-11 22:58:49 TRACE Graph - [Graph] ================ SORTING +2024-12-11 22:58:49 TRACE Graph - [Graph] =============== DONE SORTING +2024-12-11 22:58:49 TRACE Graph - [Graph] ====== SORTED NODES +2024-12-11 22:58:49 TRACE Graph - [Graph] ====== END SORTED NODES +2024-12-11 22:58:49 INFO Logger - [SUITE STARTED]: FRAMEWORK TEST [SUITE STARTED] +2024-12-11 22:58:49 INFO Logger - [ALL TESTS STARTED]: WEB UI TEST CHROME [ALL TESTS STARTED] +2024-12-11 22:58:49 INFO Logger - Chrome Options Configured +2024-12-11 22:58:52 INFO Logger - Driver Created +2024-12-11 22:58:52 ERROR AllureLifecycle - Could not update test case: no test case running +2024-12-11 22:58:52 INFO Logger - [START] TESTCASE invalidLogin [STARTED] +2024-12-11 22:58:52 INFO Logger - Navigating to URL: https://the-internet.herokuapp.com/ +2024-12-11 22:58:55 INFO Logger - Clicked on element:  +2024-12-11 22:58:55 INFO Logger - Sent Data: "tomsmith" into Username. +2024-12-11 22:58:56 INFO Logger - Sent Data: "hamada" into Password. +2024-12-11 22:58:57 INFO Logger - Clicked on element:  +2024-12-11 22:58:57 INFO Logger - [PASSED] TESTCASE invalidLogin [PASSED] +2024-12-11 22:58:57 INFO Logger - [START] TESTCASE invalidLogin [STARTED] +2024-12-11 22:58:57 INFO Logger - Navigating to URL: https://the-internet.herokuapp.com/ +2024-12-11 22:58:57 INFO Logger - Clicked on element:  +2024-12-11 22:58:58 INFO Logger - Sent Data: "hamada" into Username. +2024-12-11 22:58:58 INFO Logger - Sent Data: "SuperSecretPassword!" into Password. +2024-12-11 22:58:58 INFO Logger - Clicked on element:  +2024-12-11 22:58:58 INFO Logger - [PASSED] TESTCASE invalidLogin [PASSED] +2024-12-11 22:58:58 INFO Logger - [START] TESTCASE validLogin [STARTED] +2024-12-11 22:58:58 INFO Logger - Navigating to URL: https://the-internet.herokuapp.com/ +2024-12-11 22:58:59 INFO Logger - Clicked on element:  +2024-12-11 22:58:59 INFO Logger - Sent Data: "SuperSecretPassword!" into Password. +2024-12-11 22:58:59 INFO Logger - Sent Data: "tomsmith" into Username. +2024-12-11 22:59:00 INFO Logger - Clicked on element:  +2024-12-11 22:59:00 INFO Logger - [PASSED] TESTCASE validLogin [PASSED] +2024-12-11 22:59:00 INFO Logger - WebDriver quit +2024-12-11 22:59:00 ERROR AllureLifecycle - Could not update test case: no test case running +2024-12-11 22:59:00 INFO Logger - [ALL TESTS COMPLETED]: WEB UI TEST CHROME [ALL TESTS COMPLETED] +2024-12-11 22:59:00 INFO Logger - [SUITE FINISHED]: FRAMEWORK TEST [SUITE FINISHED] +2024-12-11 22:59:01 INFO Logger - Total Execution Time is: 0 Min 11 Sec 602 Mills +2024-12-11 22:59:01 INFO Logger - ------------------------------------------ +2024-12-11 22:59:01 INFO Logger - ------- Ellithium Engine TearDown ------- +2024-12-11 22:59:01 INFO Logger - ------------------------------------------ +2024-12-11 22:59:01 INFO Logger - Successfully loaded properties file: src\main\resources\properties\allure +2024-12-11 22:59:01 INFO Logger - Successfully loaded properties file: src\main\resources\properties\allure +2024-12-11 22:59:01 INFO Logger - Successfully loaded properties file: src\main\resources\properties\allure +2024-12-11 22:59:01 INFO Logger - Allure folder exists at: C:\Users\lenovo\.m2\repository\allure-Ellithium +2024-12-11 22:59:01 INFO Logger - Found Allure binary directory: C:\Users\lenovo\.m2\repository\allure-Ellithium\-2.30.0\bin +2024-12-11 22:59:01 INFO Logger - Attempting to execute command: C:\Users\lenovo\.m2\repository\allure-Ellithium\-2.30.0\bin\allure generate --single-file --name "Test Report" -o .\LastReport\ .\Test-Output/Reports/Allure/allure-results\ +2024-12-11 22:59:03 INFO Logger - Command executed successfully. Exit code: 0 +2024-12-11 22:59:03 INFO Logger - Getting Timestamp: 2024-12-11-10-59-03PM +2024-12-11 22:59:03 INFO Logger - Successfully loaded properties file: src\main\resources\properties\allure +2024-12-11 22:59:03 INFO Logger - Attempting to execute command: start Test-Output\Reports\Allure\allure-report\Ellithium-Test-Report-2024-12-11-10-59-03PM.html +2024-12-11 22:59:03 INFO Logger - Command executed successfully. Exit code: 0 diff --git a/Test-Output/UpdateChecker/checker.json b/Test-Output/UpdateChecker/checker.json index 02b4ada..03a5628 100644 --- a/Test-Output/UpdateChecker/checker.json +++ b/Test-Output/UpdateChecker/checker.json @@ -1,3 +1,3 @@ { - "LastRunDate": "2024-12-04" + "LastRunDate": "2024-12-11" } \ No newline at end of file diff --git a/TestNGRunner.xml b/TestNGRunner.xml index d0f8a54..e85e84a 100644 --- a/TestNGRunner.xml +++ b/TestNGRunner.xml @@ -6,21 +6,8 @@ - - - - - - - - - - - - - - + diff --git a/src/main/java/Ellithium/core/driver/BrowserSetUp.java b/src/main/java/Ellithium/core/driver/BrowserSetUp.java index 489484b..21064f8 100644 --- a/src/main/java/Ellithium/core/driver/BrowserSetUp.java +++ b/src/main/java/Ellithium/core/driver/BrowserSetUp.java @@ -38,7 +38,7 @@ public static WebDriver setupLocalDriver(DriverType driverType, HeadlessMode hea return null; } } - public static WebDriver setupRemoteDriver(DriverType driverType, URL remoteAddress, Capabilities capabilities, HeadlessMode headlessMode, PageLoadStrategyMode pageLoadStrategy, PrivateMode privateMode, SandboxMode sandboxMode, WebSecurityMode webSecurityMode) { + public static RemoteWebDriver setupRemoteDriver(DriverType driverType, URL remoteAddress, Capabilities capabilities, HeadlessMode headlessMode, PageLoadStrategyMode pageLoadStrategy, PrivateMode privateMode, SandboxMode sandboxMode, WebSecurityMode webSecurityMode) { RemoteWebDriver driver; switch (driverType) { case REMOTE_Chrome->{ diff --git a/src/main/java/Ellithium/core/driver/DriverFactory.java b/src/main/java/Ellithium/core/driver/DriverFactory.java index 516a144..2da8111 100644 --- a/src/main/java/Ellithium/core/driver/DriverFactory.java +++ b/src/main/java/Ellithium/core/driver/DriverFactory.java @@ -25,6 +25,7 @@ import static io.appium.java_client.proxy.Helpers.createProxy; public class DriverFactory { + private static ThreadLocal RemoteWebDriverThreadLocal= new ThreadLocal<>();; private static ThreadLocal WebDriverThread = new ThreadLocal<>(); private static ThreadLocal AndroidDriverThread = new ThreadLocal<>(); private static ThreadLocal IOSDriverThread = new ThreadLocal<>(); @@ -94,7 +95,7 @@ public static T getNewRemoteWebDriver(DriverType dri ConfigContext.setCapabilities(capabilities); ConfigContext.setRemoteAddress(remoteAddress); webSetUp(); - return (T) WebDriverThread.get(); + return (T)RemoteWebDriverThreadLocal.get(); } @SuppressWarnings("unchecked") public static T getNewRemoteWebDriver(DriverType driverType, URL remoteAddress, Capabilities capabilities, HeadlessMode headlessMode, PrivateMode privateMode, PageLoadStrategyMode pageLoadStrategyMode, WebSecurityMode webSecurityMode) { @@ -178,46 +179,55 @@ private static void webSetUp() { var PrivateMode=ConfigContext.getPrivateMode(); var SandboxMode=ConfigContext.getSandboxMode(); var WebSecurityMode=ConfigContext.getWebSecurityMode(); - WebDriver localDriver ; switch (driverType){ case REMOTE_Edge,REMOTE_Safari,REMOTE_FireFox,REMOTE_Chrome ->{ var capabilities=ConfigContext.getCapabilities(); var remoteAddress=ConfigContext.getRemoteAddress(); - localDriver=BrowserSetUp.setupRemoteDriver(driverType,remoteAddress,capabilities, headlessMode,PageLoadStrategy,PrivateMode,SandboxMode,WebSecurityMode); + var localDriver=BrowserSetUp.setupRemoteDriver(driverType,remoteAddress,capabilities, headlessMode,PageLoadStrategy,PrivateMode,SandboxMode,WebSecurityMode); + localDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(WaitManager.getDefaultImplicitWait())); + RemoteWebDriverThreadLocal.set(getDecoratedWebDriver(localDriver)); + if(RemoteWebDriverThreadLocal!=null){ + Reporter.log("Driver Created", LogLevel.INFO_GREEN); + } + else { + Reporter.log("Driver Creation Failed",LogLevel.INFO_RED); + } } default-> { - localDriver= BrowserSetUp.setupLocalDriver(driverType, headlessMode,PageLoadStrategy,PrivateMode,SandboxMode,WebSecurityMode); - } - } - String loggerExtensiveTraceModeFlag=PropertyHelper.getDataFromProperties(ConfigContext.getConfigFilePath(), "loggerExtensiveTraceMode"); - if (loggerExtensiveTraceModeFlag.equalsIgnoreCase("true")){ - DevTools devTools; - switch (driverType){ - case Edge, REMOTE_Edge->{ - devTools=((EdgeDriver)localDriver).getDevTools(); - logDevTools(devTools); + var localDriver= BrowserSetUp.setupLocalDriver(driverType, headlessMode,PageLoadStrategy,PrivateMode,SandboxMode,WebSecurityMode); + String loggerExtensiveTraceModeFlag=PropertyHelper.getDataFromProperties(ConfigContext.getConfigFilePath(), "loggerExtensiveTraceMode"); + if (loggerExtensiveTraceModeFlag.equalsIgnoreCase("true")){ + DevTools devTools; + switch (driverType){ + case Edge->{ + devTools=((EdgeDriver)localDriver).getDevTools(); + logDevTools(devTools); + } + case Chrome->{ + devTools=((ChromeDriver)localDriver).getDevTools(); + logDevTools(devTools); + } + } } - case Chrome, REMOTE_Chrome->{ - devTools=((ChromeDriver)localDriver).getDevTools(); - logDevTools(devTools); + localDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(WaitManager.getDefaultImplicitWait())); + WebDriverThread.set(getDecoratedWebDriver(localDriver)); + if(WebDriverThread!=null){ + Reporter.log("Driver Created", LogLevel.INFO_GREEN); + } + else { + Reporter.log("Driver Creation Failed",LogLevel.INFO_RED); } } } - assert localDriver != null; - localDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(WaitManager.getDefaultImplicitWait())); - WebDriverThread.set(getDecoratedWebDriver(localDriver)); - if(WebDriverThread!=null){ - Reporter.log("Driver Created", LogLevel.INFO_GREEN); - } - else { - Reporter.log("Driver Creation Failed",LogLevel.INFO_RED); - } } @SuppressWarnings("unchecked") private static WebDriver getDecoratedWebDriver(WebDriver driver){ return new EventFiringDecorator<>(org.openqa.selenium.WebDriver.class, new seleniumListener()).decorate(driver); } - + @SuppressWarnings("unchecked") + private static RemoteWebDriver getDecoratedWebDriver(RemoteWebDriver driver){ + return new EventFiringDecorator<>(org.openqa.selenium.remote.RemoteWebDriver.class, new seleniumListener()).decorate(driver); + } private static AndroidDriver getDecoratedAndroidDriver(URL remoteAddress, Capabilities capabilities){ return createProxy( AndroidDriver.class, diff --git a/src/main/java/Ellithium/core/execution/listener/CustomTestNGListener.java b/src/main/java/Ellithium/core/execution/listener/CustomTestNGListener.java index ecac1d3..a38afb2 100644 --- a/src/main/java/Ellithium/core/execution/listener/CustomTestNGListener.java +++ b/src/main/java/Ellithium/core/execution/listener/CustomTestNGListener.java @@ -93,8 +93,8 @@ public void afterInvocation(IInvokedMethod method, ITestResult testResult) { Reporter.attachScreenshotToReport(screenShot, screenShot.getName(), driverName,testResult.getName()); } - Reporter.addParams(GeneralHandler.getParameters()); } + Reporter.addParams(GeneralHandler.getParameters()); } @Override public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { diff --git a/src/test/java/Base/BaseRemote.java b/src/test/java/Base/BaseRemote.java new file mode 100644 index 0000000..b8193b4 --- /dev/null +++ b/src/test/java/Base/BaseRemote.java @@ -0,0 +1,29 @@ +package Base; + +import Ellithium.core.driver.DriverFactory; +import Ellithium.core.driver.DriverType; +import Pages.HomPage; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.remote.DesiredCapabilities; +import org.openqa.selenium.remote.RemoteWebDriver; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; + +import java.net.MalformedURLException; +import java.net.URL; + +public class BaseRemote { + protected WebDriver driver; + protected HomPage home; + @BeforeClass + public void Setup() throws MalformedURLException { + DesiredCapabilities capabilities=new DesiredCapabilities(); + driver= DriverFactory.getNewRemoteWebDriver(DriverType.REMOTE_Chrome ,new URL("http://localhost:4444/wd/hub"),capabilities); + home=new HomPage(driver); + } + @AfterClass + public void tareDown(){ + driver.quit();; + } +} diff --git a/src/test/java/Base/BaseTests.java b/src/test/java/Base/BaseTests.java index a40aba9..1762a47 100644 --- a/src/test/java/Base/BaseTests.java +++ b/src/test/java/Base/BaseTests.java @@ -6,20 +6,12 @@ import org.openqa.selenium.WebDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; public class BaseTests extends NonBDDSetup { protected WebDriver driver; protected HomPage home; - @Parameters({"BrowserName"}) @BeforeClass - public void Setup(String BrowserName){ - DriverType type; - switch(BrowserName.toLowerCase()){ - case "edge"->type=DriverType.Edge; - case "firefox"->type=DriverType.FireFox; - default -> {type=DriverType.Chrome;} - } - driver= DriverFactory.getNewLocalWebDriver(type, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal,WebSecurityMode.SecureMode,SandboxMode.Sandbox); + public void Setup(){ + driver= DriverFactory.getNewLocalWebDriver(DriverType.Chrome, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal,WebSecurityMode.SecureMode,SandboxMode.Sandbox); home=new HomPage(driver); } @AfterClass diff --git a/src/test/java/Pages/SecureAreaPage.java b/src/test/java/Pages/SecureAreaPage.java index dc76e81..91393ed 100644 --- a/src/test/java/Pages/SecureAreaPage.java +++ b/src/test/java/Pages/SecureAreaPage.java @@ -8,7 +8,6 @@ public class SecureAreaPage { DriverActions driverActions; public SecureAreaPage(WebDriver Driver){ driver=Driver; - driverActions=new DriverActions(driver); } public String getLoginMassega(){ diff --git a/src/test/java/Tests/loginTestsRemote.java b/src/test/java/Tests/loginTestsRemote.java new file mode 100644 index 0000000..4cb8ffe --- /dev/null +++ b/src/test/java/Tests/loginTestsRemote.java @@ -0,0 +1,35 @@ +package Tests; +import Base.BaseRemote; +import Pages.LoginPage; +import org.testng.Assert; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +public class loginTestsRemote extends BaseRemote { + @DataProvider(name= "invalidLoginData") + Object[][] getInvalidTestData(){ + return new Object[][]{ + {"tomsmith","hamada","Your password is invalid"}, + {"hamada","SuperSecretPassword!","Your username is invalid"} + }; + } + LoginPage login; + @Test(priority = 1, dataProvider = "invalidLoginData") + public void invalidLogin(String username, String password, String expectedMessage){ + login =home.clickFormAuthentication(); + login.setUserName(username); + login.setPassword(password); + var secureAreaPage=login.clickLoginBtn(); + String actualMessage=secureAreaPage.getLoginMassega(); + Assert.assertTrue(actualMessage.contains(expectedMessage)); + } + @Test(priority = 2) + public void validLogin() { + login = home.clickFormAuthentication(); + login.setPassword("SuperSecretPassword!"); + login.setUserName("tomsmith"); + var secureAreaPage=login.clickLoginBtn(); + String actualMessage=secureAreaPage.getLoginMassega(); + String expectedMessage="You logged into a secure area!"; + Assert.assertTrue(actualMessage.contains(expectedMessage)); + } +}