Skip to content
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 Expand Up @@ -45,4 +45,4 @@ public static String getProperty(String key) {
throw new RuntimeException("Property not found: " + key);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package com.devexperts.in.qatesting;

import com.devexperts.in.qatesting.configuration.PropertiesProvider;
import com.microsoft.playwright.*;
import com.microsoft.playwright.options.WaitForSelectorState;
import org.junit.jupiter.api.*;
import com.microsoft.playwright.Page;

import java.util.Random;
import java.util.UUID;

import static org.junit.jupiter.api.Assertions.*;

public class AccountCreationTest {
private static Playwright playwright;
private Browser browser;
private Page page;

private static final String CREATE_PASSWORD = "245871^^ABcvb";
private static final String REAL_NAME = "Ana";

private String generatedEmail;
private String generatedPhone;

private String generateRandomEmail() {
String uuid = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 8);
return "testuser_" + uuid + "@example.com";
}

private String generatePortuguesePhone() {
Random random = new Random();
int prefix = 91 + random.nextInt(2); // 91 ou 92
int number = 1000000 + random.nextInt(9000000);
return "+351" + prefix + number;
}


@BeforeAll
public static void beforeAll(){
playwright = Playwright.create();
}

@BeforeEach
public void setUp(){
browser = playwright.chromium().launch();
page = browser.newPage();

System.out.println("Navigating to: " + PropertiesProvider.getProperty("base.url"));
page.navigate(PropertiesProvider.getProperty("base.url"),
new Page.NavigateOptions().setTimeout(60000));

generatedEmail = generateRandomEmail();
generatedPhone = generatePortuguesePhone();
}


@Test
public void testAccountCreationAndBalanceVerification(){
RegistrationPage registrationPage = new RegistrationPage(page);
registrationPage.clickOpenForm();
registrationPage.fillEmail(generatedEmail);
registrationPage.waitForPasswordFieldToBeVisible();
registrationPage.fillPassword(CREATE_PASSWORD);
registrationPage.fillRealName(REAL_NAME);
registrationPage.fillPhone(generatedPhone);
registrationPage.selectRandomBalance();

String selectedBalance = registrationPage.getSelectedBalance();

registrationPage.clickRegister();

LoginPage loginPage = new LoginPage(page);
loginPage.informUsername(generatedEmail);
loginPage.informPassword(CREATE_PASSWORD);
loginPage.clickLogin();

page.waitForLoadState();

Locator homeBalance = page.locator("#balanceInfoNumber");
homeBalance.waitFor(new Locator.WaitForOptions()
.setTimeout(60000)
.setState(WaitForSelectorState.VISIBLE));

String displayedBalance = homeBalance.textContent().trim().replace(".", "");

System.out.println(" Selected balance (from registration): " + selectedBalance);
System.out.println(" Displayed balance (after login): " + displayedBalance);

assertAll("Check Balance",
() -> assertNotNull(displayedBalance),
() -> assertEquals(displayedBalance, selectedBalance));
}


@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,41 @@
package com.devexperts.in.qatesting;

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_SELECTOR = "Username";
private static final String PASSWORD_SELECTOR = "#password";
private static final String LOGIN_SELECTOR = "Login";
public LoginPage(Page page){
this.page = page;
}

private Locator getInputUsername(){
return page.getByPlaceholder(USERNAME_SELECTOR);
}

private Locator getInputPassword(){
return page.locator(PASSWORD_SELECTOR);
}

private Locator getButtonLogin(){
return page.getByRole(AriaRole.BUTTON , new Page.GetByRoleOptions().setName(LOGIN_SELECTOR));
}


public void informUsername(String username){
getInputUsername().fill(username);
}

public void informPassword(String password){
getInputPassword().fill(password);
}

public void clickLogin(){
getButtonLogin().click();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.devexperts.in.qatesting;

import com.devexperts.in.qatesting.configuration.PropertiesProvider;
import com.microsoft.playwright.*;
import com.microsoft.playwright.options.AriaRole;
import org.junit.jupiter.api.*;

import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import static java.awt.SystemColor.text;
import static org.junit.jupiter.api.Assertions.*;

public class LoginTest {
private static Playwright playwright;
private Browser browser;
private Page page;
private static final String USERNAME_DATA = "[email protected]";
private static final String PASSWORD_DATA = "1234567^^Abcde";
private static final String INCORRECT_USERNAME_DATA = "[email protected]";
private static final String INCORRECT_PASSWORD_DATA = "123996^^ASdfg";


@BeforeAll
public static void beforeAll(){
playwright = Playwright.create();
}

@BeforeEach
public void setUp(){
browser = playwright.chromium().launch();
page = browser.newPage();

System.out.println("Navigating to: " + PropertiesProvider.getProperty("base.url"));
page.navigate(PropertiesProvider.getProperty("base.url"),
new Page.NavigateOptions().setTimeout(60000));
}

@Test
public void testSuccessfulLogin(){

LoginPage loginPage = new LoginPage(page);
loginPage.informUsername(USERNAME_DATA);
loginPage.informPassword(PASSWORD_DATA);
loginPage.clickLogin();

Locator homeHeaderPage = page.locator(".header-title-content");
assertAll("Login Page Checks" ,
() -> assertThat(homeHeaderPage).hasText("Home Test Task"),
() -> assertThat(homeHeaderPage).isVisible());
}


@Test
public void testLoginWithWrongCredentials() {

LoginPage loginPage = new LoginPage(page);
loginPage.informUsername(INCORRECT_USERNAME_DATA);
loginPage.informPassword(INCORRECT_PASSWORD_DATA);
loginPage.clickLogin();

Locator errorMessage = page.locator("#login-status");
assertAll("Login Failure Checks",
() -> assertTrue(errorMessage.isVisible()),
() -> assertThat(errorMessage).hasText("Wrong user! User " + INCORRECT_USERNAME_DATA + " 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,106 @@
package com.devexperts.in.qatesting;

import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.options.AriaRole;
import com.microsoft.playwright.options.SelectOption;
import com.microsoft.playwright.options.WaitForSelectorState;

import java.util.Random;
import java.util.Map;
import java.util.HashMap;

public class RegistrationPage {
Page page;
private String selectedBalance;
private static final String EMAIL_SELECTOR = "#desiredName";
private static final String CREATE_PASSWORD_SELECTOR = "#desiredPassword";
private static final String REAL_NAME_SELECTOR = "#desiredRealname";
private static final String PHONE_SELECTOR = "#desiredPhone";
private static final String BALANCE_SELECTOR = "#desiredDeposit";
private static final String OPEN_FORM_BUTTON = ".registrationToggle";
private static final String REGISTER_BUTTON = "#registration-button";

public RegistrationPage(Page page){
this.page = page;
}

private Locator getOpenFormButton() {
return page.locator(OPEN_FORM_BUTTON, new Page.LocatorOptions().setHasText("Need an account?"));
}

private Locator getInputEmail(){
return page.locator(EMAIL_SELECTOR);
}

private Locator getInputPassword(){
return page.locator(CREATE_PASSWORD_SELECTOR);
}

private Locator getInputRealName(){
return page.locator(REAL_NAME_SELECTOR);
}

private Locator getInputPhone(){
return page.locator(PHONE_SELECTOR);
}

private Locator getBalanceDropdown() {
return page.locator(BALANCE_SELECTOR);
}

private Locator getButtonRegister(){
return page.locator(REGISTER_BUTTON);
}

public void clickOpenForm() {
getOpenFormButton().click();
}


public void fillEmail(String email) {
getInputEmail().fill(email);
}

public void fillPassword(String password) {
getInputPassword().fill(password);
}

public void fillRealName(String realName) {
getInputRealName().fill(realName);
}

public void fillPhone(String phone) {
getInputPhone().fill(phone);
}

public void selectRandomBalance() {
Map<String, String> labelToValue = new HashMap<>();
labelToValue.put("1.000 BCC", "100000");
labelToValue.put("5.000 BCC", "500000");
labelToValue.put("10.000 BCC", "1000000");

String[] balances = {"1.000 BCC", "5.000 BCC", "10.000 BCC"};
String selectedLabel = balances[new Random().nextInt(balances.length)];

this.selectedBalance = labelToValue.get(selectedLabel);

Locator dropdown = getBalanceDropdown();
dropdown.selectOption(new SelectOption().setLabel(selectedLabel));
}

public String getSelectedBalance() {
return selectedBalance;
}

public void clickRegister() {
getButtonRegister().click();
}

public void waitForPasswordFieldToBeVisible() {
page.waitForSelector(CREATE_PASSWORD_SELECTOR, new Page.WaitForSelectorOptions()
.setState(com.microsoft.playwright.options.WaitForSelectorState.VISIBLE)
.setTimeout(60000));
}

}
12 changes: 0 additions & 12 deletions playwright-workshop/src/test/java/org/example/ExampleTest.java

This file was deleted.

2 changes: 1 addition & 1 deletion playwright-workshop/src/test/resources/config.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ headless=true
slow.mo=50

# Base URL for the application under test.
base.url=https://qa-testing.in.devexperts.com/internship/
base.url=https://qa-testing.in.devexperts.com:7691/

# Username for the test user.
test.user=changeit
Expand Down
Loading