From 647ac4720f05342002faeb1f19aabadb3eed76ff Mon Sep 17 00:00:00 2001 From: ArinaJur <66705803+ArinaJur@users.noreply.github.com> Date: Sat, 15 Jun 2024 10:04:26 -0400 Subject: [PATCH 1/2] Upload Download File --- .../java/com/file/UploadDownloadFileTest.java | 94 ++++++++++++++++++ .../java/com/lumatest/utils/DriverUtils.java | 11 +- src/test/resources/image.jpg | Bin 0 -> 10775 bytes 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/file/UploadDownloadFileTest.java create mode 100644 src/test/resources/image.jpg 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/utils/DriverUtils.java b/src/test/java/com/lumatest/utils/DriverUtils.java index 31e84cd..2f478cf 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"); diff --git a/src/test/resources/image.jpg b/src/test/resources/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cca2dbc0669bbd8e99e81424f0c656e610a92b4 GIT binary patch literal 10775 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 Umz?K55C9-6r6^e`{xRVH0sT%dCjbBd literal 0 HcmV?d00001 From a91fe6ea209a24af3e43372b78334d880100a85e Mon Sep 17 00:00:00 2001 From: ArinaJur <66705803+ArinaJur@users.noreply.github.com> Date: Sat, 15 Jun 2024 11:45:47 -0400 Subject: [PATCH 2/2] Upgrade .yml --- .github/workflows/build.yml | 16 ++++++++--- pom.xml | 7 ++--- src/test/java/com/lumatest/base/BaseTest.java | 24 ++++++++++++----- src/test/java/com/lumatest/data/TestData.java | 1 + .../com/lumatest/test/NavigationTest.java | 4 +-- .../com/lumatest/test/ProductPageTest.java | 16 ++++++++++- .../java/com/lumatest/utils/DriverUtils.java | 3 --- testng.xml | 26 ------------------ xmlSuits/chromeChromium.xml | 21 +++++++++++++++ xmlSuits/crossBrowser.xml | 27 +++++++++++++++++++ xmlSuits/regression.xml | 17 ++++++++++++ xmlSuits/smoke.xml | 17 ++++++++++++ 12 files changed, 134 insertions(+), 45 deletions(-) delete mode 100644 testng.xml create mode 100644 xmlSuits/chromeChromium.xml create mode 100644 xmlSuits/crossBrowser.xml create mode 100644 xmlSuits/regression.xml create mode 100644 xmlSuits/smoke.xml 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/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 2f478cf..6c482a0 100644 --- a/src/test/java/com/lumatest/utils/DriverUtils.java +++ b/src/test/java/com/lumatest/utils/DriverUtils.java @@ -42,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/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