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