diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1a2116f..6e8f036 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -44,10 +44,20 @@ jobs: ${{ runner.os }}-maven- - name: Build with Maven - run: mvn -B package --file pom.xml + if: ${{ matrix.os == 'ubuntu-latest' }} + run: mvn clean -e install -Dmaven.test.skip=true + + - name: Test Framework + if: ${{ matrix.os == 'ubuntu-latest' }} + run: mvn clean test -Dtest=FrameworkTest - - name: Test with Maven - run: mvn test + - name: Cross Browser Testing + if: ${{ matrix.os == 'ubuntu-latest' }} + run: mvn test -Dsurefire.suiteXmlFiles=xmlSuits/crossBrowser.xml + + - name: Build and Test with Maven + if: ${{ matrix.os != 'ubuntu-latest' }} + run: mvn -B package --file pom.xml - name: Dorny Test Reporter uses: dorny/test-reporter@v1.9.1 diff --git a/pom.xml b/pom.xml index b3d372e..ec8fb08 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,8 @@ 2.24.0 1.9.20.1 + + false @@ -67,13 +69,12 @@ maven-surefire-plugin 3.2.5 + ${tests.skip} -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" - - testng.xml - + xmlSuits/chromeChromium.xml diff --git a/src/test/java/com/file/UploadDownloadFileTest.java b/src/test/java/com/file/UploadDownloadFileTest.java new file mode 100644 index 0000000..5c7bdb0 --- /dev/null +++ b/src/test/java/com/file/UploadDownloadFileTest.java @@ -0,0 +1,94 @@ +package com.file; + +import com.lumatest.utils.DriverUtils; +import com.lumatest.utils.ReportUtils; +import io.github.bonigarcia.wdm.WebDriverManager; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.testng.Assert; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.annotations.*; + +import java.awt.*; +import java.io.File; + +public class UploadDownloadFileTest { + private WebDriver driver; + private final String chrome = "chrome"; + + @Parameters(chrome) + @BeforeMethod() + protected void setupDriver(@Optional(chrome) String browser, ITestResult result) { + Reporter.log("______________________________________________________________________", true); + + if (browser.equalsIgnoreCase("chrome")) { + WebDriverManager.chromedriver().setup(); + } + + Reporter.log("RUN " + result.getMethod().getMethodName(), true); + + this.driver = DriverUtils.createDriver(browser, this.driver); + + if (this.driver == null) { + System.exit(1); + } + + Reporter.log("INFO: " + browser.toUpperCase() + " driver created.", true); + } + + @Test + public void testUploadFile() throws InterruptedException { + final String fileName = "image.jpg"; + File file = new File("src/test/resources/" + fileName); + + driver.get("https://blueimp.github.io/jQuery-File-Upload/"); + + WebElement addFile = driver.findElement(By.xpath(".//input[@type='file']")); + addFile.sendKeys(file.getAbsolutePath()); + + Thread.sleep(5000); + String actualFileToUploadName = driver.findElement(By.xpath("//p[@class = 'name']")).getText(); + + Assert.assertEquals(actualFileToUploadName, fileName); + + driver.findElement(By.xpath("//button//span[text()='Start upload']")).click(); + Thread.sleep(3000); + + String actualFileUploadedName = driver.findElement(By.xpath("//p[@class = 'name']")).getText(); + + Assert.assertEquals(actualFileUploadedName, fileName); + + WebElement deleteButton = driver.findElement(By.xpath("//button//span[text()='Delete']")); + + Assert.assertTrue(deleteButton.isDisplayed()); + } + + @Test + public void fileDownload() throws AWTException, InterruptedException { + + driver.get("https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/"); + Thread.sleep(2000); + WebElement downloadButton = driver.findElement(By.xpath(".//a[text()='chromedriver_win32.zip']")); + downloadButton.click(); + + Thread.sleep(7000); + } + + @Parameters(chrome) + @AfterMethod(alwaysRun = true) + protected void tearDown(@Optional(chrome) String browser, ITestResult result) { + Reporter.log(result.getMethod().getMethodName() + ": " + ReportUtils.getTestStatus(result), + true); + + if (this.driver != null) { + this.driver.quit(); + Reporter.log("INFO: " + browser.toUpperCase() + " driver closed.", true); + + this.driver = null; + } else { + Reporter.log("INFO: Driver is null.", true); + } + } +} diff --git a/src/test/java/com/lumatest/base/BaseTest.java b/src/test/java/com/lumatest/base/BaseTest.java index b77f09d..c164f4e 100644 --- a/src/test/java/com/lumatest/base/BaseTest.java +++ b/src/test/java/com/lumatest/base/BaseTest.java @@ -4,17 +4,19 @@ import com.lumatest.utils.ReportUtils; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.WebDriver; +import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.Reporter; import org.testng.annotations.*; public abstract class BaseTest { private WebDriver driver; + private final ThreadLocal threadLocalDriver = new ThreadLocal<>(); @BeforeSuite protected void setupWebDriverManager() { WebDriverManager.chromedriver().setup(); -// WebDriverManager.firefoxdriver().setup(); + WebDriverManager.firefoxdriver().setup(); // WebDriverManager.edgedriver().setup(); // WebDriverManager.operadriver().setup(); @@ -23,12 +25,16 @@ protected void setupWebDriverManager() { } @Parameters("browser") - @BeforeMethod() - protected void setupDriver(@Optional("chrome") String browser, ITestResult result) { + @BeforeMethod(alwaysRun = true) + protected void setupDriver(@Optional("chrome") String browser, ITestContext context, ITestResult result) { Reporter.log("______________________________________________________________________", true); - Reporter.log("RUN " + result.getMethod().getMethodName(), true); this.driver = DriverUtils.createDriver(browser, this.driver); + this.threadLocalDriver.set(driver); + + Reporter.log("Test Thread ID: " + Thread.currentThread().getId(), true); + Reporter.log("TEST SUIT: " + context.getCurrentXmlTest().getSuite().getName(), true); + Reporter.log("RUN " + result.getMethod().getMethodName(), true); if (getDriver() == null) { Reporter.log("ERROR: Unknown parameter 'browser' - '" + browser + "'.", true); @@ -43,19 +49,23 @@ protected void setupDriver(@Optional("chrome") String browser, ITestResult resul @AfterMethod(alwaysRun = true) protected void tearDown(@Optional("chrome") String browser, ITestResult result) { Reporter.log(result.getMethod().getMethodName() + ": " + ReportUtils.getTestStatus(result), - true); + true); if (getDriver() != null) { getDriver().quit(); Reporter.log("INFO: " + browser.toUpperCase() + " driver closed.", true); - this.driver = null; + Reporter.log("After Test Thread ID: " + Thread.currentThread().getId(), true); + threadLocalDriver.remove(); + + driver = null; + } else { Reporter.log("INFO: Driver is null.", true); } } protected WebDriver getDriver() { - return this.driver; + return threadLocalDriver.get(); } } diff --git a/src/test/java/com/lumatest/data/TestData.java b/src/test/java/com/lumatest/data/TestData.java index b8e1658..2fe39f0 100644 --- a/src/test/java/com/lumatest/data/TestData.java +++ b/src/test/java/com/lumatest/data/TestData.java @@ -28,6 +28,7 @@ public static Object[][] getNavMenuData() { } //ProductPage + public static final String DRIVEN_BACKPACK_PRODUCT_URL = BASE_URL + "/driven-backpack.html"; public static final String DRIVEN_BACKPACK_PRODUCT_NAME = "Driven Backpack"; public static final String DRIVEN_BACKPACK_PRODUCT_PAGE_BREADCRUMBS_MENU = "Home Gear Bags Driven Backpack"; } diff --git a/src/test/java/com/lumatest/test/NavigationTest.java b/src/test/java/com/lumatest/test/NavigationTest.java index 614ba7e..f0392e3 100644 --- a/src/test/java/com/lumatest/test/NavigationTest.java +++ b/src/test/java/com/lumatest/test/NavigationTest.java @@ -11,7 +11,7 @@ public class NavigationTest extends BaseTest { @Test( description = "TC-01 Open Base URL", - groups = {"Smoke", "Regression"}, + groups = {"smoke", "regression"}, testName = "NAVIGATION | Open Base URL" ) @Story("Navigation") @@ -37,7 +37,7 @@ public void testOpenBaseURL() { } @Test( - groups = {"Smoke", "Regression"}, + groups = {"smoke", "regression"}, description = "TC-02 Top Menu Navigation", dataProvider = "navigationData", dataProviderClass = TestData.class, diff --git a/src/test/java/com/lumatest/test/ProductPageTest.java b/src/test/java/com/lumatest/test/ProductPageTest.java index 46546ef..ccb50ca 100644 --- a/src/test/java/com/lumatest/test/ProductPageTest.java +++ b/src/test/java/com/lumatest/test/ProductPageTest.java @@ -5,12 +5,26 @@ import com.lumatest.model.HomePage; import com.lumatest.model.ProductPage; import io.qameta.allure.Allure; +import io.qameta.allure.Severity; +import io.qameta.allure.SeverityLevel; +import io.qameta.allure.Story; +import io.qameta.allure.Description; +import io.qameta.allure.Link; import org.testng.Assert; import org.testng.annotations.Test; public class ProductPageTest extends BaseTest { - @Test + @Test( + testName = "PRODUCT | Product Details", + description = "TC-03 Verify Product Details on Product Page", + groups = {"regression"} + ) + @Story("Product Details") + @Severity(SeverityLevel.NORMAL) + @Description("To verify that the product page displays the correct product name and breadcrumb menu text " + + "for the 'Driven Backpack'.") + @Link(TestData.DRIVEN_BACKPACK_PRODUCT_URL) public void testProduct() { Allure.step("Open Base URL."); getDriver().get(TestData.BASE_URL); diff --git a/src/test/java/com/lumatest/utils/DriverUtils.java b/src/test/java/com/lumatest/utils/DriverUtils.java index 31e84cd..6c482a0 100644 --- a/src/test/java/com/lumatest/utils/DriverUtils.java +++ b/src/test/java/com/lumatest/utils/DriverUtils.java @@ -6,7 +6,9 @@ import org.openqa.selenium.chromium.ChromiumOptions; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; +import org.openqa.selenium.firefox.FirefoxProfile; +import java.util.HashMap; import java.util.Map; public class DriverUtils { @@ -17,7 +19,7 @@ public class DriverUtils { static { chromeOptions = new ChromeOptions(); chromeOptions.addArguments("--incognito"); - chromeOptions.addArguments("--headless"); + //chromeOptions.addArguments("--headless"); chromeOptions.addArguments("--window-size=1920,1080"); chromeOptions.addArguments("--disable-gpu"); chromeOptions.addArguments("--no-sandbox"); @@ -26,6 +28,13 @@ public class DriverUtils { chromeOptions.addArguments("--allow-running-insecure-content"); chromeOptions.addArguments("--ignore-certificate-errors"); + Map prefs = new HashMap(); + prefs.put("download.default_directory", "./src/test/resources"); + prefs.put("download.prompt_for_download", false); + prefs.put("download.directory_upgrade", true); + prefs.put( "safebrowsing.enabled", true); + chromeOptions.setExperimentalOption("prefs", prefs); + firefoxOptions = new FirefoxOptions(); firefoxOptions.addArguments("--incognito"); firefoxOptions.addArguments("--headless"); @@ -33,9 +42,6 @@ public class DriverUtils { firefoxOptions.addArguments("--disable-gpu"); firefoxOptions.addArguments("--no-sandbox"); firefoxOptions.addArguments("--disable-dev-shm-usage"); - firefoxOptions.addArguments("--disable-web-security"); - firefoxOptions.addArguments("--allow-running-insecure-content"); - firefoxOptions.addArguments("--ignore-certificate-errors"); chromiumOptions = chromeOptions; } diff --git a/src/test/resources/image.jpg b/src/test/resources/image.jpg new file mode 100644 index 0000000..3cca2db Binary files /dev/null and b/src/test/resources/image.jpg differ diff --git a/testng.xml b/testng.xml deleted file mode 100644 index 2e8eba5..0000000 --- a/testng.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/xmlSuits/chromeChromium.xml b/xmlSuits/chromeChromium.xml new file mode 100644 index 0000000..eec5f02 --- /dev/null +++ b/xmlSuits/chromeChromium.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xmlSuits/crossBrowser.xml b/xmlSuits/crossBrowser.xml new file mode 100644 index 0000000..5335eb2 --- /dev/null +++ b/xmlSuits/crossBrowser.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xmlSuits/regression.xml b/xmlSuits/regression.xml new file mode 100644 index 0000000..eb8a00b --- /dev/null +++ b/xmlSuits/regression.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xmlSuits/smoke.xml b/xmlSuits/smoke.xml new file mode 100644 index 0000000..db83632 --- /dev/null +++ b/xmlSuits/smoke.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file