diff --git a/.github/workflows/smoke_tests.yml b/.github/workflows/smoke_tests.yml index 2efb871..2c5f26a 100644 --- a/.github/workflows/smoke_tests.yml +++ b/.github/workflows/smoke_tests.yml @@ -30,7 +30,7 @@ jobs: sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & # optional - name: Run tests - run: mvn test -Dtest=RunCucumberTest -Dbrowser=chrome-headless -Dcucumber.filter.tags="@login-success" + run: mvn test -Dtest=RunCucumberTest -Dbrowser=chrome-headless -Dcucumber.filter.tags="@signup-success" - name: Generate reports if: always() diff --git a/pom.xml b/pom.xml index 1798657..ac7fe26 100644 --- a/pom.xml +++ b/pom.xml @@ -133,6 +133,14 @@ cluecumber-report-plugin ${trivago.version} + + + + com.github.javafaker + javafaker + 1.0.2 + + diff --git a/src/test/java/pages/CreateAccountPage.java b/src/test/java/pages/CreateAccountPage.java index 0660eda..9c4645e 100644 --- a/src/test/java/pages/CreateAccountPage.java +++ b/src/test/java/pages/CreateAccountPage.java @@ -5,13 +5,12 @@ import org.openqa.selenium.support.ui.Select; import runner.RunBase; import static support.Commands.*; -import static support.UserDataUtils.*; import static pages.LoginSignupPage.*; +import static support.FakeDataAPI.*; public class CreateAccountPage extends RunBase { //region constants - public static final String URL = "https://automationexercise.com/login"; private final By TITLE_MR_FIELD = By.id("id_gender1"); private final By TITLE_MRS_FIELD = By.id("id_gender2"); private static final By PASSWORD_FIELD = By.id("password"); @@ -24,7 +23,6 @@ public class CreateAccountPage extends RunBase { private final By LAST_NAME_FIELD = By.id("last_name"); private final By COMPANY_FIELD = By.id("company"); private final By ADDRESS1_FIELD = By.id("address1"); - private final By ADDRESS2_FIELD = By.id("address2"); private final By COUNTRY_FIELD = By.id("country"); private final By STATE_FIELD = By.id("state"); private final By CITY_FIELD = By.id("city"); @@ -35,7 +33,7 @@ public class CreateAccountPage extends RunBase { private final By NAME_ACTUAL = By.id("name"); private final String EMAIL_EXPECTED = storeEmail(); private final By EMAIL_ACTUAL = By.id("email"); - public static final String GET_PASSWORD = getRandomPassword(); + public static final String GET_PASSWORD = getPassword(); //endregion public void pageCheck() { @@ -43,6 +41,9 @@ public void pageCheck() { } public void checkUserName() { + System.out.println("##########################"); + System.out.println("WILL VERIFY IF THE NAME IS CORRECT"); + System.out.println(NAME_EXPECTED); checkElementIsCorrect(NAME_ACTUAL, NAME_EXPECTED); } @@ -98,15 +99,11 @@ public void addLastName() { } public void addCompanyName() { - fillField(COMPANY_FIELD, "Test Company INC."); + fillField(COMPANY_FIELD, getCompanyName()); } public void addAddress1() { - fillField(ADDRESS1_FIELD, "Test St. 980 NY"); - } - - public void addAddress2() { - fillField(ADDRESS2_FIELD, "Test neighborhood"); + fillField(ADDRESS1_FIELD, getAddress()); } public void addCountry() { @@ -116,22 +113,21 @@ public void addCountry() { } public void addState() { - fillField(STATE_FIELD, "Test State"); + fillField(STATE_FIELD, getState()); } public void addCity() { - fillField(CITY_FIELD, "Testown"); + fillField(CITY_FIELD, getCity()); } public void addZipcode() { - fillField(ZIPCODE_FIELD, getRandomNumber(5)); + fillField(ZIPCODE_FIELD, getZipCode()); } public void addMobileNumber() { - fillField(MOBILE_NUMBER_FIELD, getRandomNumber(10)); + fillField(MOBILE_NUMBER_FIELD, getPhoneNumber()); } - public void clickCreateButton() { clickButton(CREATE_ACCOUNT_BUTTON); } @@ -148,7 +144,6 @@ public void addUserData() { addLastName(); addCompanyName(); addAddress1(); - addAddress2(); addCountry(); addState(); addCity(); diff --git a/src/test/java/pages/HomePage.java b/src/test/java/pages/HomePage.java index 9988c69..73fd5db 100644 --- a/src/test/java/pages/HomePage.java +++ b/src/test/java/pages/HomePage.java @@ -9,18 +9,16 @@ public class HomePage extends RunBase { //region constants public static final String URL = "https://automationexercise.com/"; + private static final By HOME_PAGE_BUTTON = By.xpath("//*[@id=\"header\"]/div/div/div/div[2]/div/ul/li[1]/a"); private static final By LOGIN_SIGNUP_BUTTON = By.xpath("//*[@id=\"header\"]/div/div/div/div[2]/div/ul/li[4]/a"); private static final String HOME_PAGE_TEXT_EXPECTED = "FEATURES ITEMS"; private static final By HOME_PAGE_TEXT_ACTUAL = By.xpath("/html/body/section[2]/div/div/div[2]/div[1]/h2"); - public final By LOGOUT_BUTTON = By.xpath("//*[@id=\"header\"]/div/div/div/div[2]/div/ul/li[4]/a"); + public static final By LOGOUT_BUTTON = By.xpath("//*[@id=\"header\"]/div/div/div/div[2]/div/ul/li[4]/a"); private static final By NAME_ACTUAL = By.xpath("//*[@id=\"header\"]/div/div/div/div[2]/div/ul/li[10]/a/b"); private static final String NAME_EXPECTED = storeFullName(); - private static final By IFRAME = By.cssSelector("#aswift_1"); - private static final By IFRAME_DISMISS = By.cssSelector("#dismiss-button"); private static final String ACCOUNT_CREATED_TEXT_EXPECTED = "ACCOUNT CREATED!"; private static final By ACCOUNT_CREATED_TEXT_ACTUAL = By.xpath("//*[@id=\"form\"]/div/div/div/h2/b"); private final By USER_IS_LOGGED = By.xpath("//*[@id=\"header\"]/div/div/div/div[2]/div/ul/li[10]/a"); - private static final By CONTINUE_BUTTON = By.xpath("//*[@id=\"form\"]/div/div/div/div/a"); //endregion public static void openPage() { @@ -36,15 +34,22 @@ public static void clickSignupLoginButton() { clickButton(LOGIN_SIGNUP_BUTTON); } - public void clickLogoutButton() { + public static void clickLogoutButton() { clickButton(LOGOUT_BUTTON); } public static void accountCreatedConfirmation() { + System.out.println("##########################"); + System.out.println("WILL VERIFY THE SIGNUP"); checkElementIsCorrect(ACCOUNT_CREATED_TEXT_ACTUAL, ACCOUNT_CREATED_TEXT_EXPECTED); - clickButton(CONTINUE_BUTTON); - dismissIFrame(IFRAME, IFRAME_DISMISS); + //clickButton(CONTINUE_BUTTON); + //dismissIFrame(IFRAME, IFRAME_DISMISS); + clickButton(HOME_PAGE_BUTTON); + checkElementIsCorrect(NAME_ACTUAL, NAME_EXPECTED); + clickLogoutButton(); + clickSignupLoginButton(); + checkNewUserLogin(); checkElementIsCorrect(NAME_ACTUAL, NAME_EXPECTED); } diff --git a/src/test/java/pages/LoginSignupPage.java b/src/test/java/pages/LoginSignupPage.java index 58bffb8..8993c27 100644 --- a/src/test/java/pages/LoginSignupPage.java +++ b/src/test/java/pages/LoginSignupPage.java @@ -3,15 +3,15 @@ import org.openqa.selenium.By; import runner.RunBase; import static support.Commands.*; -import static support.UserDataUtils.*; +import static support.FakeDataAPI.*; import static pages.CreateAccountPage.*; public class LoginSignupPage extends RunBase { //region constants public static final String URL = "https://automationexercise.com/login"; - private final By LOGIN_EMAIL_FIELD = By.xpath("//*[@id=\"form\"]/div/div/div[1]/div/form/input[2]"); - private final By PASSWORD_FIELD = By.xpath("//*[@id=\"form\"]/div/div/div[1]/div/form/input[3]"); + private static final By LOGIN_EMAIL_FIELD = By.xpath("//*[@id=\"form\"]/div/div/div[1]/div/form/input[2]"); + private static final By PASSWORD_FIELD = By.xpath("//*[@id=\"form\"]/div/div/div[1]/div/form/input[3]"); private static final By LOGIN_BUTTON = By.xpath("//*[@id=\"form\"]/div/div/div[1]/div/form/button"); private final By ERROR_MESSAGE = By.xpath("//*[@id=\"form\"]/div/div/div[1]/div/form/p"); private static final By NAME_FIELD = By.xpath("//*[@id=\"form\"]/div/div/div[3]/div/form/input[2]"); @@ -19,10 +19,10 @@ public class LoginSignupPage extends RunBase { private static final By SIGNUP_BUTTON = By.xpath("//*[@id=\"form\"]/div/div/div[3]/div/form/button"); private static final By ERROR_ACTUAL = By.xpath("//*[@id=\"form\"]/div/div/div[3]/div/form/p"); private static final String ERROR_EXPECTED = "Email Address already exist!"; - public static final String GET_FIRST_NAME = getRandomName.firstName(); - public static final String GET_LAST_NAME = getRandomName.lastName(); - public static final String GET_EMAIL = getRandomEmail(); - public final String GET_PASSWORD = storePassword(); + public static final String GET_FIRST_NAME = getFirstName(); + public static final String GET_LAST_NAME = getLastName(); + public static final String GET_EMAIL = getEmail(); + public static final String GET_NEW_USER_PASSWORD = storePassword(); //endregion public static void pageCheck() { @@ -66,10 +66,11 @@ public static String storeLastName() { } public static String storeFullName() { - return storeFirstName() + storeLastName(); + return storeFirstName() + " " + storeLastName(); } public static void addName() { + System.out.println("THE NAME ADDED WAS: " + storeFullName()); fillField(NAME_FIELD, storeFullName()); } @@ -78,6 +79,7 @@ public static String storeEmail() { } public static void addSignupEmail() { + System.out.println("THE EMAIL ADDED WAS: " + storeEmail()); fillField(SIGNUP_EMAIL_FIELD, storeEmail()); } @@ -93,4 +95,10 @@ public void errorMessageSignup() { checkElementIsCorrect(ERROR_ACTUAL, ERROR_EXPECTED); } + public static void checkNewUserLogin (){ + fillField(LOGIN_EMAIL_FIELD, storeEmail()); + fillField(PASSWORD_FIELD, GET_NEW_USER_PASSWORD); + clickButton(LOGIN_BUTTON); + } + } diff --git a/src/test/java/runner/RunCucumberTest.java b/src/test/java/runner/RunCucumberTest.java index 0d5b88c..1a4404b 100644 --- a/src/test/java/runner/RunCucumberTest.java +++ b/src/test/java/runner/RunCucumberTest.java @@ -9,7 +9,7 @@ @CucumberOptions( plugin = {"html:target/formated-report/report.html", "json:target/formated-report/report.json"}, features = "src/test/resources/features", - //tags = "@login", + //tags = "@signup-success", glue = {"steps"} ) diff --git a/src/test/java/steps/LogoutSteps.java b/src/test/java/steps/LogoutSteps.java index bdf039c..98e39c4 100644 --- a/src/test/java/steps/LogoutSteps.java +++ b/src/test/java/steps/LogoutSteps.java @@ -12,7 +12,6 @@ public class LogoutSteps extends RunCucumberTest { LoginSignupPage loginSignupPage = new LoginSignupPage(); - HomePage homePage = new HomePage(); @Given("the user is logged in to the website") public void userLogged(){ @@ -21,7 +20,7 @@ public void userLogged(){ @When ("the user clicks on the Logout button") public void logoutButton(){ - homePage.clickLogoutButton(); + HomePage.clickLogoutButton(); } @Then("the user successfully logout from their account") diff --git a/src/test/java/steps/SignupSteps.java b/src/test/java/steps/SignupSteps.java index babb1a3..0239abb 100644 --- a/src/test/java/steps/SignupSteps.java +++ b/src/test/java/steps/SignupSteps.java @@ -19,7 +19,6 @@ public void signupData() { LoginSignupPage.addSignupEmail(); } - @And("clicks the signup button") public void signupButton() { LoginSignupPage.clickSignupButton(); @@ -43,7 +42,6 @@ public void createAccountButton() { createAccountPage.clickCreateButton(); } - @Then("the user sees a signup confirmation message") public void confirmationMessage() { HomePage.accountCreatedConfirmation(); diff --git a/src/test/java/support/Commands.java b/src/test/java/support/Commands.java index d283843..2e46ac9 100644 --- a/src/test/java/support/Commands.java +++ b/src/test/java/support/Commands.java @@ -1,5 +1,6 @@ package support; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.Assert; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; @@ -7,6 +8,7 @@ import org.openqa.selenium.support.ui.WebDriverWait; import runner.RunCucumberTest; import java.time.Duration; +import java.util.Random; public class Commands extends RunCucumberTest { @@ -42,6 +44,7 @@ public static void fillField(By element, String value) { System.out.println("##########################"); System.out.println("Will fill a field with a value"); try { + waitElement(element); getDriver().findElement(element).sendKeys(value); } catch (Exception error) { @@ -60,46 +63,54 @@ public static void enterWebPage(String URL) { } /*---------*/ + public static String getRandomNumber(int numberOfDigits){ + return RandomStringUtils.randomNumeric(numberOfDigits); + } + + public static int getRandomNumber(int minValue, int maxValue){ + Random random = new Random(); + + return random.nextInt(maxValue - minValue) + minValue; + } + public static void selectOption(By element1, By element2){ System.out.println("##########################"); System.out.println("Will select an option"); - String option = String.valueOf(UserDataUtils.getRandomNumber(1, 2)); + String option = String.valueOf(getRandomNumber(1, 2)); System.out.println("Selected option " + option); switch (option) { case "1": clickButton(element1); - //String selected1 = element1.toString(); break; case "2": clickButton(element2); - //String selected2 = element2.toString(); break; default: System.out.println("**** Element not found"); } } - /*---------*/ + /* public static void dismissIFrame(By element1, By element2){ System.out.println("##########################"); System.out.println("Will try to locate and dismiss add"); try { - waitElement(element1); + waitLonger(60); getDriver().switchTo().frame(getDriver().findElement(element1)); - waitElement(element2); + waitLonger(30); getDriver().findElement(element2).click(); getDriver().switchTo().defaultContent(); } catch (Exception error) { System.out.println("**** Add was not displayed"); } } + */ /*---------*/ public static void checkElementIsCorrect(By elementActual, String valueExpected) { try { waitElement(elementActual); WebElement element = getDriver().findElement(elementActual); - if (element.getAttribute("value") != null) { // Method 1: Element with a "value" attribute. Ex.: Filled forms String valueActual = element.getAttribute("value"); diff --git a/src/test/java/support/FakeDataAPI.java b/src/test/java/support/FakeDataAPI.java new file mode 100644 index 0000000..72db8a8 --- /dev/null +++ b/src/test/java/support/FakeDataAPI.java @@ -0,0 +1,57 @@ +package support; + +import com.github.javafaker.Faker; +import runner.RunCucumberTest; + +public class FakeDataAPI extends RunCucumberTest { + + + public static Faker api (){ + return new Faker(); + } + + public static String getFirstName (){ + String name = api().name().firstName(); + System.out.println("THE GENERATED FIRST NAME WAS " + name); + return name; + } + + public static String getLastName (){ + String name = api().name().lastName(); + System.out.println("THE GENERATED LAST NAME WAS " + name); + return name; + } + + public static String getEmail (){ + String email = api().internet().emailAddress(); + System.out.println(email); + return email; + } + + public static String getPassword (){ + String password = api().internet().password(); + System.out.println(password); + return password; + } + + public static String getCompanyName (){ + return api().company().name(); + } + public static String getAddress (){ + return api().address().streetAddress(); + } + public static String getState (){ + return api().address().state(); + } + public static String getCity (){ + return api().address().city(); + } + + public static String getZipCode (){ + return api().address().zipCode(); + } + public static String getPhoneNumber (){ + return api().phoneNumber().cellPhone(); + } + +} diff --git a/src/test/java/support/UserDataUtils.java b/src/test/java/support/UserDataUtils.java deleted file mode 100644 index 6c0dda9..0000000 --- a/src/test/java/support/UserDataUtils.java +++ /dev/null @@ -1,60 +0,0 @@ -package support; - -import org.apache.commons.lang3.RandomStringUtils; -import runner.RunCucumberTest; -import java.util.Random; - -public class UserDataUtils extends RunCucumberTest { - - //Methods created to generate random data for forms - - /*---------*/ - public static String getRandomNumber(int numberOfDigits){ - return RandomStringUtils.randomNumeric(numberOfDigits); - } - - public static int getRandomNumber(int minValue, int maxValue){ - Random random = new Random(); - - return random.nextInt(maxValue - minValue) + minValue; - } - - /*---------*/ - public static class getRandomName { - private static Random random = new Random(); - private static String[] firstName = { "Amelia", "Olivia", "Emily", "Ava", "Sophie", - "Mia", "Ruby", "Lily", "Grace", "Freya", "Charlotte", "Daisy", "Phoebe", "Millie", - "Eva", "Alice", "Lucy", "Florence", "Lola"}; - - private static String[] lastName = { " Smith", " Johnson", " Williams", " Brown", " Jones", " Garcia", - " Miller", " Davis", " Rodriguez", " Martinez", " Hernandez", " Lopez" }; - - public static String firstName() { - return firstName[random.nextInt(firstName.length)]; - } - - public static String lastName() { - return lastName[random.nextInt(lastName.length)]; - } - - } - - /*---------*/ - public static String getRandomEmail(){ - String emailStart = "test+", emailEnd = "@test.com"; - int number = getRandomNumber(1,9999999); - - return emailStart + number + emailEnd; - } - - /*---------*/ - public static String getRandomPassword(){ - - String uppercase = RandomStringUtils.randomAlphabetic(2), - lowercase = RandomStringUtils.randomAlphabetic(2).toLowerCase(), - number = getRandomNumber(2); - - return uppercase + lowercase + number; - } - -}