Skip to content
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.idea
/target
/screenshots
*.iml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public void submit() {

@Override
public void sendKeys(CharSequence... charSequences) {
logger.debug("Sending [{}] to [{}] field.", Arrays.toString(charSequences), elementName);
logger.debug("Sending {} to [{}] field.", Arrays.toString(charSequences), elementName);
wrappedElement.sendKeys(charSequences);
}

Expand Down
42 changes: 42 additions & 0 deletions src/main/java/utils/PropertiesReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package utils;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

public class PropertiesReader {

private Properties properties;

private String baseUrl;
private String inventoryUrl;

public PropertiesReader(String fileLocation) {
initProperties(fileLocation);
loadProperties();
}

private void loadProperties() {
baseUrl = properties.getProperty("baseUrl");
inventoryUrl = properties.getProperty("inventoryUrl");
}

public void initProperties(String fileLocation) {
properties = new Properties();

try {
properties.load(new InputStreamReader(new FileInputStream(fileLocation)));
} catch (IOException e) {
throw new RuntimeException(e);
}
}

public String getBaseUrl() {
return baseUrl;
}

public String getInventoryUrl() {
return inventoryUrl;
}
}
31 changes: 31 additions & 0 deletions src/main/java/utils/Utils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package utils;

import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.io.FileHandler;

import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Utils {

public static String takeScreenshot(String name, WebDriver driver) {
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH.mm.ss");
File screenshotsDirectory = new File("screenshots/");
if (!screenshotsDirectory.exists()){
screenshotsDirectory.mkdirs();
}
String path = "screenshots/" + name + "_" + formatter.format(LocalDateTime.now()) + ".png";
try {
FileHandler.copy(screenshot, new File(path));
} catch (IOException e) {
e.printStackTrace();
}
return path;
}
}
2 changes: 1 addition & 1 deletion src/main/java/utils/WebDriverUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class WebDriverUtils {

private static WebDriver driver;
private static BrowserType browserType = BrowserType.CHROME;
private static final String[] OPTIONS_ARGUMENTS = new String[]{"disable-popup-blocking"};
private static final String[] OPTIONS_ARGUMENTS = new String[]{"disable-popup-blocking", "--remote-allow-origins=*"};

/**
* If setBrowserType method was not called then Chrome browser will be initialized.
Expand Down
13 changes: 13 additions & 0 deletions src/test/java/helpers/TestStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package helpers;

import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.ExtensionContext;

public class TestStatus implements AfterTestExecutionCallback {
public boolean isFailed;

@Override
public void afterTestExecution(ExtensionContext extensionContext) {
isFailed = extensionContext.getExecutionException().isPresent();
}
}
3 changes: 1 addition & 2 deletions src/test/java/pages/LogInPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ public ProductsPage clickOnLoginButton() {

public void assertErrorMessage(String expectedErrorMessage) {
String actualErrorMessage = WaitUtils.waitForElementToBeVisible(failedLoginMessage).getText();
assertEquals(expectedErrorMessage, actualErrorMessage,
"Actual error message:" + actualErrorMessage + " is not equal to expected: " + expectedErrorMessage);
assertEquals(expectedErrorMessage, actualErrorMessage, "Actual error message is not equal to expected.");
}
}
6 changes: 6 additions & 0 deletions src/test/java/pages/ProductsPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static utils.WaitUtils.waitForElementToBeVisible;

public class ProductsPage extends _PageInit {
Expand Down Expand Up @@ -36,4 +37,9 @@ public ProductsPage printOutProducts() {
}
return this;
}

public void assertNumberOfProducts(int expectedNumberOfProducts) {
int actualNumberOfProducts = productPageItemsList.size();
assertEquals(expectedNumberOfProducts, actualNumberOfProducts, "Actual number of products is not equal to expected.");
}
}
18 changes: 12 additions & 6 deletions src/test/java/tests/LoginPageTests.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package tests;

import org.junit.jupiter.api.BeforeEach;
import io.qameta.allure.Description;
import io.qameta.allure.Severity;
import io.qameta.allure.SeverityLevel;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import pages.LogInPage;

@DisplayName("Login page Tests")
public class LoginPageTests extends _TestsHooks {

@BeforeEach
public void beforeTest() {
driver.get(LOG_IN_PAGE_URL);
}

@Test
@DisplayName("Correct data login")
@Description("Log in with correct user")
@Severity(SeverityLevel.BLOCKER)
public void correctDataLoginTest() {
LogInPage logInPage = new LogInPage();
logInPage
Expand All @@ -22,6 +24,8 @@ public void correctDataLoginTest() {
}

@Test
@Description("Try to log in with incorrect user")
@Severity(SeverityLevel.NORMAL)
public void incorrectDataLoginTest() {
LogInPage logInPage = new LogInPage();
logInPage
Expand All @@ -32,6 +36,8 @@ public void incorrectDataLoginTest() {
}

@Test
@Description("Try to log in with locked user")
@Severity(SeverityLevel.NORMAL)
public void lockedUserLoginTest() {
LogInPage logInPage = new LogInPage();
logInPage
Expand Down
16 changes: 12 additions & 4 deletions src/test/java/tests/ProductPageTests.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
package tests;

import io.qameta.allure.Description;
import io.qameta.allure.Severity;
import io.qameta.allure.SeverityLevel;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.Cookie;
import pages.ProductsPage;

@DisplayName("Products page Tests")
public class ProductPageTests extends _TestsHooks {

@BeforeEach
public void beforeTest() {
driver.get(LOG_IN_PAGE_URL);
driver.manage().addCookie(new Cookie("session-username", "standard_user"));
driver.manage().addCookie(new Cookie("session-password", "secret_sauce"));
driver.get(LOG_IN_PAGE_URL + "/inventory.html");
driver.get(testData.getInventoryUrl());
}

@Test
public void printOutProductsTest() {
@Severity(SeverityLevel.CRITICAL)
@DisplayName("Products page products number tests")
@Description("Print out products and confirm number of products ")
public void printOutAndCountProductsTest() {
ProductsPage productsPage = new ProductsPage();
productsPage
.printOutProducts();
.printOutProducts()
.assertNumberOfProducts(6);
}
}
34 changes: 24 additions & 10 deletions src/test/java/tests/_TestsHooks.java
Original file line number Diff line number Diff line change
@@ -1,34 +1,48 @@
package tests;

import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import helpers.TestStatus;
import io.qameta.allure.Allure;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.openqa.selenium.WebDriver;
import utils.BrowserType;
import utils.LoggingUtils;
import utils.PropertiesReader;
import utils.Utils;
import utils.WebDriverUtils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class _TestsHooks {

public WebDriver driver;
protected static final String LOG_IN_PAGE_URL = "https://www.saucedemo.com";
protected Logger logger = LoggingUtils.getLogger(this.getClass());
protected WebDriver driver;
protected PropertiesReader testData;

@RegisterExtension
TestStatus testStatus = new TestStatus();

@BeforeAll
static void beforeAll() {
public void beforeAll() {
/* Available options: CHROME, EDGE, FIREFOX */
WebDriverUtils.setBrowserType(BrowserType.CHROME);
testData = new PropertiesReader("src/test/resources/TestData.properties");
}

@BeforeEach
public void beforeEach() {
driver = WebDriverUtils.getWebDriver();
driver.manage().window().maximize();
driver.get(testData.getBaseUrl());
}

@AfterEach
public void afterEach() {
public void afterEach(TestInfo testInfo) throws IOException {
if (testStatus.isFailed) {
String path = Utils.takeScreenshot(testInfo.getDisplayName(), driver);
Allure.attachment("screenshot", Files.newInputStream(Paths.get(path)));
}
WebDriverUtils.quitDriver();
}
}
2 changes: 2 additions & 0 deletions src/test/resources/TestData.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
baseUrl=https://www.saucedemo.com/
inventoryUrl=https://www.saucedemo.com/inventory.html