Skip to content

Commit 183d898

Browse files
committed
update
1 parent a297760 commit 183d898

23 files changed

+232
-169
lines changed

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ out
1414
*.ipr
1515
*.iws
1616
*.iml
17-
atlassian-ide-plugin.xml
17+
atlassian-ide-plugin.xml
18+
19+
testoutput

build.gradle

+12-7
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,32 @@ repositories {
1010
}
1111

1212
dependencies {
13-
implementation 'org.seleniumhq.selenium:selenium-java:4.1.1'
14-
implementation 'io.github.bonigarcia:webdrivermanager:5.0.3'
13+
implementation 'org.seleniumhq.selenium:selenium-java:4.8.3'
14+
implementation 'io.github.bonigarcia:webdrivermanager:5.3.2'
1515
implementation 'org.aeonbits.owner:owner:1.0.12'
1616
implementation 'com.univocity:univocity-parsers:2.9.1'
1717
implementation 'com.aventstack:extentreports:5.0.9'
1818
implementation 'com.assertthat:selenium-shutterbug:1.5'
19+
implementation 'org.apache.commons:commons-lang3:3.12.0'
20+
implementation 'org.apache.commons:commons-text:1.10.0'
1921
implementation 'org.slf4j:slf4j-api:2.0.6'
2022

21-
testCompileOnly 'org.projectlombok:lombok:1.18.22'
22-
testAnnotationProcessor 'org.projectlombok:lombok:1.18.22'
23+
compileOnly 'org.projectlombok:lombok:1.18.22'
24+
annotationProcessor 'org.projectlombok:lombok:1.18.22'
2325

24-
testImplementation 'org.testng:testng:7.5'
26+
testImplementation 'org.testng:testng:7.7.1'
2527
testImplementation 'org.assertj:assertj-core:3.22.0'
2628
testImplementation 'org.slf4j:slf4j-simple:2.0.6'
2729
}
2830

2931
test {
3032
systemProperties = System.getProperties() as Map<String, ?>
31-
def groups = System.getProperty('groups', 'regression')
33+
def group = System.getProperty('group', 'regression')
34+
def thread = System.getProperty('thread', '100')
3235

3336
useTestNG() {
34-
includeGroups groups
37+
includeGroups group
38+
parallel 'classes'
39+
threadCount thread as int
3540
}
3641
}

src/test/java/io/github/tahanima/config/ConfigurationManager.java renamed to src/main/java/io/github/tahanima/config/ConfigurationManager.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ private ConfigurationManager() {}
1414
* @return an instance of Configuration class from an internal cache
1515
* @see <a href="http://owner.aeonbits.org/docs/singleton">reference</a>
1616
*/
17-
public static Configuration configuration() {
17+
public static Configuration config() {
1818
return ConfigCache.getOrCreate(Configuration.class);
1919
}
2020
}

src/test/java/io/github/tahanima/config/package-info.java renamed to src/main/java/io/github/tahanima/config/package-info.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* <p>There are some global parameters that are subject to change, for example: browser to use for
55
* running the automation. And these global parameters are key components of the project. This
6-
* package intends to provide a reader for the global parameters.
6+
* package intends to provide a reader for the global parameters.<p/>
77
*
88
* @author tahanima
99
*/

src/test/java/io/github/tahanima/data/BaseData.java renamed to src/main/java/io/github/tahanima/data/BaseTestData.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.tahanima.data;
22

33
import com.univocity.parsers.annotations.Parsed;
4+
45
import lombok.Getter;
56
import lombok.ToString;
67

@@ -11,7 +12,7 @@
1112
*/
1213
@Getter
1314
@ToString
14-
public class BaseData {
15+
public class BaseTestData {
1516
@Parsed(field = "Test Case ID", defaultNullRead = "")
1617
private String testCaseId;
1718

src/test/java/io/github/tahanima/data/login/LoginData.java renamed to src/main/java/io/github/tahanima/data/login/LoginTestData.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package io.github.tahanima.data.login;
22

33
import com.univocity.parsers.annotations.Parsed;
4-
import io.github.tahanima.data.BaseData;
4+
5+
import io.github.tahanima.data.BaseTestData;
6+
57
import lombok.Getter;
68
import lombok.ToString;
79

@@ -12,7 +14,7 @@
1214
*/
1315
@Getter
1416
@ToString(callSuper = true)
15-
public class LoginData extends BaseData {
17+
public class LoginTestData extends BaseTestData {
1618
@Parsed(field = "User Name", defaultNullRead = "")
1719
private String userName;
1820

Original file line numberDiff line numberDiff line change
@@ -1,32 +1,27 @@
1-
package io.github.tahanima.pages;
1+
package io.github.tahanima.page;
2+
3+
import static io.github.tahanima.config.ConfigurationManager.config;
24

35
import com.assertthat.selenium_shutterbug.core.Shutterbug;
6+
47
import org.openqa.selenium.WebDriver;
58
import org.openqa.selenium.support.PageFactory;
69

7-
import static io.github.tahanima.config.ConfigurationManager.configuration;
8-
910
/**
1011
* This class defines the basic functionalities of a POM class.
1112
*
1213
* @author tahanima
1314
*/
1415
public class BasePage {
15-
private WebDriver driver;
16+
protected WebDriver driver;
1617

1718
public void initialize(final WebDriver webdriver) {
1819
this.driver = webdriver;
1920

2021
PageFactory.initElements(driver, this);
2122
}
2223

23-
public WebDriver getDriver() {
24-
return driver;
25-
}
26-
2724
public void captureScreenshot(String fileName) {
28-
Shutterbug.shootPage(driver)
29-
.withName(fileName)
30-
.save(configuration().baseReportPath() + configuration().baseScreenshotPath());
25+
Shutterbug.shootPage(driver).withName(fileName).save(config().baseScreenshotPath());
3126
}
3227
}

src/test/java/io/github/tahanima/pages/BasePageFactory.java renamed to src/main/java/io/github/tahanima/page/BasePageFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github.tahanima.pages;
1+
package io.github.tahanima.page;
22

33
import org.openqa.selenium.WebDriver;
44

Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
package io.github.tahanima.pages.login;
1+
package io.github.tahanima.page.login;
2+
3+
import static io.github.tahanima.config.ConfigurationManager.config;
4+
5+
import io.github.tahanima.page.BasePage;
26

3-
import io.github.tahanima.pages.BasePage;
47
import org.openqa.selenium.By;
58
import org.openqa.selenium.WebElement;
69
import org.openqa.selenium.support.FindBy;
710

8-
import static io.github.tahanima.config.ConfigurationManager.configuration;
9-
1011
/**
1112
* This class captures the relevant UI components and functionalities of the login page.
1213
*
@@ -22,34 +23,33 @@ public final class LoginPage extends BasePage {
2223
@FindBy(id = "login-button")
2324
private WebElement btnLogin;
2425

25-
public LoginPage goTo() {
26-
getDriver().get(configuration().baseUrl());
26+
public LoginPage navigateToUrl() {
27+
driver.get(config().baseUrl());
2728

2829
return this;
2930
}
3031

31-
public LoginPage enterUsername(final String username) {
32+
public LoginPage fillUsernameInTextBox(final String username) {
3233
txtUsername.clear();
3334
txtUsername.sendKeys(username);
3435

3536
return this;
3637
}
3738

38-
public LoginPage enterPassword(final String password) {
39+
public LoginPage fillPasswordInTextBox(final String password) {
3940
txtPassword.clear();
4041
txtPassword.sendKeys(password);
4142

4243
return this;
4344
}
4445

4546
public String getErrorMessage() {
46-
return getDriver()
47-
.findElement(By.className("error-message-container"))
47+
return driver.findElement(By.className("error-message-container"))
4848
.findElement(By.tagName("h3"))
4949
.getText();
5050
}
5151

52-
public void clickLogin() {
52+
public void clickOnLoginButton() {
5353
btnLogin.click();
5454
}
5555
}

src/test/java/io/github/tahanima/pages/package-info.java renamed to src/main/java/io/github/tahanima/page/package-info.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
* This package implements the Page Object Model.
33
*
44
* <p>Page Object Model is a design pattern that acts as an interface to a page of the application
5-
* under test. This package contains all the necessary POMs for this project.
5+
* under test. This package contains all the necessary POMs for this project.<p/>
66
*
77
* @author tahanima
88
*/
9-
package io.github.tahanima.pages;
9+
package io.github.tahanima.page;

src/test/java/io/github/tahanima/pages/product/ProductsPage.java renamed to src/main/java/io/github/tahanima/page/product/ProductsPage.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package io.github.tahanima.pages.product;
1+
package io.github.tahanima.page.product;
2+
3+
import io.github.tahanima.page.BasePage;
24

3-
import io.github.tahanima.pages.BasePage;
45
import org.openqa.selenium.WebElement;
56
import org.openqa.selenium.support.FindBy;
67

src/test/java/io/github/tahanima/utils/ExtentReportManager.java renamed to src/main/java/io/github/tahanima/report/ExtentReportManager.java

+16-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
package io.github.tahanima.utils;
1+
package io.github.tahanima.report;
2+
3+
import static io.github.tahanima.config.ConfigurationManager.config;
24

35
import com.aventstack.extentreports.ExtentReports;
46
import com.aventstack.extentreports.reporter.ExtentSparkReporter;
57

8+
import org.apache.commons.lang3.StringUtils;
9+
610
import java.text.SimpleDateFormat;
711
import java.util.Date;
812

9-
import static io.github.tahanima.config.ConfigurationManager.configuration;
10-
1113
/**
1214
* @author tahanima
1315
*/
@@ -17,17 +19,23 @@ private ExtentReportManager() {}
1719
public static ExtentReports createReport() {
1820
String currentDate = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date());
1921
String fileName =
20-
String.format(
21-
"%sTestReport_%s.html", configuration().baseReportPath(), currentDate);
22+
String.format("%sE2ETestReport_%s.html", config().baseReportPath(), currentDate);
2223

2324
ExtentReports extentReport = new ExtentReports();
2425
ExtentSparkReporter spark = new ExtentSparkReporter(fileName);
25-
extentReport.attachReporter(spark);
2626

27+
spark.config().setTimeStampFormat("dd MMM yyyy HH:mm:ss z");
28+
spark.config().setTimelineEnabled(false);
29+
30+
extentReport.attachReporter(spark);
2731
extentReport.setSystemInfo("Platform", System.getProperty("os.name"));
2832
extentReport.setSystemInfo("Version", System.getProperty("os.version"));
29-
extentReport.setSystemInfo("Browser", configuration().browser());
30-
extentReport.setSystemInfo("Base URL", configuration().baseUrl());
33+
extentReport.setSystemInfo("Browser", StringUtils.capitalize(config().browser()));
34+
extentReport.setSystemInfo("Context URL", config().baseUrl());
35+
extentReport.setSystemInfo(
36+
"Test Group",
37+
StringUtils.capitalize(
38+
StringUtils.defaultString(System.getProperty("groups"), "regression")));
3139

3240
return extentReport;
3341
}

src/test/java/io/github/tahanima/driver/BrowserFactory.java renamed to src/main/java/io/github/tahanima/util/BrowserFactory.java

+19-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
package io.github.tahanima.driver;
1+
package io.github.tahanima.util;
2+
3+
import static io.github.tahanima.config.ConfigurationManager.config;
4+
5+
import static java.lang.Boolean.TRUE;
26

37
import io.github.bonigarcia.wdm.WebDriverManager;
8+
49
import org.openqa.selenium.WebDriver;
510
import org.openqa.selenium.chrome.ChromeDriver;
611
import org.openqa.selenium.chrome.ChromeOptions;
@@ -11,9 +16,6 @@
1116

1217
import java.time.Duration;
1318

14-
import static io.github.tahanima.config.ConfigurationManager.configuration;
15-
import static java.lang.Boolean.TRUE;
16-
1719
/**
1820
* This enum handles the initialization of browser drivers.
1921
*
@@ -32,7 +34,7 @@ public WebDriver initializeDriver() {
3234

3335
driver.manage()
3436
.timeouts()
35-
.implicitlyWait(Duration.ofSeconds(configuration().timeout()));
37+
.implicitlyWait(Duration.ofSeconds(config().timeout()));
3638
driver.manage().window().maximize();
3739

3840
return driver;
@@ -42,7 +44,10 @@ private ChromeOptions getOptions() {
4244
ChromeOptions options = new ChromeOptions();
4345

4446
options.setAcceptInsecureCerts(true);
45-
options.setHeadless(configuration().headless());
47+
48+
if (config().headless()) {
49+
options.addArguments("--headless=new");
50+
}
4651

4752
return options;
4853
}
@@ -57,7 +62,7 @@ public WebDriver initializeDriver() {
5762

5863
driver.manage()
5964
.timeouts()
60-
.implicitlyWait(Duration.ofSeconds(configuration().timeout()));
65+
.implicitlyWait(Duration.ofSeconds(config().timeout()));
6166
driver.manage().window().maximize();
6267

6368
return driver;
@@ -67,7 +72,10 @@ private FirefoxOptions getOptions() {
6772
FirefoxOptions options = new FirefoxOptions();
6873

6974
options.setAcceptInsecureCerts(true);
70-
options.setHeadless(configuration().headless());
75+
76+
if (config().headless()) {
77+
options.addArguments("--headless=new");
78+
}
7179

7280
return options;
7381
}
@@ -82,7 +90,7 @@ public WebDriver initializeDriver() {
8290

8391
driver.manage()
8492
.timeouts()
85-
.implicitlyWait(Duration.ofSeconds(configuration().timeout()));
93+
.implicitlyWait(Duration.ofSeconds(config().timeout()));
8694
driver.manage().window().maximize();
8795

8896
return driver;
@@ -93,11 +101,11 @@ private SafariOptions getOptions() {
93101

94102
options.setAcceptInsecureCerts(true);
95103

96-
if (TRUE.equals(configuration().headless())) {
104+
if (TRUE.equals(config().headless())) {
97105
throw new IllegalStateException(
98106
String.format(
99107
"Headless not supported for %s browser",
100-
configuration().browser()));
108+
config().browser()));
101109
}
102110

103111
return options;

src/test/java/io/github/tahanima/driver/DriverManager.java renamed to src/main/java/io/github/tahanima/util/DriverManager.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package io.github.tahanima.driver;
1+
package io.github.tahanima.util;
22

3-
import org.openqa.selenium.WebDriver;
3+
import static io.github.tahanima.config.ConfigurationManager.config;
44

5-
import static io.github.tahanima.config.ConfigurationManager.configuration;
5+
import org.openqa.selenium.WebDriver;
66

77
/**
88
* This class provides a singleton instance of WebDriver.
@@ -20,7 +20,7 @@ private DriverManager() {}
2020
public static WebDriver createDriver() {
2121
if (driver == null) {
2222
driver =
23-
BrowserFactory.valueOf(configuration().browser().toUpperCase())
23+
BrowserFactory.valueOf(config().browser().toUpperCase())
2424
.initializeDriver();
2525
}
2626

0 commit comments

Comments
 (0)