Skip to content

Commit a8d0564

Browse files
author
Kamil Nowocin
committed
feat: build tweaks
1 parent 955bc42 commit a8d0564

File tree

10 files changed

+105
-110
lines changed

10 files changed

+105
-110
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
screenshots/
22
allure-report/
33
target/
4-
.gradle
4+
.gradle/
55
build/
66
**/build/
77
.idea/

src/test/java/com/buildListeners/TestNGListener_WEB.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.buildListeners;
22

3+
import com.buildSettings.DriverFactory;
34
import com.buildSettings.ExcelEnvironment;
45
import com.buildSettings.TestEnvironment;
56
import io.cucumber.java.Scenario;
@@ -47,6 +48,7 @@ public synchronized void onTestStart(ITestResult iTestResult) {
4748
logger.info(StringUtils.repeat("=", 48) + " TEST STARTED "
4849
+ StringUtils.repeat("=", 48));
4950
logger.info(ANSI_BLUE + "TEST NAME: " + getTestName(iTestResult) + ANSI_RESET);
51+
logger.info(String.format("Chosen executor: \"%S\"", DriverFactory.getHost()));
5052
}
5153

5254
@Override
@@ -77,15 +79,15 @@ public static void onScenarioStart(Scenario scenario) {
7779
+ " BEFORE SCENARIO " + StringUtils.repeat("=", 47));
7880
logger.info(StringUtils.repeat("#", 110));
7981
logger.info(ANSI_BLUE + "SCENARIO NAME: " + scenario.getName().toUpperCase() + ANSI_RESET);
80-
System.out.println();
82+
logger.info(String.format("Chosen executor: \"%S\"", DriverFactory.getHost()));
8183
}
8284

8385
public static void onScenarioFinish(Scenario scenario) {
84-
System.out.println();
8586
String status = (scenario.isFailed() ? ANSI_RED + "FAILED STATUS " + ANSI_RESET : ANSI_GREEN + "SUCCESS STATUS " + ANSI_RESET);
8687
logger.info(StringUtils.repeat("#", 110));
8788
logger.info(StringUtils.repeat("=", 36)
8889
+ " SCENARIO FINISHED WITH " + status + StringUtils.repeat("=", 35));
8990
logger.info(StringUtils.repeat("#", 110));
91+
System.out.println();
9092
}
9193
}

src/test/java/com/buildSettings/DriverFactory.java

Lines changed: 67 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,20 @@
2828

2929
public class DriverFactory extends TestEnvironment {
3030

31-
private WebDriver driver;
32-
private static final ThreadLocal<WebDriver> drivers = new ThreadLocal<>();
31+
protected WebDriver driver;
3332
private static final List<WebDriver> storedDrivers = new ArrayList<>();
34-
35-
static {
36-
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
37-
storedDrivers.forEach(WebDriver::close);
38-
storedDrivers.forEach(WebDriver::quit);
39-
}));
40-
}
33+
private static final ThreadLocal<WebDriver> drivers = new ThreadLocal<>();
4134

4235
public static WebDriver getDriver() {
4336
return drivers.get();
4437
}
4538

46-
public static void addDriver(WebDriver driver) {
39+
private void addDriver(WebDriver driver) {
4740
storedDrivers.add(driver);
4841
drivers.set(driver);
4942
}
5043

51-
public static void removeDriver() {
52-
getDriver().close();
53-
storedDrivers.remove(drivers.get());
54-
drivers.remove();
55-
}
56-
57-
private String getBrowserName() {
44+
private String getRemoteBrowserName() {
5845
String getBrowser = System.getProperty("browser");
5946
if (getBrowser == null) {
6047
getBrowser = System.getenv("browser");
@@ -65,7 +52,7 @@ private String getBrowserName() {
6552
return getBrowser;
6653
}
6754

68-
private String getHost() {
55+
public static String getHost() {
6956
String getHost = System.getProperty("selenium.host");
7057
if (getHost == null) {
7158
getHost = System.getenv("selenium.host");
@@ -76,7 +63,7 @@ private String getHost() {
7663
return getHost;
7764
}
7865

79-
protected RemoteWebDriver remoteWebDriver(DesiredCapabilities desiredCapabilities, String remoteWebDriverURL) {
66+
private RemoteWebDriver remoteWebDriver(DesiredCapabilities desiredCapabilities, String remoteWebDriverURL) {
8067
RemoteWebDriver remoteDriver = null;
8168
try {
8269
remoteDriver = new RemoteWebDriver(new URL(remoteWebDriverURL), desiredCapabilities);
@@ -89,78 +76,72 @@ protected RemoteWebDriver remoteWebDriver(DesiredCapabilities desiredCapabilitie
8976
protected void startBrowser() {
9077
printWebDriverManagerVersions(false);
9178
DesiredCapabilities desiredCapabilities;
92-
if (DriverFactory.getDriver() == null) {
93-
switch (getHost().toLowerCase()) {
94-
case "chrome":
95-
WebDriverManager.chromedriver().setup();
96-
ChromeOptions chromeOptions = new ChromeOptions();
97-
DriverFactory.addDriver(driver = new ChromeDriver(chromeOptions));
98-
break;
99-
case "firefox":
100-
WebDriverManager.firefoxdriver().setup();
101-
FirefoxOptions firefoxOptions = new FirefoxOptions();
102-
firefoxOptions.addArguments("");
103-
DriverFactory.addDriver(driver = new FirefoxDriver(firefoxOptions));
104-
break;
105-
case "opera":
106-
WebDriverManager.operadriver().arch64().browserVersion("2.45").setup();
107-
OperaOptions operaOptions = new OperaOptions();
108-
operaOptions.addArguments("");
109-
DriverFactory.addDriver(driver = new OperaDriver(operaOptions));
110-
break;
111-
case "edge":
112-
WebDriverManager.edgedriver().setup();
113-
DriverFactory.addDriver(driver = new EdgeDriver());
114-
break;
115-
case "ie":
116-
WebDriverManager.iedriver().setup();
117-
DriverFactory.addDriver(driver = new InternetExplorerDriver());
118-
break;
119-
case "safari":
120-
DriverFactory.addDriver(driver = new SafariDriver());
121-
break;
122-
case "browserstack":
123-
desiredCapabilities = new DesiredCapabilities();
124-
desiredCapabilities.setCapability("os", "Windows");
125-
desiredCapabilities.setCapability("os_version", "10");
126-
desiredCapabilities.setCapability("resolution", "1920x1080");
127-
desiredCapabilities.setCapability("build", "Automationpractice.com");
128-
desiredCapabilities.setCapability("project", "Automationpractice.com");
129-
desiredCapabilities.setCapability("browserstack.timezone", "Europe/Warsaw");
130-
if (getBrowserName().toLowerCase().equals("ie")) {
131-
desiredCapabilities.setCapability("browser", "IE");
132-
desiredCapabilities.setCapability("browser_version", "11.0");
133-
}
134-
if (getBrowserName().toLowerCase().equals("firefox")) {
135-
desiredCapabilities.setCapability("browser", "Firefox");
136-
desiredCapabilities.setCapability("browser_version", "70.0");
137-
} else {
138-
desiredCapabilities.setCapability("browser", "Chrome");
139-
desiredCapabilities.setCapability("browser_version", "78.0");
140-
}
141-
//https://automate.browserstack.com/dashboard/v2 <- GET USER_NAME AND ACCESS_TOKEN FROM
142-
//https://www.browserstack.com/automate/capabilities <- GENERATE YOUR OWN CAPABILITIES
143-
//https://USER_NAME:[email protected]/wd/hub <- HOST_URL (.travis.yml for more information)
144-
DriverFactory.addDriver(driver = remoteWebDriver(desiredCapabilities, HOST_URL));
145-
break;
146-
default:
147-
throw new IllegalStateException("This browser isn't supported yet! Sorry...");
148-
}
149-
logger.info(String.format("Chosen executor: \"%S\"", getHost()));
150-
getDriver().manage().timeouts().implicitlyWait(TIMEOUT, TimeUnit.SECONDS);
151-
getDriver().manage().timeouts().pageLoadTimeout(TIMEOUT, TimeUnit.SECONDS);
152-
getDriver().manage().timeouts().setScriptTimeout(TIMEOUT, TimeUnit.SECONDS);
153-
getDriver().manage().deleteAllCookies();
154-
getDriver().manage().window().maximize();
155-
} else {
156-
throw new IllegalStateException("Driver has already been initialized. Quit it before using this method!");
79+
switch (getHost().toLowerCase()) {
80+
case "chrome":
81+
WebDriverManager.chromedriver().setup();
82+
ChromeOptions chromeOptions = new ChromeOptions();
83+
addDriver(driver = new ChromeDriver(chromeOptions));
84+
break;
85+
case "firefox":
86+
WebDriverManager.firefoxdriver().setup();
87+
FirefoxOptions firefoxOptions = new FirefoxOptions();
88+
firefoxOptions.addArguments("");
89+
addDriver(driver = new FirefoxDriver(firefoxOptions));
90+
break;
91+
case "opera":
92+
WebDriverManager.operadriver().arch64().browserVersion("2.45").setup();
93+
OperaOptions operaOptions = new OperaOptions();
94+
operaOptions.addArguments("");
95+
addDriver(driver = new OperaDriver(operaOptions));
96+
break;
97+
case "edge":
98+
WebDriverManager.edgedriver().setup();
99+
addDriver(driver = new EdgeDriver());
100+
break;
101+
case "ie":
102+
WebDriverManager.iedriver().setup();
103+
addDriver(driver = new InternetExplorerDriver());
104+
break;
105+
case "safari":
106+
addDriver(driver = new SafariDriver());
107+
break;
108+
case "browserstack":
109+
desiredCapabilities = new DesiredCapabilities();
110+
desiredCapabilities.setCapability("os", "Windows");
111+
desiredCapabilities.setCapability("os_version", "10");
112+
desiredCapabilities.setCapability("resolution", "1920x1080");
113+
desiredCapabilities.setCapability("build", "Automationpractice.com");
114+
desiredCapabilities.setCapability("project", "Automationpractice.com");
115+
desiredCapabilities.setCapability("browserstack.timezone", "Europe/Warsaw");
116+
if (getRemoteBrowserName().toLowerCase().equals("ie")) {
117+
desiredCapabilities.setCapability("browser", "IE");
118+
desiredCapabilities.setCapability("browser_version", "11.0");
119+
}
120+
if (getRemoteBrowserName().toLowerCase().equals("firefox")) {
121+
desiredCapabilities.setCapability("browser", "Firefox");
122+
desiredCapabilities.setCapability("browser_version", "70.0");
123+
} else {
124+
desiredCapabilities.setCapability("browser", "Chrome");
125+
desiredCapabilities.setCapability("browser_version", "78.0");
126+
}
127+
//https://automate.browserstack.com/dashboard/v2 <- GET USER_NAME AND ACCESS_TOKEN FROM
128+
//https://www.browserstack.com/automate/capabilities <- GENERATE YOUR OWN CAPABILITIES
129+
//https://USER_NAME:[email protected]/wd/hub <- HOST_URL (.travis.yml for more information)
130+
addDriver(driver = remoteWebDriver(desiredCapabilities, HOST_URL));
131+
break;
132+
default:
133+
throw new IllegalStateException("This browser isn't supported yet! Sorry...");
157134
}
135+
getDriver().manage().timeouts().implicitlyWait(TIMEOUT, TimeUnit.SECONDS);
136+
getDriver().manage().timeouts().pageLoadTimeout(TIMEOUT, TimeUnit.SECONDS);
137+
getDriver().manage().timeouts().setScriptTimeout(TIMEOUT, TimeUnit.SECONDS);
138+
getDriver().manage().deleteAllCookies();
139+
getDriver().manage().window().maximize();
158140
}
159141

160142
protected void destroyDriver() {
161-
if (driver != null) {
143+
for (WebDriver driver : storedDrivers) {
162144
driver.quit();
163-
driver = null;
164145
}
165146
}
166147
}

src/test/java/com/steps/Hooks.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.testng.ITestListener;
1313
import org.testng.ITestResult;
1414
import org.testng.annotations.AfterMethod;
15+
import org.testng.annotations.AfterSuite;
1516
import org.testng.annotations.BeforeMethod;
1617
import org.testng.annotations.BeforeTest;
1718

@@ -44,7 +45,12 @@ public void beforeTest(ITestResult iTestResult) throws IOException {
4445
@AfterMethod(description = "Teardown Test Class")
4546
public void afterTest() {
4647
MDC.remove("testid");
47-
removeDriver();
48+
getDriver().close();
49+
}
50+
51+
@AfterSuite(alwaysRun = true, description = "Teardown Test Suite")
52+
public void afterSuite() {
53+
destroyDriver();
4854
}
4955

5056
/**
@@ -67,6 +73,6 @@ public void afterScenario(Scenario scenario) throws IOException {
6773
allureSaveTextLogCucumber(scenario);
6874
}
6975
MDC.remove("testid");
70-
removeDriver();
76+
destroyDriver();
7177
}
7278
}

src/test/java/com/steps/ShoppingLoggedUserSteps.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,19 @@ public void iCanSeeShoppingCartFormWithValidInformation(String shoppingSummaryTa
191191
Assert.assertEquals(navigationTopLabelHeaderText.toLowerCase(),
192192
ContextInjection.LABEL_YOUR_SHOPPING_CART.toLowerCase(), VALUE_ERROR);
193193

194+
// TODO - clean assertions(proper refactor)
195+
// //ASSERT - PRODUCTS IN CART//
196+
// Assert.assertEquals(shoppingCartSummaryPage.productName.getText().toLowerCase(),
197+
// contextInjection.cartProductName.toLowerCase(), VALUE_ERROR);
198+
// Assert.assertEquals(Double.parseDouble(shoppingCartSummaryPage.productUnitPrice.getText()
199+
// .replaceAll("[^0-9.]", "")), contextInjection.productUnitPrice, VALUE_ERROR);
200+
// Assert.assertEquals(Double.parseDouble(shoppingCartSummaryPage.productQuantity.getAttribute
201+
// ("value").toLowerCase()), contextInjection.cartProductQuantity, VALUE_ERROR);
202+
// Assert.assertEquals(shoppingCartSummaryPage.productTotalPrice.getText()
203+
// .replaceAll("[^$0-9.]", ""),
204+
// $decimalFormat.format(contextInjection.cartProductPrice), VALUE_ERROR);
205+
206+
//ASSERT - CART SUMMARY//
194207
Assert.assertEquals(shoppingCartSummaryPage.totalProductsPrice.getText().replaceAll("[^$0-9.]", ""),
195208
$decimalFormat.format(contextInjection.cartTotalProductsPrice), VALUE_ERROR);
196209
Assert.assertEquals(shoppingCartSummaryPage.totalOrderShipping.getText().replaceAll("[^$0-9.]", ""),
@@ -201,16 +214,6 @@ public void iCanSeeShoppingCartFormWithValidInformation(String shoppingSummaryTa
201214
$decimalFormat.format(contextInjection.totalOrderTax), VALUE_ERROR);
202215
Assert.assertEquals(shoppingCartSummaryPage.totalOrderPriceWithTax.getText().replaceAll("[^$0-9.]", ""),
203216
$decimalFormat.format(contextInjection.totalOrderPriceWithTax), VALUE_ERROR);
204-
205-
// Assert.assertEquals(shoppingCartSummaryPage.productName.getText().toLowerCase(),
206-
// contextInjection.cartProductName.toLowerCase(), VALUE_ERROR);
207-
// Assert.assertEquals(Double.parseDouble(shoppingCartSummaryPage.productUnitPrice.getText()
208-
// .replaceAll("[^0-9.]", "")), contextInjection.productUnitPrice, VALUE_ERROR);
209-
// Assert.assertEquals(Double.parseDouble(shoppingCartSummaryPage.productQuantity.getAttribute
210-
// ("value").toLowerCase()), contextInjection.cartProductQuantity, VALUE_ERROR);
211-
// Assert.assertEquals(shoppingCartSummaryPage.productTotalPrice.getText()
212-
// .replaceAll("[^$0-9.]", ""),
213-
// $decimalFormat.format(contextInjection.cartProductPrice), VALUE_ERROR);
214217
break;
215218
case "addresses":
216219
//ASSERT//
@@ -349,12 +352,12 @@ public void iClickOnIConfirmMyOrderButton() throws Throwable {
349352
shoppingCartSummaryPage.iConfirmMyOrderButton.click();
350353
}
351354

352-
public void orderCalculations() {
355+
private void orderCalculations() {
353356
//GENERAL//
354357
contextInjection.cartProductPrice = (contextInjection.productUnitPrice * contextInjection.productQuantity);
355358
contextInjection.cartTotalProductsPrice = contextInjection.cartTotalProductsPrice + contextInjection.cartProductPrice;
356359

357-
//FOR MODAL//
360+
//FOR POPUP//
358361
contextInjection.cartTotalPrice = contextInjection.cartTotalProductsPrice + ContextInjection.SHIPPING_PRICE;
359362

360363
//FOR SUMMARY PAGE//

src/test/java/com/steps/SocialMediaPageSteps.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public void iAmRedirectedToSeleniumProfile(String logoName) throws Throwable {
8383

8484
//ACT//
8585
DriverFactory.getDriver().switchTo().window(browserTabs.get(1));
86-
logger.info(String.format("URL was: \"%S\"\n URL expected: \"%S\"", DriverFactory.getDriver().getCurrentUrl(), logoName + ".com"));
86+
logger.info(String.format("URL was: \"%S\" URL expected: \"%S\"", DriverFactory.getDriver().getCurrentUrl(), logoName + ".com"));
8787

8888
//ASSERT//
8989
Assert.assertTrue(DriverFactory.getDriver().getCurrentUrl().contains(logoName.toLowerCase() + ".com"),
464 Bytes
Binary file not shown.

src/test/resources/xml_runners/TestNG-POC.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
3-
<suite name="Automationpractice.com POC - Kamil Nowocin">
3+
<suite name="Automationpractice.com POC - Kamil Nowocin" thread-count="1" parallel="classes">
44
<listeners>
55
<listener class-name="com.buildListeners.TestNGAnnotationTransformer"/>
66
</listeners>
77
<parameter name="Parameter 1" value="Test 1"/>
88
<parameter name="Parameter 2" value="Test 2"/>
99
<parameter name="Parameter 3" value="Test 3"/>
10-
<test name="Automated tests for new POC features" group-by-instances="true">
10+
<!--Parallel testing -> thread-count="2" group-by-instances="false"-->
11+
<test name="Automated tests for new POC features" group-by-instances="true" preserve-order="false" enabled="true">
1112
<classes>
1213
<class name="tests.POC.POC_Tests"/>
1314
</classes>

src/test/resources/xml_runners/TestNG-WebAPI.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
3-
<suite name="Automationpractice.com API - Kamil Nowocin">
3+
<suite name="Automationpractice.com API - Kamil Nowocin" thread-count="1" parallel="classes">
44
<listeners>
55
<listener class-name="com.buildListeners.TestNGAnnotationTransformer"/>
66
</listeners>
7-
<test name="Automated tests for API client" group-by-instances="true">
7+
<!--Parallel testing -> thread-count="2" group-by-instances="false"-->
8+
<test name="Automated tests for API client" group-by-instances="true" preserve-order="false" enabled="true">
89
<classes>
910
<class name="tests.WebAPI.API_Tests"/>
1011
</classes>

src/test/resources/xml_runners/TestNG-WebAPP.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
3-
<suite name="Automationpractice.com WEB - Kamil Nowocin" thread-count="1" parallel="classes">
3+
<suite name="Automationpractice.com WEB - Kamil Nowocin" thread-count="4" parallel="classes">
44
<listeners>
55
<listener class-name="com.buildListeners.TestNGAnnotationTransformer"/>
66
</listeners>
7-
<test name="Automated tests for WEB client" group-by-instances="true">
7+
<!--Parallel testing -> thread-count="2" group-by-instances="false"-->
8+
<test name="Automated tests for WEB client" group-by-instances="false" preserve-order="false" enabled="true">
89
<classes>
910
<class name="tests.WebAPP.CustomerService_Tests"/>
1011
<class name="tests.WebAPP.Authentication_Tests"/>

0 commit comments

Comments
 (0)