From c8386f631112e14106d7533d65f9fc0167b4567b Mon Sep 17 00:00:00 2001 From: Marko Date: Sat, 11 May 2024 15:20:29 +0200 Subject: [PATCH] Implemented selenium automation tests for all functionalities --- pom.xml | 43 ++++- src/test/java/selenium/TestBase.java | 97 +++++++++++ .../java/selenium/config/config.properties | 2 + .../java/selenium/config/input.properties | 64 +++++++ .../java/selenium/config/locators.properties | 36 ++++ .../selenium/config/textsAndPhotos.properties | 16 ++ .../java/selenium/pages/AddOwnerPage.java | 75 ++++++++ src/test/java/selenium/pages/AddPetPage.java | 74 ++++++++ .../java/selenium/pages/AddVisitPage.java | 50 ++++++ .../java/selenium/pages/FindOwnersPage.java | 60 +++++++ src/test/java/selenium/pages/HomePage.java | 42 +++++ .../java/selenium/pages/ListOwnersPage.java | 61 +++++++ src/test/java/selenium/pages/OwnerPage.java | 123 +++++++++++++ .../scenarios/TS01FindOwnersTest.java | 128 ++++++++++++++ .../selenium/scenarios/TS02AddOwnerTest.java | 161 ++++++++++++++++++ .../selenium/scenarios/TS03AddPetTest.java | 141 +++++++++++++++ .../selenium/scenarios/TS04AddVisitTest.java | 76 +++++++++ .../selenium/scenarios/TS05HomePageTest.java | 47 +++++ testng.xml | 9 + 19 files changed, 1302 insertions(+), 3 deletions(-) create mode 100644 src/test/java/selenium/TestBase.java create mode 100644 src/test/java/selenium/config/config.properties create mode 100644 src/test/java/selenium/config/input.properties create mode 100644 src/test/java/selenium/config/locators.properties create mode 100644 src/test/java/selenium/config/textsAndPhotos.properties create mode 100644 src/test/java/selenium/pages/AddOwnerPage.java create mode 100644 src/test/java/selenium/pages/AddPetPage.java create mode 100644 src/test/java/selenium/pages/AddVisitPage.java create mode 100644 src/test/java/selenium/pages/FindOwnersPage.java create mode 100644 src/test/java/selenium/pages/HomePage.java create mode 100644 src/test/java/selenium/pages/ListOwnersPage.java create mode 100644 src/test/java/selenium/pages/OwnerPage.java create mode 100644 src/test/java/selenium/scenarios/TS01FindOwnersTest.java create mode 100644 src/test/java/selenium/scenarios/TS02AddOwnerTest.java create mode 100644 src/test/java/selenium/scenarios/TS03AddPetTest.java create mode 100644 src/test/java/selenium/scenarios/TS04AddVisitTest.java create mode 100644 src/test/java/selenium/scenarios/TS05HomePageTest.java create mode 100644 testng.xml diff --git a/pom.xml b/pom.xml index cf47f8aa6df..3739fb635c5 100644 --- a/pom.xml +++ b/pom.xml @@ -139,6 +139,43 @@ jakarta.xml.bind-api + + + org.seleniumhq.selenium + selenium-java + 4.20.0 + + + + + org.testng + testng + 7.9.0 + test + + + + + org.uncommons + reportng + 1.1.4 + test + + + + + org.apache.poi + poi + 5.2.5 + + + + io.github.bonigarcia + webdrivermanager + 5.7.0 + test + + @@ -220,7 +257,7 @@ spring-boot-maven-plugin - build-info @@ -378,7 +415,7 @@ - org.eclipse.m2e @@ -436,4 +473,4 @@ - \ No newline at end of file + diff --git a/src/test/java/selenium/TestBase.java b/src/test/java/selenium/TestBase.java new file mode 100644 index 00000000000..214eca7203c --- /dev/null +++ b/src/test/java/selenium/TestBase.java @@ -0,0 +1,97 @@ +package selenium; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.edge.EdgeDriver; +import org.openqa.selenium.edge.EdgeOptions; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.openqa.selenium.firefox.FirefoxOptions; +import org.testng.Assert; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeMethod; + +import java.io.FileReader; +import java.io.IOException; +import java.util.Properties; + +public class TestBase { + + public static WebDriver driver; + + public static Properties prop = new Properties(); + + public static Properties locators = new Properties(); + + public static Properties tap = new Properties(); + + public static Properties input = new Properties(); + + public static FileReader frProp; + + public static FileReader frLoc; + + public static FileReader frTap; + + public static FileReader frInput; + + @BeforeMethod + public void setUp() throws IOException { + String userDirectory = System.getProperty("user.dir"); + String basePath = "\\src\\test\\java\\selenium\\config\\"; + String propPath = basePath + "config.properties"; + String locPath = basePath + "locators.properties"; + String tapPath = basePath + "textsAndPhotos.properties"; + String inputPath = basePath + "input.properties"; + + if (driver == null) { + frProp = new FileReader(userDirectory + propPath); + frLoc = new FileReader(userDirectory + locPath); + frTap = new FileReader(userDirectory + tapPath); + frInput = new FileReader(userDirectory + inputPath); + + prop.load(frProp); + locators.load(frLoc); + tap.load(frTap); + input.load(frInput); + } + + String browser = prop.getProperty("browser").toLowerCase(); + ChromeOptions chromeOptions = new ChromeOptions(); + chromeOptions.addArguments("--headless", "-disable-gpu", "-window-size=1920,1080"); + FirefoxOptions firefoxOptions = new FirefoxOptions(); + firefoxOptions.addArguments("--headless", "-disable-gpu", "-window-size=1920,1080"); + EdgeOptions edgeOptions = new EdgeOptions(); + edgeOptions.addArguments("--headless", "-disable-gpu", "-window-size=1920,1080"); + + switch (browser) { + case "chrome": + driver = new ChromeDriver(chromeOptions); + break; + case "firefox": + driver = new FirefoxDriver(firefoxOptions); + break; + case "edge": + driver = new EdgeDriver(edgeOptions); + break; + default: + throw new IllegalArgumentException("Unsupported browser: " + browser); + } + + // driver.manage().window().maximize(); + driver.get(prop.getProperty("testUrl")); + + WebElement welcomePhoto = driver.findElement(By.className(locators.getProperty("welcomePhoto"))); + String ActualWelcomePhotoSrc = welcomePhoto.getAttribute("src"); + String expectedWelcomePhoto = tap.getProperty("welcomePhoto"); + Assert.assertEquals(ActualWelcomePhotoSrc, expectedWelcomePhoto); + } + + @AfterMethod + public void tearDown() { + driver.quit(); + } + +} diff --git a/src/test/java/selenium/config/config.properties b/src/test/java/selenium/config/config.properties new file mode 100644 index 00000000000..124e48d592a --- /dev/null +++ b/src/test/java/selenium/config/config.properties @@ -0,0 +1,2 @@ +browser=chrome +testUrl=http://localhost:8080/ diff --git a/src/test/java/selenium/config/input.properties b/src/test/java/selenium/config/input.properties new file mode 100644 index 00000000000..ebcc20ca086 --- /dev/null +++ b/src/test/java/selenium/config/input.properties @@ -0,0 +1,64 @@ +existingLastName=Franklin +existingFirstName=George +nonExistingLastName=White +caseSensitiveLastName=franklin + +firstName=Mark +lastName=Jack +address=Red Boulevard 16 +city=Skopje +telephone=075500000 + +numbersInFirstName=1234 +numbersInLastName=5678 + +firstName2=Jack +lastName2=Bryan +address2=Grey Street 12 +city2=London +telephone2=123456789 + +textInTelephoneField=telephones + +updateFirstName = John +updateLastName = Doe +updateAddress = 123 Main St +updateCity = New York +updateTelephone = 55501234 + +firstName3=Kix +lastName3=Exe +address3=Rouge St 999 +city3=Johannesburg +telephone3=098765432 + +updateFirstName2=John +updateLastName2=Do +updateAddress2=124 Main St +updateCity2=Nevada +updateTelephone2=55501235 + +petName=Rodrigo +birthDate=03202021 +petType=bird + +petName2=Benji +birthDate2=10022020 +petType2=dog + +petName3=Naila +birthDate3=05052018 +petType3=snake + +petName4=Scar +futureBirthDate=01012500 +petType4=lizard + +numberPetName=16 +birthDate5=01102022 +petType5=cat + +date=05042023 +description=Needs more care and love + +invalidDate=0101123123 diff --git a/src/test/java/selenium/config/locators.properties b/src/test/java/selenium/config/locators.properties new file mode 100644 index 00000000000..83552034396 --- /dev/null +++ b/src/test/java/selenium/config/locators.properties @@ -0,0 +1,36 @@ +welcomePhoto=img-responsive +findOwnersLink=//span[normalize-space()='Find owners'] +lastNameField=lastName +findOwnerButton=button[type='submit'] +addOwnerButton=//a[normalize-space()='Add Owner'] +editOwnerButton=//a[@class='btn btn-primary'][contains(text(),'Edit')] +addNewPetButton=//a[@class='btn btn-primary'][contains(text(),'Add')] +editPetButton=//a[normalize-space()='Edit Pet'] +addVisitButton=//a[normalize-space()='Add Visit'] +nameLocator=(//td)[1] +ownerNotFound=span[class='help-inline'] div p +tableId=owners +firstNameField=firstName +address=address +city=city +telephone=telephone +successMessageAlert=success-message +addOwnerButton2=//*[@id="add-owner-form"]/div[2]/div/button +thirdPage=//a[normalize-space()='3'] +updateOwnerButton=//button[normalize-space()='Update Owner'] +updateMessageAlert=success-message +namePetField=name +birthDateField=birthDate +petTypeField=type +addPetButton=//button[normalize-space()='Add Pet'] +newPetAddedMessageAlert=success-message +petDetails=dl-horizontal +addPetPageErrorMessage=help-inline +updatePetButton=//button[normalize-space()='Update Pet'] +visitDate=date +descriptionField=description +addVisit=/html/body/div/div/form/div[2]/div/button +visitAddedMessage=success-message +visitDetails=table-condensed +homePageLink=//span[normalize-space()='Home'] +logoLink=//a[@class='navbar-brand']//span diff --git a/src/test/java/selenium/config/textsAndPhotos.properties b/src/test/java/selenium/config/textsAndPhotos.properties new file mode 100644 index 00000000000..449863d8ea3 --- /dev/null +++ b/src/test/java/selenium/config/textsAndPhotos.properties @@ -0,0 +1,16 @@ +welcomePhoto=http://localhost:8080/resources/images/pets.png +ownerNotFoundText=has not been found +Owner1=George Franklin 110 W. Liberty St. Madison 6085551023 Leo +Owner2=Betty Davis 638 Cardinal Ave. Sun Prairie 6085551749 Basil +successMessage=New Owner Created +errorMessage=must not be blank +errorMessageTelephoneField=numeric value out of bounds (<10 digits>.<0 digits> expected) +updateMessage=Owner Values Updated +newPetAddedMessage=New Pet has been Added +samePetNameErrorMessage=is already in use +emptyPetFieldsErrorMessage=is required +invalidDateErrorMessage=invalid date +petUpdateMessage=Pet details has been edited +visitAddedMessage=Your vist has been boked +emptyFieldInAddVisit=must not be blank +invalidDateInAddVisit=invalid date diff --git a/src/test/java/selenium/pages/AddOwnerPage.java b/src/test/java/selenium/pages/AddOwnerPage.java new file mode 100644 index 00000000000..3e83b03b0de --- /dev/null +++ b/src/test/java/selenium/pages/AddOwnerPage.java @@ -0,0 +1,75 @@ +package selenium.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.WebDriverWait; +import selenium.TestBase; + +import java.time.Duration; +import java.util.List; +import java.util.Properties; + +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOf; +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfAllElements; + +public class AddOwnerPage extends TestBase { + + public AddOwnerPage(WebDriver driver, Properties loc) { + TestBase.driver = driver; + TestBase.locators = loc; + } + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(2)); + + By firstNameField = By.id(locators.getProperty("firstNameField")); + + By lastNameField = By.id(locators.getProperty("lastNameField")); + + By addressField = By.id(locators.getProperty("address")); + + By cityField = By.id(locators.getProperty("city")); + + By telephoneField = By.id(locators.getProperty("telephone")); + + By addOwnerButton = By.xpath(locators.getProperty("addOwnerButton2")); + + By updateOwnerButton = By.xpath(locators.getProperty("updateOwnerButton")); + + public void setTextInFields(String firstName, String lastName, String address, String city, String telephone) { + driver.findElement(firstNameField).sendKeys(firstName); + driver.findElement(lastNameField).sendKeys(lastName); + driver.findElement(addressField).sendKeys(address); + driver.findElement(cityField).sendKeys(city); + driver.findElement(telephoneField).sendKeys(telephone); + } + + public void clickingOnAddOwnerButton() { + driver.findElement(addOwnerButton).click(); + } + + public boolean isErrorMessageDisplayedForEmptyFields(String message) { + List messages = driver.findElements(By.xpath("//*[contains(text(),'" + message + "')]")); + wait.until(visibilityOfAllElements(messages)); + return messages.size() >= 4; + } + + public boolean isErrorMessageDisplayedForTextInTelephoneField(String message) { + WebElement ErrorMessage = driver.findElement(By.xpath("//*[contains(text(),'" + message + "')]")); + wait.until(visibilityOf(ErrorMessage)); + return ErrorMessage.getText().equals(message); + } + + public void clearFields() { + driver.findElement(firstNameField).clear(); + driver.findElement(lastNameField).clear(); + driver.findElement(addressField).clear(); + driver.findElement(cityField).clear(); + driver.findElement(telephoneField).clear(); + } + + public void clickOnUpdateOwnerButton() { + driver.findElement(updateOwnerButton).click(); + } + +} diff --git a/src/test/java/selenium/pages/AddPetPage.java b/src/test/java/selenium/pages/AddPetPage.java new file mode 100644 index 00000000000..5345597b359 --- /dev/null +++ b/src/test/java/selenium/pages/AddPetPage.java @@ -0,0 +1,74 @@ +package selenium.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.Select; +import org.openqa.selenium.support.ui.WebDriverWait; +import selenium.TestBase; + +import java.time.Duration; +import java.util.List; +import java.util.Properties; + +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfAllElements; + +public class AddPetPage extends TestBase { + + public AddPetPage(WebDriver driver, Properties loc) { + TestBase.driver = driver; + TestBase.locators = loc; + } + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3)); + + By namePetField = By.id(locators.getProperty("namePetField")); + + By birthDateField = By.id(locators.getProperty("birthDateField")); + + By petTypeField = By.id(locators.getProperty("petTypeField")); + + By addPetButton = By.xpath(locators.getProperty("addPetButton")); + + By updatePetButton = By.xpath(locators.getProperty("updatePetButton")); + + public void fillTheFields(String namePet, String birthDate, String petType) { + driver.findElement(namePetField).sendKeys(namePet); + driver.findElement(birthDateField).sendKeys(birthDate); + WebElement dropdownElement = driver.findElement(petTypeField); + Select dropdown = new Select(dropdownElement); + dropdown.selectByValue(petType); + } + + public void clickOnAddPetButton() { + driver.findElement(addPetButton).click(); + } + + public boolean isErrorMessageDisplayedForSamePetName() { + WebElement error = driver.findElement(By.className(locators.getProperty("addPetPageErrorMessage"))); + String expectedErrorText = tap.getProperty("samePetNameErrorMessage"); + return error.getText().equals(expectedErrorText); + } + + public boolean isErrorMessageDisplayedForEmptyFields(String message) { + List messages = driver.findElements(By.xpath("//*[contains(text(),'" + message + "')]")); + wait.until(visibilityOfAllElements(messages)); + return messages.size() == 2; + } + + public boolean isInvalidDateErrorMessageDisplayed() { + WebElement error = driver.findElement(By.className(locators.getProperty("addPetPageErrorMessage"))); + String expectedErrorText = tap.getProperty("invalidDateErrorMessage"); + return error.getText().equals(expectedErrorText); + } + + public void clearFields() { + driver.findElement(namePetField).clear(); + driver.findElement(birthDateField).clear(); + } + + public void clickOnUpdatePetButton() { + driver.findElement(updatePetButton).click(); + } + +} diff --git a/src/test/java/selenium/pages/AddVisitPage.java b/src/test/java/selenium/pages/AddVisitPage.java new file mode 100644 index 00000000000..145685528e2 --- /dev/null +++ b/src/test/java/selenium/pages/AddVisitPage.java @@ -0,0 +1,50 @@ +package selenium.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.WebDriverWait; +import selenium.TestBase; + +import java.time.Duration; +import java.util.Properties; + +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOf; + +public class AddVisitPage extends TestBase { + + public AddVisitPage(WebDriver driver, Properties loc) { + TestBase.driver = driver; + TestBase.locators = loc; + } + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(4)); + + By visitDateField = By.id(locators.getProperty("visitDate")); + + By descriptionField = By.id(locators.getProperty("descriptionField")); + + By addVisitButton = By.xpath(locators.getProperty("addVisit")); + + public void fillTheFields(String visitDate, String description) { + driver.findElement(visitDateField).sendKeys(visitDate); + driver.findElement(descriptionField).sendKeys(description); + } + + public void clickOnAddVisitButton() { + driver.findElement(addVisitButton).click(); + } + + public boolean isErrorMessageDisplayedForEmptyField(String message) { + WebElement ErrorMessage = driver.findElement(By.xpath("//*[contains(text(),'" + message + "')]")); + wait.until(visibilityOf(ErrorMessage)); + return ErrorMessage.getText().equals(message); + } + + public boolean isErrorMessageDisplayedForInvalidDate(String message) { + WebElement ErrorMessage = driver.findElement(By.xpath("//*[contains(text(),'" + message + "')]")); + wait.until(visibilityOf(ErrorMessage)); + return ErrorMessage.getText().equals(message); + } + +} diff --git a/src/test/java/selenium/pages/FindOwnersPage.java b/src/test/java/selenium/pages/FindOwnersPage.java new file mode 100644 index 00000000000..d544cf3c3e2 --- /dev/null +++ b/src/test/java/selenium/pages/FindOwnersPage.java @@ -0,0 +1,60 @@ +package selenium.pages; + +import org.openqa.selenium.*; +import org.openqa.selenium.support.ui.WebDriverWait; +import selenium.TestBase; + +import java.time.Duration; +import java.util.Properties; + +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated; + +public class FindOwnersPage extends TestBase { + + public FindOwnersPage(WebDriver driver, Properties loc) { + TestBase.driver = driver; + TestBase.locators = loc; + } + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3)); + + By findOwnersPageLink = By.xpath(locators.getProperty("findOwnersLink")); + + By lastNameField = By.id(locators.getProperty("lastNameField")); + + By findOwnerButton = By.cssSelector(locators.getProperty("findOwnerButton")); + + By addOwnerButton = By.xpath(locators.getProperty("addOwnerButton")); + + By ownerNotFound = By.cssSelector(locators.getProperty("ownerNotFound")); + + public void navigateToFindOwnersPage() { + wait.until(visibilityOfElementLocated(findOwnersPageLink)); + driver.findElement(findOwnersPageLink).click(); + } + + public void setTextInLastNameField(String text) { + wait.until(visibilityOfElementLocated(lastNameField)); + driver.findElement(lastNameField).sendKeys(text); + } + + public void clickOnFindOwnerButton() { + driver.findElement(findOwnerButton).sendKeys(Keys.RETURN); + } + + public void clickOnAddOwnerButton() { + driver.findElement(addOwnerButton).click(); + wait.until(visibilityOfElementLocated(By.tagName("h2"))); + } + + public String getOwnerNotFoundText() { + try { + WebElement ownerNotFoundElement = driver.findElement(ownerNotFound); + return ownerNotFoundElement.getText(); + } + catch (NoSuchElementException e) { + return null; + } + } + +} diff --git a/src/test/java/selenium/pages/HomePage.java b/src/test/java/selenium/pages/HomePage.java new file mode 100644 index 00000000000..388e22cad16 --- /dev/null +++ b/src/test/java/selenium/pages/HomePage.java @@ -0,0 +1,42 @@ +package selenium.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.WebDriverWait; +import selenium.TestBase; + +import java.time.Duration; +import java.util.Properties; + +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated; + +public class HomePage extends TestBase { + + public HomePage(WebDriver driver, Properties loc) { + TestBase.driver = driver; + TestBase.locators = loc; + } + + By welcomePhoto = By.className(locators.getProperty("welcomePhoto")); + + By homePageLink = By.xpath(locators.getProperty("homePageLink")); + + By logoLink = By.xpath(locators.getProperty("logoLink")); + + public void clickOnHomePageLink() { + driver.findElement(homePageLink).click(); + } + + public boolean isWelcomePhotoVisible(String src) { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3)); + wait.until(visibilityOfElementLocated(welcomePhoto)); + WebElement welcomePicture = driver.findElement(welcomePhoto); + return welcomePicture.getAttribute("src").equals(src); + } + + public void clickOnLogoLink() { + driver.findElement(logoLink).click(); + } + +} diff --git a/src/test/java/selenium/pages/ListOwnersPage.java b/src/test/java/selenium/pages/ListOwnersPage.java new file mode 100644 index 00000000000..272b2ace789 --- /dev/null +++ b/src/test/java/selenium/pages/ListOwnersPage.java @@ -0,0 +1,61 @@ +package selenium.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.WebDriverWait; +import selenium.TestBase; + +import java.time.Duration; +import java.util.List; +import java.util.Properties; + +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOf; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +public class ListOwnersPage extends TestBase { + + public ListOwnersPage(WebDriver driver, Properties loc) { + TestBase.driver = driver; + TestBase.locators = loc; + } + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3)); + + By table = By.id(locators.getProperty("tableId")); + + WebElement tableElement = driver.findElement(table); + + List rows = tableElement.findElements(By.tagName("tr")); + + public void tableAppearance() { + wait.until(visibilityOf(tableElement)); + + assertTrue(tableElement.isDisplayed(), "Table is displayed"); + assertEquals(rows.size(), 6, "Expected 6 rows in the table"); + + String owner1 = tap.getProperty("Owner1"); + String owner2 = tap.getProperty("Owner2"); + + assertEquals(rows.get(1).getText(), owner1, "Incorrect data in row 1"); + assertEquals(rows.get(2).getText(), owner2, "Incorrect data in row 2"); + } + + public void clickOnNameFromTable() { + WebElement firstRow = rows.get(1); + List name = firstRow.findElements(By.tagName("td")); + WebElement firstName = name.get(0); + String firstNameText = firstName.getText(); + firstName.click(); + + WebElement ownerName = driver.findElement(By.xpath("(//td)[1]")); + String ownerNameText = ownerName.getText(); + assertEquals(ownerNameText, firstNameText); + } + + public void clickOnDifferentPage(String page) { + driver.findElement(By.xpath(page)).click(); + } + +} diff --git a/src/test/java/selenium/pages/OwnerPage.java b/src/test/java/selenium/pages/OwnerPage.java new file mode 100644 index 00000000000..6af6223f7a0 --- /dev/null +++ b/src/test/java/selenium/pages/OwnerPage.java @@ -0,0 +1,123 @@ +package selenium.pages; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.WebDriverWait; +import selenium.TestBase; + +import java.time.Duration; +import java.util.List; +import java.util.Properties; + +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOf; +import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated; + +public class OwnerPage extends TestBase { + + public OwnerPage(WebDriver driver, Properties loc) { + TestBase.driver = driver; + TestBase.locators = loc; + } + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3)); + + By editOwnerButton = By.xpath(locators.getProperty("editOwnerButton")); + + By addNewPetButton = By.xpath(locators.getProperty("addNewPetButton")); + + By editPetButton = By.xpath(locators.getProperty("editPetButton")); + + By addVisitButton = By.xpath(locators.getProperty("addVisitButton")); + + By nameLocator = By.xpath(locators.getProperty("nameLocator")); + + By successMessage = By.id(locators.getProperty("successMessageAlert")); + + By updateMessage = By.id(locators.getProperty("updateMessageAlert")); + + By newPetAddedMessage = By.id(locators.getProperty("newPetAddedMessageAlert")); + + By petDetailsClass = By.className(locators.getProperty("petDetails")); + + By petUpdateMessage = By.id(locators.getProperty("updateMessageAlert")); + + By visitAddedMessage = By.id(locators.getProperty("visitAddedMessage")); + + By visitDetailsClass = By.className(locators.getProperty("visitDetails")); + + public boolean isLastNameDisplayed(String lastName) { + WebElement element = driver.findElement(nameLocator); + return element.getText().contains(lastName); + } + + public boolean isSuccessMessageDisplayed() { + wait.until(visibilityOfElementLocated(successMessage)); + WebElement message = driver.findElement(successMessage); + String expectedSuccessMessage = tap.getProperty("successMessage"); + return message.getText().equals(expectedSuccessMessage); + } + + public void clickOnEditOwnerButton() { + driver.findElement(editOwnerButton).click(); + wait.until(visibilityOf(driver.findElement(By.tagName("h2")))); + } + + public boolean isUpdateMessageDisplayed() { + wait.until(visibilityOfElementLocated(updateMessage)); + WebElement message = driver.findElement(updateMessage); + String expectedUpdateMessage = tap.getProperty("updateMessage"); + return message.getText().equals(expectedUpdateMessage); + } + + public void clickOnAddNewPetButton() { + driver.findElement(addNewPetButton).click(); + wait.until(visibilityOf(driver.findElement(By.tagName("h2")))); + } + + public boolean isPetAddedSuccessMessageDisplayed() { + wait.until(visibilityOfElementLocated(newPetAddedMessage)); + WebElement message = driver.findElement(newPetAddedMessage); + String expectedMessage = tap.getProperty("newPetAddedMessage"); + return message.getText().equals(expectedMessage); + } + + public boolean isPetNameDisplayed(String petName) { + WebElement petDetails = driver.findElement(petDetailsClass); + String petDetailsText = petDetails.getText(); + String expectedPetName = input.getProperty(petName); + return petDetailsText.contains(expectedPetName); + } + + public void clickOnEditPetButton() { + List editButtons = driver.findElements(editPetButton); + if (!editButtons.isEmpty()) { + editButtons.get(0).click(); + } + } + + public boolean isUpdatePetMessageDisplayed() { + wait.until(visibilityOfElementLocated(petUpdateMessage)); + WebElement message = driver.findElement(petUpdateMessage); + String expectedUpdateMessage = tap.getProperty("petUpdateMessage"); + return message.getText().equals(expectedUpdateMessage); + } + + public void clickOnAddVisitButton() { + driver.findElement(addVisitButton).click(); + } + + public boolean isVisitAddedMessageDisplayed() { + wait.until(visibilityOfElementLocated(visitAddedMessage)); + WebElement message = driver.findElement(visitAddedMessage); + String expectedUpdateMessage = tap.getProperty("visitAddedMessage"); + return message.getText().equals(expectedUpdateMessage); + } + + public boolean isVisitAdded(String description) { + WebElement visitDetails = driver.findElement(visitDetailsClass); + String expectedDescription = input.getProperty(description); + return visitDetails.getText().contains(expectedDescription); + } + +} diff --git a/src/test/java/selenium/scenarios/TS01FindOwnersTest.java b/src/test/java/selenium/scenarios/TS01FindOwnersTest.java new file mode 100644 index 00000000000..19080f019ab --- /dev/null +++ b/src/test/java/selenium/scenarios/TS01FindOwnersTest.java @@ -0,0 +1,128 @@ +package selenium.scenarios; + +import jdk.jfr.Description; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import selenium.TestBase; +import selenium.pages.AddOwnerPage; +import selenium.pages.FindOwnersPage; +import selenium.pages.ListOwnersPage; +import selenium.pages.OwnerPage; + +import java.util.List; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +public class TS01FindOwnersTest extends TestBase { + + private OwnerPage ownerPage; + + private FindOwnersPage findOwnersPage; + + @BeforeMethod + public void setObjects() { + ownerPage = new OwnerPage(driver, locators); + findOwnersPage = new FindOwnersPage(driver, locators); + } + + private void setupFindOwnersPage(String lastName) { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.setTextInLastNameField(lastName); + findOwnersPage.clickOnFindOwnerButton(); + } + + @Test + @Description("Validate if the correct owner is displayed after searching by an existing last name") + public void testFindOwnerByExistingLastName() { + setupFindOwnersPage(input.getProperty("existingLastName")); + + assertTrue(ownerPage.isLastNameDisplayed(input.getProperty("existingLastName")), + "The last name should be displayed on the Owner page"); + } + + @Test(priority = 1) + @Description("Validate if an owner is displayed after searching by an existing first name") + public void testFindOwnerByExistingFirstName() { + setupFindOwnersPage(input.getProperty("existingFirstName")); + + String ownerNotFoundText = findOwnersPage.getOwnerNotFoundText(); + String expectedText = tap.getProperty("ownerNotFoundText"); + assertEquals(ownerNotFoundText, expectedText, "Expected text has been displayed"); + } + + @Test(priority = 2) + @Description("Validate if an owner is displayed after searching for a non-existing last name") + public void testFindOwnerByNonExistingLastName() { + setupFindOwnersPage(input.getProperty("nonExistingLastName")); + + String ownerNotFoundText = findOwnersPage.getOwnerNotFoundText(); + String expectedText = tap.getProperty("ownerNotFoundText"); + assertEquals(ownerNotFoundText, expectedText, "Expected text has been displayed"); + } + + @Test(priority = 3) + @Description("Validate case sensitivity after searching by an existing last name") + public void testCaseSensitiveLastName() { + setupFindOwnersPage(input.getProperty("caseSensitiveLastName")); + + assertTrue(ownerPage.isLastNameDisplayed(input.getProperty("existingLastName")), + "The last name should be displayed on the Owner page"); + } + + @Test(priority = 4) + @Description("Validate if all owners are displayed after clicking the 'Find Owner' button " + + "without filling the 'Last name' field") + public void testEmptyLastNameField() { + setupFindOwnersPage(""); + + ListOwnersPage listOwnersPage = new ListOwnersPage(driver, locators); + listOwnersPage.tableAppearance(); + } + + @Test(priority = 5) + @Description("Validate if you can navigate to the Owner page after clicking on a name from the table") + public void testNavigateToOwnerPageFromTable() { + setupFindOwnersPage(""); + + ListOwnersPage listOwnersPage = new ListOwnersPage(driver, locators); + listOwnersPage.clickOnNameFromTable(); + } + + @Test(priority = 6) + @Description("Validate finding a newly added owner") + public void testFindNewlyAddedOwner() { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnAddOwnerButton(); + + String firstName = input.getProperty("firstName"); + String lastName = input.getProperty("lastName"); + String address = input.getProperty("address"); + String city = input.getProperty("city"); + String telephone = input.getProperty("telephone"); + + AddOwnerPage addOwnerPage = new AddOwnerPage(driver, locators); + addOwnerPage.setTextInFields(firstName, lastName, address, city, telephone); + addOwnerPage.clickingOnAddOwnerButton(); + + assertTrue(ownerPage.isSuccessMessageDisplayed()); + assertTrue(ownerPage.isLastNameDisplayed(lastName)); + + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnFindOwnerButton(); + ListOwnersPage listOwnersPage = new ListOwnersPage(driver, locators); + listOwnersPage.clickOnDifferentPage(locators.getProperty("thirdPage")); + + List cells = driver.findElements(By.xpath("(//td)")); + + cells.stream() + .filter(cell -> cell.getText().equals(firstName + " " + lastName)) + .findFirst() + .ifPresent(WebElement::click); + + assertTrue(ownerPage.isLastNameDisplayed(lastName)); + } + +} diff --git a/src/test/java/selenium/scenarios/TS02AddOwnerTest.java b/src/test/java/selenium/scenarios/TS02AddOwnerTest.java new file mode 100644 index 00000000000..df910859578 --- /dev/null +++ b/src/test/java/selenium/scenarios/TS02AddOwnerTest.java @@ -0,0 +1,161 @@ +package selenium.scenarios; + +import jdk.jfr.Description; +import org.jetbrains.annotations.NotNull; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import selenium.TestBase; +import selenium.pages.AddOwnerPage; +import selenium.pages.FindOwnersPage; +import selenium.pages.ListOwnersPage; +import selenium.pages.OwnerPage; + +import static org.testng.AssertJUnit.*; + +public class TS02AddOwnerTest extends TestBase { + + private AddOwnerPage addOwnerPage; + + private OwnerPage ownerPage; + + private FindOwnersPage findOwnersPage; + + @BeforeMethod + public void setObjects() { + addOwnerPage = new AddOwnerPage(driver, locators); + ownerPage = new OwnerPage(driver, locators); + findOwnersPage = new FindOwnersPage(driver, locators); + } + + public void navigateToAddOwner() { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnAddOwnerButton(); + } + + public void addOrEditAnOwner(@NotNull String action, String firstName, String lastName, String address, String city, + String telephone) { + String firstNameText = input.getProperty(firstName); + String lastNameText = input.getProperty(lastName); + String addressText = input.getProperty(address); + String cityText = input.getProperty(city); + String telephoneText = input.getProperty(telephone); + + addOwnerPage.setTextInFields(firstNameText, lastNameText, addressText, cityText, telephoneText); + if (action.equalsIgnoreCase("add")) { + addOwnerPage.clickingOnAddOwnerButton(); + } + else if (action.equalsIgnoreCase("update")) { + addOwnerPage.clickOnUpdateOwnerButton(); + } + } + + @Test + @Description("Validate successfully adding an owner") + public void testAddingAnOwner() { + navigateToAddOwner(); + addOrEditAnOwner("add", "firstName", "lastName", "address", "city", "telephone"); + + assertTrue(ownerPage.isSuccessMessageDisplayed()); + assertTrue(ownerPage.isLastNameDisplayed(input.getProperty("lastName"))); + } + + @Test(priority = 1) + @Description("Validate adding an owner without filling any of the fields") + public void testEmptyFields() { + navigateToAddOwner(); + addOwnerPage.clickingOnAddOwnerButton(); + + String expectedErrorMessage = tap.getProperty("errorMessage"); + assertTrue(addOwnerPage.isErrorMessageDisplayedForEmptyFields(expectedErrorMessage)); + } + + // User is still created - REPORT DEFECT!!! + @Test(priority = 2) + @Description("Validate if an owner is added after putting numbers in the name fields") + public void testNumbersInNameFields() { + navigateToAddOwner(); + + addOrEditAnOwner("add", "numbersInFirstName", "numbersInLastName", "address", "city", "telephone"); + + assertFalse("Message should not be visible", ownerPage.isSuccessMessageDisplayed()); + } + + // You can add the same owner twice - REPORT DEFECT!!! + @Test(priority = 3) + @Description("Validate if you can add the same owner twice") + public void testCreateSameOwnerTwice() { + navigateToAddOwner(); + + addOrEditAnOwner("add", "firstName2", "lastName2", "address2", "city2", "telephone2"); + + driver.navigate().back(); + addOwnerPage.clickingOnAddOwnerButton(); + assertFalse("Message should not be visible", ownerPage.isSuccessMessageDisplayed()); + } + + @Test(priority = 4) + @Description("Validate if an owner is added after putting text in the 'Telephone' field") + public void testTextInTelephoneField() { + navigateToAddOwner(); + + addOrEditAnOwner("add", "firstName", "lastName", "address", "city", "textInTelephoneField"); + + String expectedErrorMessage = tap.getProperty("errorMessageTelephoneField"); + assertTrue("Error message should be displayed for invalid telephone number", + addOwnerPage.isErrorMessageDisplayedForTextInTelephoneField(expectedErrorMessage)); + } + + @Test(priority = 5) + @Description("Validate updating an owner") + public void testUpdateOwner() { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnFindOwnerButton(); + + ListOwnersPage listOwnersPage = new ListOwnersPage(driver, locators); + listOwnersPage.clickOnNameFromTable(); + + ownerPage.clickOnEditOwnerButton(); + addOwnerPage.clearFields(); + + addOrEditAnOwner("update", "updateFirstName", "updateLastName", "updateAddress", "updateCity", + "updateTelephone"); + + assertTrue(ownerPage.isUpdateMessageDisplayed()); + assertTrue(ownerPage.isLastNameDisplayed(input.getProperty("updateLastName"))); + } + + // User can still be updated - REPORT DEFECT!!! + @Test(priority = 6) + @Description("Validate updating an owner with the details of an already existing owner") + public void testUpdateOwnerWithExistingDetails() { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnFindOwnerButton(); + + ListOwnersPage listOwnersPage = new ListOwnersPage(driver, locators); + listOwnersPage.clickOnNameFromTable(); + + ownerPage.clickOnEditOwnerButton(); + addOwnerPage.clearFields(); + + addOrEditAnOwner("update", "firstName", "lastName", "address", "city", "telephone"); + + assertFalse("Error message is not displayed", ownerPage.isUpdateMessageDisplayed()); + } + + @Test(priority = 7) + @Description("Validate if a newly added owner can be updated") + public void testUpdateNewlyAddedOwner() { + navigateToAddOwner(); + addOrEditAnOwner("add", "firstName3", "lastName3", "address3", "city3", "telephone3"); + + ownerPage.clickOnEditOwnerButton(); + addOwnerPage.clearFields(); + + addOrEditAnOwner("update", "updateFirstName2", "updateLastName2", "updateAddress2", "updateCity2", + "updateTelephone2"); + + assertTrue(ownerPage.isUpdateMessageDisplayed()); + assertTrue(ownerPage.isLastNameDisplayed(input.getProperty("updateLastName2"))); + } + +} diff --git a/src/test/java/selenium/scenarios/TS03AddPetTest.java b/src/test/java/selenium/scenarios/TS03AddPetTest.java new file mode 100644 index 00000000000..977ee46ddd2 --- /dev/null +++ b/src/test/java/selenium/scenarios/TS03AddPetTest.java @@ -0,0 +1,141 @@ +package selenium.scenarios; + +import jdk.jfr.Description; +import org.jetbrains.annotations.NotNull; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import selenium.TestBase; +import selenium.pages.*; + +import static org.testng.AssertJUnit.*; + +public class TS03AddPetTest extends TestBase { + + private AddOwnerPage addOwnerPage; + + private OwnerPage ownerPage; + + private FindOwnersPage findOwnersPage; + + private AddPetPage addPetPage; + + @BeforeMethod + public void setObjects() { + addOwnerPage = new AddOwnerPage(driver, locators); + ownerPage = new OwnerPage(driver, locators); + findOwnersPage = new FindOwnersPage(driver, locators); + addPetPage = new AddPetPage(driver, locators); + } + + public void addOrEditPet(@NotNull String action, String petName, String birthDate, String petType) { + String petNameText = input.getProperty(petName); + String petBirthDateText = input.getProperty(birthDate); + String petTypeOption = input.getProperty(petType); + + addPetPage.fillTheFields(petNameText, petBirthDateText, petTypeOption); + if (action.equalsIgnoreCase("add")) { + addPetPage.clickOnAddPetButton(); + } + else if (action.equalsIgnoreCase("update")) { + addPetPage.clickOnUpdatePetButton(); + } + } + + public void navigateToAddPetForExistingOwner() { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnFindOwnerButton(); + + ListOwnersPage listOwnersPage = new ListOwnersPage(driver, locators); + listOwnersPage.clickOnNameFromTable(); + ownerPage.clickOnAddNewPetButton(); + } + + @Test + @Description("Validate adding a pet to a newly added owner") + public void testAddPetToNewlyAddedOwner() { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnAddOwnerButton(); + + String firstName = input.getProperty("firstName"); + String lastName = input.getProperty("lastName"); + String address = input.getProperty("address"); + String city = input.getProperty("city"); + String telephone = input.getProperty("telephone"); + addOwnerPage.setTextInFields(firstName, lastName, address, city, telephone); + addOwnerPage.clickingOnAddOwnerButton(); + + ownerPage.clickOnAddNewPetButton(); + + addOrEditPet("add", "petName", "birthDate", "petType"); + assertTrue(ownerPage.isPetAddedSuccessMessageDisplayed()); + assertTrue(ownerPage.isPetNameDisplayed("petName")); + } + + @Test(priority = 1) + @Description("Validate adding a new pet to an already existing owner") + public void testAddPetToExistingOwner() { + navigateToAddPetForExistingOwner(); + + addOrEditPet("add", "petName2", "birthDate2", "petType2"); + assertTrue(ownerPage.isPetAddedSuccessMessageDisplayed()); + assertTrue(ownerPage.isPetNameDisplayed("petName2")); + } + + @Test(priority = 2) + @Description("Validate adding the same pet twice") + public void testAddingSamePetTwice() { + navigateToAddPetForExistingOwner(); + + addOrEditPet("add", "petName3", "birthDate3", "petType3"); + driver.navigate().back(); + addPetPage.clickOnAddPetButton(); + + assertTrue(addPetPage.isErrorMessageDisplayedForSamePetName()); + } + + @Test(priority = 3) + @Description("Validate adding a pet without filling any of the fields") + public void testAddPetWithEmptyFields() { + navigateToAddPetForExistingOwner(); + + addPetPage.clickOnAddPetButton(); + String expectedErrorMessage = tap.getProperty("emptyPetFieldsErrorMessage"); + assertTrue(addPetPage.isErrorMessageDisplayedForEmptyFields(expectedErrorMessage)); + } + + @Test(priority = 4) + @Description("Validate adding a pet with a future birth date") + public void testAddPetWithFutureBirthDate() { + navigateToAddPetForExistingOwner(); + + addOrEditPet("add", "petName4", "futureBirthDate", "petType4"); + assertTrue(addPetPage.isInvalidDateErrorMessageDisplayed()); + } + + // Pet is still added after putting numbers in 'Name' field - REPORT DEFECT!!! + @Test(priority = 5) + @Description("Validate adding numbers in the 'Name' field") + public void testAddNumbersInNameField() { + navigateToAddPetForExistingOwner(); + + addOrEditPet("add", "numberPetName", "birthDate5", "petType5"); + assertFalse(ownerPage.isPetAddedSuccessMessageDisplayed()); + } + + @Test(priority = 6) + @Description("Validate updating a pet") + public void testUpdatePet() { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnFindOwnerButton(); + + ListOwnersPage listOwnersPage = new ListOwnersPage(driver, locators); + listOwnersPage.clickOnNameFromTable(); + ownerPage.clickOnEditPetButton(); + addPetPage.clearFields(); + + addOrEditPet("update", "petName", "birthDate", "petType"); + assertTrue(ownerPage.isUpdatePetMessageDisplayed()); + assertTrue(ownerPage.isPetNameDisplayed("petName")); + } + +} diff --git a/src/test/java/selenium/scenarios/TS04AddVisitTest.java b/src/test/java/selenium/scenarios/TS04AddVisitTest.java new file mode 100644 index 00000000000..a52d480d45f --- /dev/null +++ b/src/test/java/selenium/scenarios/TS04AddVisitTest.java @@ -0,0 +1,76 @@ +package selenium.scenarios; + +import jdk.jfr.Description; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import selenium.TestBase; +import selenium.pages.*; + +import static org.testng.AssertJUnit.assertTrue; + +public class TS04AddVisitTest extends TestBase { + + private OwnerPage ownerPage; + + private FindOwnersPage findOwnersPage; + + private AddVisitPage addVisitPage; + + @BeforeMethod + public void setObjects() { + ownerPage = new OwnerPage(driver, locators); + findOwnersPage = new FindOwnersPage(driver, locators); + addVisitPage = new AddVisitPage(driver, locators); + } + + public void addVisit(String date, String description) { + String dateText = input.getProperty(date); + String descriptionText = input.getProperty(description); + addVisitPage.fillTheFields(dateText, descriptionText); + addVisitPage.clickOnAddVisitButton(); + } + + public void navigateToVisitPage() { + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnFindOwnerButton(); + + findOwnersPage.navigateToFindOwnersPage(); + findOwnersPage.clickOnFindOwnerButton(); + + ListOwnersPage listOwnersPage = new ListOwnersPage(driver, locators); + listOwnersPage.clickOnNameFromTable(); + ownerPage.clickOnAddVisitButton(); + } + + // Spelling mistake in success message - Report + @Test + @Description("Validate adding a visit for a pet") + public void testAddVisitForPet() { + navigateToVisitPage(); + + addVisit("date", "description"); + assertTrue(ownerPage.isVisitAddedMessageDisplayed()); + assertTrue(ownerPage.isVisitAdded("description")); + } + + @Test(priority = 1) + @Description("Validate adding a visit without filling any of the fields") + public void testVisitEmptyFields() { + navigateToVisitPage(); + + addVisitPage.clickOnAddVisitButton(); + String expectedErrorMessage = tap.getProperty("emptyFieldInAddVisit"); + assertTrue(addVisitPage.isErrorMessageDisplayedForEmptyField(expectedErrorMessage)); + } + + @Test(priority = 2) + @Description("Validate adding a visit with an invalid date") + public void testInvalidDate() { + navigateToVisitPage(); + + addVisit("invalidDate", "description"); + String expectedErrorMessage = tap.getProperty("invalidDateInAddVisit"); + assertTrue(addVisitPage.isErrorMessageDisplayedForInvalidDate(expectedErrorMessage)); + } + +} diff --git a/src/test/java/selenium/scenarios/TS05HomePageTest.java b/src/test/java/selenium/scenarios/TS05HomePageTest.java new file mode 100644 index 00000000000..ab95a19025a --- /dev/null +++ b/src/test/java/selenium/scenarios/TS05HomePageTest.java @@ -0,0 +1,47 @@ +package selenium.scenarios; + +import org.springframework.context.annotation.Description; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import selenium.TestBase; +import selenium.pages.FindOwnersPage; +import selenium.pages.HomePage; + +import static org.testng.AssertJUnit.assertTrue; + +public class TS05HomePageTest extends TestBase { + + private HomePage homePage; + + private FindOwnersPage findOwnersPage; + + @BeforeMethod + public void setObjects() { + homePage = new HomePage(driver, locators); + findOwnersPage = new FindOwnersPage(driver, locators); + } + + public void checkForCorrectWelcomePhoto() { + String expectedPhotoSrc = tap.getProperty("welcomePhoto"); + assertTrue(homePage.isWelcomePhotoVisible(expectedPhotoSrc)); + } + + @Test + @Description("Validate if you can navigate to home page by clicking on the 'Home' header") + public void testNavigateHomeFromHeader() { + findOwnersPage.navigateToFindOwnersPage(); + + homePage.clickOnHomePageLink(); + checkForCorrectWelcomePhoto(); + } + + @Test(priority = 1) + @Description("Validate if you can navigate to home by page by clicking on the logo of the application") + public void navigateHomeFromLogo() { + findOwnersPage.navigateToFindOwnersPage(); + + homePage.clickOnLogoLink(); + checkForCorrectWelcomePhoto(); + } + +} diff --git a/testng.xml b/testng.xml new file mode 100644 index 00000000000..03cb8aa9cd6 --- /dev/null +++ b/testng.xml @@ -0,0 +1,9 @@ + + + + + + + + +