diff --git a/playwright-workshop/src/main/java/org/example/configuration/PropertiesProvider.java b/playwright-workshop/src/main/java/com/devexperts/in/qatesting/configuration/PropertiesProvider.java similarity index 96% rename from playwright-workshop/src/main/java/org/example/configuration/PropertiesProvider.java rename to playwright-workshop/src/main/java/com/devexperts/in/qatesting/configuration/PropertiesProvider.java index 846df5b..6d772c8 100644 --- a/playwright-workshop/src/main/java/org/example/configuration/PropertiesProvider.java +++ b/playwright-workshop/src/main/java/com/devexperts/in/qatesting/configuration/PropertiesProvider.java @@ -1,4 +1,4 @@ -package org.example.configuration; +package com.devexperts.in.qatesting.configuration; import java.io.FileInputStream; import java.io.FileNotFoundException; diff --git a/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/HomePage.java b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/HomePage.java new file mode 100644 index 0000000..73a8a7d --- /dev/null +++ b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/HomePage.java @@ -0,0 +1,24 @@ +package com.devexperts.in.qatesting.pages; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; + +public class HomePage { + Page page; + private static final String HOME_PAGE_TITLE = ".header-title-content"; + private static final String BALANCE_SELECTOR = "#balanceInfoNumber"; + public HomePage(Page page){ + this.page = page; + } + + //Method for locating the Title + private Locator getHomePageTitle(){ + return page.locator(HOME_PAGE_TITLE); + } + + //Method for locating the balance (BCC balance) + public Locator getBalanceOnHomePage(){ + return page.locator(BALANCE_SELECTOR); + } + +} diff --git a/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/LoginPage.java b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/LoginPage.java new file mode 100644 index 0000000..d2a9c9a --- /dev/null +++ b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/LoginPage.java @@ -0,0 +1,65 @@ +package com.devexperts.in.qatesting.pages; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class LoginPage { + Page page; + private static final String USERNAME_FIELD_SELECTOR = "Username"; + private static final String PASSWORD_FIELD_SELECTOR = "#password"; + private static final String LOGIN_BUTTON_SELECTOR = "Login"; + private static final String INVALID_LOGIN_STATUS_SELECTOR = "#login-status"; + private static final String NEW_USER_REGISTRATION_SELECTOR = "#usernameForm > div.input-group.modal-controls > a"; + public LoginPage(Page page){ + this.page = page; + } + + //Method for locating the Username field + private Locator getInputUsername(){ + return page.getByPlaceholder(USERNAME_FIELD_SELECTOR); + } + + //Method for locating the Password field + private Locator getInputPassword(){ + return page.locator(PASSWORD_FIELD_SELECTOR); + } + + //Method for locating the Login button + private Locator getLoginButton(){ + return page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName(LOGIN_BUTTON_SELECTOR)); + } + + //Method for locating the invalid login error message + public Locator getInvalidStatusCheck(){ + return page.locator(INVALID_LOGIN_STATUS_SELECTOR); + } + + //Method for locating "Need a new account" toggle + public Locator getNewUserRegistrationLink(){ + return page.locator(NEW_USER_REGISTRATION_SELECTOR); + } + + + //Method for entering the Username + public void provideUsername(String username){ + getInputUsername().fill(username); + } + + //Method for entering the Password + public void providePassword(String password){ + getInputPassword().fill(password); + } + + //Method for clicking the Login button + public void clickLogin(){ + getLoginButton().click(); + } + + //Method for opening the Registration page + public void OpenRegistration(){ + getNewUserRegistrationLink().click(); + } + + +} diff --git a/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/RegistrationPage.java b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/RegistrationPage.java new file mode 100644 index 0000000..c588b85 --- /dev/null +++ b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/pages/RegistrationPage.java @@ -0,0 +1,93 @@ +package com.devexperts.in.qatesting.pages; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.WaitForSelectorState; + +import java.util.UUID; + + +public class RegistrationPage { + Page page; + private static final String DESIRED_NAME_SELECTOR = "#desiredName"; + private static final String DESIRED_PASSWORD_SELECTOR = "#desiredPassword"; + private static final String REGISTER_BUTTON_SELECTOR = "#registration-button"; + private static final String DESIRED_BALANCE_SELECTOR = "#desiredDeposit"; + private static final String LOGIN_BUTTON_SELECTOR = "#login-button"; + + public RegistrationPage(Page page){ + this.page = page; + } + + //Method for locating the New username field + private Locator getNewUsernameField() { + return page.locator(DESIRED_NAME_SELECTOR); + } + + //Method for locating the New password field + private Locator getNewPasswordField() { + return page.locator(DESIRED_PASSWORD_SELECTOR); + } + + + //Method for locating the desired balance field + public Locator getDesiredBalanceField() { + return page.locator(DESIRED_BALANCE_SELECTOR); + } + + + //Method for locating the Register button + private Locator getRegisterButton() { + return page.locator(REGISTER_BUTTON_SELECTOR); + } + + + //Method to locate the Login button after registration + public Locator getLoginButtonAfterRegistration() { + Locator locator = page.locator(LOGIN_BUTTON_SELECTOR); + locator.waitFor(new Locator.WaitForOptions().setState(WaitForSelectorState.VISIBLE)); + return locator; + } + + + + //Method to provide the new user's username + public void provideDesiredUsername(String desiredUsername) { + getNewUsernameField().fill(desiredUsername); + } + + //Method for entering the Password + public void provideDesiredPassword(String desiredPassword) { + getNewPasswordField().fill(desiredPassword); + } + + //Method to choose the deposit + public void selectDeposit() { + getDesiredBalanceField().selectOption("1.000 BCC"); + } + + //Method for clicking the Register button + public void clickRegister() { + getRegisterButton().click(); + } + + //Method to click the Login button that appears after registering + public void loginAfterRegistration() { + getLoginButtonAfterRegistration().click(); + } + + //Method to generate a new email address for each time a new user is being registered (each test run) + public class EmailGenerator { + + public static String generateNewEmail() { + String uniquePrefix = UUID.randomUUID().toString().substring(0, 8); + return uniquePrefix + "@example.com"; + } + + public static void main(String[] args) { + System.out.println(generateNewEmail()); + } + } + + +} diff --git a/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/BalanceCheckTest.java b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/BalanceCheckTest.java new file mode 100644 index 0000000..1d3d517 --- /dev/null +++ b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/BalanceCheckTest.java @@ -0,0 +1,60 @@ +package com.devexperts.in.qatesting.testSteps; + +import com.devexperts.in.qatesting.configuration.PropertiesProvider; +import com.devexperts.in.qatesting.pages.HomePage; +import com.devexperts.in.qatesting.pages.LoginPage; +import com.devexperts.in.qatesting.pages.RegistrationPage; +import com.microsoft.playwright.*; +import org.junit.jupiter.api.*; + + +import static com.devexperts.in.qatesting.pages.RegistrationPage.EmailGenerator.generateNewEmail; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class BalanceCheckTest { + private static Playwright playwright; + private Browser browser; + private Page page; + private static final String PASSWORD = PropertiesProvider.getProperty("test.password"); + private static final String NEW_USERNAME = generateNewEmail(); + + @BeforeAll + public static void beforeAll(){ + playwright = Playwright.create(); + } + + @BeforeEach + public void setUp(){ + browser = playwright.chromium().launch(); + page = browser.newPage(); + page.navigate(PropertiesProvider.getProperty("base.url")); + } + + @Test + public void testBalanceMatching(){ + LoginPage loginPage = new LoginPage(page); + RegistrationPage registrationPage = new RegistrationPage(page); + HomePage homePage = new HomePage(page); + + loginPage.OpenRegistration(); + registrationPage.provideDesiredUsername(NEW_USERNAME); + registrationPage.provideDesiredPassword(PASSWORD); + registrationPage.selectDeposit(); + registrationPage.clickRegister(); + registrationPage.loginAfterRegistration(); + page.waitForTimeout(1000); + + assertEquals("1000.00", homePage.getBalanceOnHomePage().textContent()); + } + + @AfterEach + public void tearDown(){ + page.close(); + browser.close(); + } + + @AfterAll + public static void afterAll(){ + playwright.close(); + } +} diff --git a/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/InvalidCredentialsLoginTest.java b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/InvalidCredentialsLoginTest.java new file mode 100644 index 0000000..c20333b --- /dev/null +++ b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/InvalidCredentialsLoginTest.java @@ -0,0 +1,55 @@ +package com.devexperts.in.qatesting.testSteps; + +import com.devexperts.in.qatesting.configuration.PropertiesProvider; +import com.devexperts.in.qatesting.pages.LoginPage; +import com.microsoft.playwright.*; +import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class InvalidCredentialsLoginTest { + private static Playwright playwright; + private Browser browser; + private Page page; + private static final String WRONG_USERNAME = PropertiesProvider.getProperty("test.wronguser"); + private static final String PASSWORD = PropertiesProvider.getProperty("test.password"); + + @BeforeAll + public static void beforeAll(){ + playwright = Playwright.create(); + } + + @BeforeEach + public void setUp(){ + browser = playwright.chromium().launch(); + page = browser.newPage(); + page.navigate(PropertiesProvider.getProperty("base.url")); + } + + @Test + public void testLoginWithWrongUsername(){ + LoginPage loginPage= new LoginPage(page); + loginPage.provideUsername(WRONG_USERNAME); + loginPage.providePassword(PASSWORD); + loginPage.clickLogin(); + page.waitForTimeout(2000); + loginPage.getInvalidStatusCheck(); + + //Verify that the unsuccessful login status check is displayed and that it contains the wrong username provided + assertEquals(loginPage.getInvalidStatusCheck().textContent(), "Wrong user! User " + WRONG_USERNAME + " not found."); + + } + + @AfterEach + public void tearDown(){ + page.close(); + browser.close(); + } + + @AfterAll + public static void afterAll(){ + playwright.close(); + } + +} + + diff --git a/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/SuccessfulLoginTest.java b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/SuccessfulLoginTest.java new file mode 100644 index 0000000..04cbf02 --- /dev/null +++ b/playwright-workshop/src/test/java/com/devexperts/in/qatesting/testSteps/SuccessfulLoginTest.java @@ -0,0 +1,55 @@ +package com.devexperts.in.qatesting.testSteps; + +import com.devexperts.in.qatesting.configuration.PropertiesProvider; +import com.devexperts.in.qatesting.pages.LoginPage; +import com.microsoft.playwright.*; +import org.junit.jupiter.api.*; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +public class SuccessfulLoginTest { + private static Playwright playwright; + private Browser browser; + private Page page; + private static final String USERNAME = PropertiesProvider.getProperty("test.user"); + private static final String PASSWORD = PropertiesProvider.getProperty("test.password"); + + @BeforeAll + public static void beforeAll(){ + playwright = Playwright.create(); + } + + @BeforeEach + public void setUp(){ + browser = playwright.chromium().launch(); + page = browser.newPage(); + page.navigate(PropertiesProvider.getProperty("base.url")); + } + + @Test + public void testSuccessfulLogin(){ + LoginPage loginPage= new LoginPage(page); + loginPage.provideUsername(USERNAME); + loginPage.providePassword(PASSWORD); + loginPage.clickLogin(); + + //Verify the Home page for logged user is displayed + Locator homePageTitle = page.locator(".header-title-content"); + + assertAll("Login Page Check", + () -> assertThat(homePageTitle).isVisible(), + () -> assertThat(homePageTitle).hasText("Home Test Task")); + } + + @AfterEach + public void tearDown(){ + page.close(); + browser.close(); + } + + @AfterAll + public static void afterAll(){ + playwright.close(); + } +} diff --git a/playwright-workshop/src/test/java/org/example/ExampleTest.java b/playwright-workshop/src/test/java/org/example/ExampleTest.java deleted file mode 100644 index 9cdb3dc..0000000 --- a/playwright-workshop/src/test/java/org/example/ExampleTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.example; - -import org.junit.jupiter.api.Test; - -public class ExampleTest { - // - // - @Test - public void example(){ - - } -} diff --git a/playwright-workshop/src/test/resources/config.properties b/playwright-workshop/src/test/resources/config.properties index 9f93624..b25e9f1 100644 --- a/playwright-workshop/src/test/resources/config.properties +++ b/playwright-workshop/src/test/resources/config.properties @@ -10,7 +10,10 @@ slow.mo=50 base.url=https://qa-testing.in.devexperts.com/internship/ # Username for the test user. -test.user=changeit +test.user=pkaramanova@example.com + +#Example of invalid username +test.wronguser=mywrongemail@example.com # Password for the test user. -test.password=changeit \ No newline at end of file +test.password=MyPass1234! \ No newline at end of file