Skip to content
Open
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.example.configuration;
package com.devexperts.in.qatesting.configuration;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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();
}


}
Original file line number Diff line number Diff line change
@@ -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());
}
}


}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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();
}

}


Original file line number Diff line number Diff line change
@@ -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();
}
}
12 changes: 0 additions & 12 deletions playwright-workshop/src/test/java/org/example/ExampleTest.java

This file was deleted.

7 changes: 5 additions & 2 deletions playwright-workshop/src/test/resources/config.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ slow.mo=50
base.url=https://qa-testing.in.devexperts.com/internship/

# Username for the test user.
test.user=changeit
[email protected]

#Example of invalid username
[email protected]

# Password for the test user.
test.password=changeit
test.password=MyPass1234!
Loading