From 9a98767b67a2699e5c9f0f27d9d89049e945bee5 Mon Sep 17 00:00:00 2001 From: Greg Gauthier Date: Thu, 26 Jan 2023 11:14:19 +0000 Subject: [PATCH] completed first demo test --- src/main/java/org/example/pages/Login.java | 16 +++++-- .../java/org/example/features/login.feature | 14 ++++-- .../java/org/example/runner/DemoRunner.java | 6 ++- .../java/org/example/steps/LoginSteps.java | 48 +++++++++++++------ .../org/example/{ => steps}/TestContext.java | 3 +- src/test/resources/cucumber.properties | 2 + src/test/resources/junit-platform.properties | 2 + 7 files changed, 65 insertions(+), 26 deletions(-) rename src/test/java/org/example/{ => steps}/TestContext.java (97%) create mode 100644 src/test/resources/cucumber.properties create mode 100644 src/test/resources/junit-platform.properties diff --git a/src/main/java/org/example/pages/Login.java b/src/main/java/org/example/pages/Login.java index 8462a63..588fb81 100644 --- a/src/main/java/org/example/pages/Login.java +++ b/src/main/java/org/example/pages/Login.java @@ -1,5 +1,6 @@ package org.example.pages; +import com.microsoft.playwright.Locator; import com.microsoft.playwright.Page; public class Login { @@ -15,9 +16,18 @@ public class Login { public Login(Page page) { this.page = page; + } + public String title() { + return page.title(); + } - }public String verifyTitle() { - return page.title();} + public Locator usernameField() { + return page.locator("//*[@id=\"user-name\"]"); + } + + public Locator passwordField() { + return page.locator("//*[@id=\"password\"]"); + } public void loginIntoApplication(String email, String pass) { enterUserName(email); @@ -26,7 +36,7 @@ public class Login { public void logoutApplication() { clickOnHamburger(); - clickOnLogout(); } // Logout from the application + clickOnLogout(); } public void enterUserName(String email) { page.fill(username, email);} diff --git a/src/test/java/org/example/features/login.feature b/src/test/java/org/example/features/login.feature index ec9eadf..86011a0 100644 --- a/src/test/java/org/example/features/login.feature +++ b/src/test/java/org/example/features/login.feature @@ -1,13 +1,17 @@ # Sample Cucumber test using the SWAGLABS site Feature: Login +Description: Demonstration of cucumber with Junit, and Playwright + + Background: + Given User has a functional browser + When User navigates to the Swaglabs site + Then User can see the SwagLabs login page Scenario Outline: Login to SwagLabs Application with Correct credentials - Given User launched SwagLabs application - When User verify the Page title - When User logged in the app using username “” and password “” - Then User verify the product name “” - Then User logout from the application + Given Unauthenticated user is at the SwagLabs login page + When User logs in using username "" and password "" + Then User can see product "" Examples: | UserName | Password | ProductName | diff --git a/src/test/java/org/example/runner/DemoRunner.java b/src/test/java/org/example/runner/DemoRunner.java index 98c7438..8b81d47 100644 --- a/src/test/java/org/example/runner/DemoRunner.java +++ b/src/test/java/org/example/runner/DemoRunner.java @@ -7,8 +7,10 @@ import org.junit.runner.RunWith; @RunWith(Cucumber.class) @CucumberOptions( features = "src/test/java/org/example/features/", - glue = {"steps"}, - plugin = {"pretty"}) + glue = {"org.example.steps"}, + plugin = {"pretty"}, + publish = true +) public class DemoRunner { } diff --git a/src/test/java/org/example/steps/LoginSteps.java b/src/test/java/org/example/steps/LoginSteps.java index 5788635..8eb561a 100644 --- a/src/test/java/org/example/steps/LoginSteps.java +++ b/src/test/java/org/example/steps/LoginSteps.java @@ -1,13 +1,12 @@ package org.example.steps; -import com.microsoft.playwright.Browser; -import com.microsoft.playwright.BrowserType; import com.microsoft.playwright.Page; -import com.microsoft.playwright.Playwright; +import io.cucumber.java.AfterAll; +import io.cucumber.java.Before; +import io.cucumber.java.After; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; -import org.example.TestContext; import org.example.pages.Home; import org.example.pages.Login; import org.junit.Assert; @@ -18,32 +17,51 @@ public class LoginSteps { TestContext testContext = new TestContext("webkit", true); Page page = testContext.page; - @Given("User launched SwagLabs application") + @Before public void setUp() { - page.navigate("https://www.saucedemo.com/"); home = new Home(page); login = new Login(page); } - @When("User verify the Page title") - public void verifyPageTitle() { - String title = login.verifyTitle(); - Assert.assertEquals(title, "Swag Labs"); + + @Given("User has a functional browser") + public void userHasAFunctionalBrowser() { + Assert.assertEquals("webkit", testContext.browser.browserType().name()); + } + + @Then("User can see the SwagLabs login page") + public void userCanSeeTheSwagLabsLoginPage() { + Assert.assertTrue(login.usernameField().isVisible() && login.usernameField().isEditable()); + Assert.assertTrue(login.passwordField().isVisible() && login.passwordField().isEditable()); + } + + @Given("User navigates to the Swaglabs site") + public void userNavigatesToSwagLabs() { + page.navigate("https://www.saucedemo.com/"); + Assert.assertEquals(login.title(), "Swag Labs"); + } + + @Given("Unauthenticated user is at the SwagLabs login page") + public void verifyLoginPage() { + Assert.assertTrue(login.usernameField().isVisible() && login.usernameField().isEditable()); + Assert.assertTrue(login.passwordField().isVisible() && login.passwordField().isEditable()); } //Login into the application - @When("User logged in the app using username {string} and password {string}") + @When("User logs in using username {string} and password {string}") public void loginIntoTheApplication(String username,String password ) { login.loginIntoApplication(username, password); + Assert.assertEquals("hello","hello"); } //Verify product name after login - @Then("User verify the product name {string}") + @Then("User can see product {string}") public void verifyProductsName(String productname) { String productName = home.getProductName(); Assert.assertEquals(productName, productname); - } + //Logout from application - @Then("User logout from the application") + @After public void logoutFromApplication() { - login.logoutApplication();} + login.logoutApplication(); + } } diff --git a/src/test/java/org/example/TestContext.java b/src/test/java/org/example/steps/TestContext.java similarity index 97% rename from src/test/java/org/example/TestContext.java rename to src/test/java/org/example/steps/TestContext.java index 7454119..cb8bac9 100644 --- a/src/test/java/org/example/TestContext.java +++ b/src/test/java/org/example/steps/TestContext.java @@ -1,4 +1,4 @@ -package org.example; +package org.example.steps; import com.microsoft.playwright.Browser; import com.microsoft.playwright.BrowserType; @@ -29,5 +29,6 @@ public class TestContext { } catch (Exception e) { System.out.println(e.getMessage()); } + } } diff --git a/src/test/resources/cucumber.properties b/src/test/resources/cucumber.properties new file mode 100644 index 0000000..f4f676c --- /dev/null +++ b/src/test/resources/cucumber.properties @@ -0,0 +1,2 @@ +cucumber.publish.enabled=true +cucumber.publish.quiet=true \ No newline at end of file diff --git a/src/test/resources/junit-platform.properties b/src/test/resources/junit-platform.properties new file mode 100644 index 0000000..f4f676c --- /dev/null +++ b/src/test/resources/junit-platform.properties @@ -0,0 +1,2 @@ +cucumber.publish.enabled=true +cucumber.publish.quiet=true \ No newline at end of file