Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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