From e29903d87bdbf080ace5ea5ea7706c2ccbf97f19 Mon Sep 17 00:00:00 2001 From: "Yury.Chychayeu" Date: Thu, 18 Jan 2024 14:30:29 +0100 Subject: [PATCH 1/4] better base --- pom.xml | 18 ++++++++++--- .../java/web_driver/WebDriverFactory.java | 27 +++++++++++++++++++ src/test/java/utils/BaseTest.java | 22 +++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/main/java/web_driver/WebDriverFactory.java create mode 100644 src/test/java/utils/BaseTest.java diff --git a/pom.xml b/pom.xml index 54175bd..cf0a75b 100644 --- a/pom.xml +++ b/pom.xml @@ -16,9 +16,21 @@ - junit - junit - 3.8.1 + org.seleniumhq.selenium + selenium-java + 4.10.0 + + + + io.github.bonigarcia + webdrivermanager + 5.4.0 + + + + org.testng + testng + 7.8.0 test diff --git a/src/main/java/web_driver/WebDriverFactory.java b/src/main/java/web_driver/WebDriverFactory.java new file mode 100644 index 0000000..b1efff3 --- /dev/null +++ b/src/main/java/web_driver/WebDriverFactory.java @@ -0,0 +1,27 @@ +package web_driver; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.edge.EdgeDriver; +import org.openqa.selenium.edge.EdgeOptions; + +public class WebDriverFactory { + + public WebDriver getDriver(){ + System.setProperty("webdriver.edge.driver", "src/main/resources/msedgedriver.exe"); + return new EdgeDriver(edgeOptions()); + } + + public EdgeOptions edgeOptions(){ + EdgeOptions edgeOptions = new EdgeOptions(); + + edgeOptions.setHeadless(true); + edgeOptions.addArguments("--disable-gpu"); + edgeOptions.addArguments("--window-size=1920,1200"); + edgeOptions.addArguments("--ignore-certificate-errors"); + edgeOptions.addArguments("--silent"); + edgeOptions.addArguments("--start-maximized"); + + return edgeOptions; + } + +} \ No newline at end of file diff --git a/src/test/java/utils/BaseTest.java b/src/test/java/utils/BaseTest.java new file mode 100644 index 0000000..50e49d7 --- /dev/null +++ b/src/test/java/utils/BaseTest.java @@ -0,0 +1,22 @@ +package utils; + +import org.openqa.selenium.WebDriver; +import org.testng.annotations.AfterSuite; +import org.testng.annotations.BeforeMethod; +import web_driver.WebDriverFactory; + +public class BaseTest { + + protected static WebDriver driver; + + @BeforeMethod + public void setUp(){ + WebDriverFactory factory = new WebDriverFactory(); + driver = factory.getDriver(); + } + + @AfterSuite + public void wrapUp(){ + driver.quit(); + } +} From 50b1d38d3c7663f4b785227266c296af24925019 Mon Sep 17 00:00:00 2001 From: "Yury.Chychayeu" Date: Mon, 22 Jan 2024 10:03:22 +0100 Subject: [PATCH 2/4] TestRail Page Object with steps --- src/main/java/wait_service/WaitService.java | 23 ++++++++++++++ .../java/web_driver/WebDriverFactory.java | 7 ++++- src/test/java/page/AddProjectPage.java | 31 +++++++++++++++++++ src/test/java/page/DashboardPage.java | 14 +++++++++ src/test/java/page/LoginPage.java | 22 +++++++++++++ src/test/java/page/OverviewPage.java | 26 ++++++++++++++++ src/test/java/step/AddProjectStep.java | 25 +++++++++++++++ src/test/java/step/DeleteProjectStep.java | 18 +++++++++++ src/test/java/step/LoginStep.java | 19 ++++++++++++ src/test/java/test/CreateProjectTest.java | 29 +++++++++++++++++ src/test/java/test/DeleteProjectTest.java | 26 ++++++++++++++++ src/test/java/test/LoginTest.java | 27 ++++++++++++++++ src/test/java/utils/BasePage.java | 27 ++++++++++++++++ src/test/java/utils/BaseTest.java | 3 +- 14 files changed, 295 insertions(+), 2 deletions(-) create mode 100644 src/main/java/wait_service/WaitService.java create mode 100644 src/test/java/page/AddProjectPage.java create mode 100644 src/test/java/page/DashboardPage.java create mode 100644 src/test/java/page/LoginPage.java create mode 100644 src/test/java/page/OverviewPage.java create mode 100644 src/test/java/step/AddProjectStep.java create mode 100644 src/test/java/step/DeleteProjectStep.java create mode 100644 src/test/java/step/LoginStep.java create mode 100644 src/test/java/test/CreateProjectTest.java create mode 100644 src/test/java/test/DeleteProjectTest.java create mode 100644 src/test/java/test/LoginTest.java create mode 100644 src/test/java/utils/BasePage.java diff --git a/src/main/java/wait_service/WaitService.java b/src/main/java/wait_service/WaitService.java new file mode 100644 index 0000000..64f8c00 --- /dev/null +++ b/src/main/java/wait_service/WaitService.java @@ -0,0 +1,23 @@ +package wait_service; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.time.Duration; + +public class WaitService { + + private WebDriverWait wait; + + public WaitService(WebDriver driver){ + this.wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + } + + public WebElement waitForVisibilityByLocator(By lo){ + return wait.until(ExpectedConditions.visibilityOfElementLocated(lo)); + } + +} diff --git a/src/main/java/web_driver/WebDriverFactory.java b/src/main/java/web_driver/WebDriverFactory.java index b1efff3..2c5ebba 100644 --- a/src/main/java/web_driver/WebDriverFactory.java +++ b/src/main/java/web_driver/WebDriverFactory.java @@ -6,9 +6,14 @@ public class WebDriverFactory { + private static WebDriver driver; + public WebDriver getDriver(){ System.setProperty("webdriver.edge.driver", "src/main/resources/msedgedriver.exe"); - return new EdgeDriver(edgeOptions()); + if (driver == null){ + driver = new EdgeDriver(edgeOptions()); + } + return driver; } public EdgeOptions edgeOptions(){ diff --git a/src/test/java/page/AddProjectPage.java b/src/test/java/page/AddProjectPage.java new file mode 100644 index 0000000..4bdc0d2 --- /dev/null +++ b/src/test/java/page/AddProjectPage.java @@ -0,0 +1,31 @@ +package page; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import utils.BasePage; + +public class AddProjectPage extends BasePage { + + private By nameInputLocator = By.id("name"); + private By accessBtnLocator = By.id("projects-tabs-access"); + private By accessDropdownBtnLocator = By.className("dropdown-icon-black"); + private By designerDropdownLinkLocator = By.xpath("//a[contains(text(), 'Designer')]"); + private By acceptBtnLocator = By.id("accept"); + + public WebElement getNameInput(){ + return service.waitForVisibilityByLocator(nameInputLocator); + } + public WebElement getAccessBtn(){ + return service.waitForVisibilityByLocator(accessBtnLocator); + } + public WebElement getAccessDropdownBtn(){ + return service.waitForVisibilityByLocator(accessDropdownBtnLocator); + } + public WebElement getDesignerDropdownMenuLink(){ + return service.waitForVisibilityByLocator(designerDropdownLinkLocator); + } + public WebElement getAcceptBtn(){ + return service.waitForVisibilityByLocator(acceptBtnLocator); + } + +} diff --git a/src/test/java/page/DashboardPage.java b/src/test/java/page/DashboardPage.java new file mode 100644 index 0000000..5546f82 --- /dev/null +++ b/src/test/java/page/DashboardPage.java @@ -0,0 +1,14 @@ +package page; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import utils.BasePage; + +public class DashboardPage extends BasePage { + + private By addProjectBtnLocator = By.id("sidebar-projects-add"); + + public WebElement getAddProjectBtn(){ + return service.waitForVisibilityByLocator(addProjectBtnLocator); + } +} diff --git a/src/test/java/page/LoginPage.java b/src/test/java/page/LoginPage.java new file mode 100644 index 0000000..8e208b3 --- /dev/null +++ b/src/test/java/page/LoginPage.java @@ -0,0 +1,22 @@ +package page; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import utils.BasePage; + +public class LoginPage extends BasePage { + + private By emailInputLocator = By.id("name"); + private By pswInputLocator = By.id("password"); + private By loginBtn = By.id("button_primary"); + + public WebElement getEmailInput(){ + return service.waitForVisibilityByLocator(emailInputLocator); + } + public WebElement getPassInput(){ + return service.waitForVisibilityByLocator(pswInputLocator); + } + public WebElement getLoginButton(){ + return service.waitForVisibilityByLocator(loginBtn); + } +} diff --git a/src/test/java/page/OverviewPage.java b/src/test/java/page/OverviewPage.java new file mode 100644 index 0000000..d3a8afd --- /dev/null +++ b/src/test/java/page/OverviewPage.java @@ -0,0 +1,26 @@ +package page; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import utils.BasePage; + +public class OverviewPage extends BasePage { + + private By successBannerLocator = By.cssSelector(".message"); + private By deleteBtnLocator = By.xpath("//tr[@class = 'even hoverSensitive']/td[@class='action'][2]"); + private By checkboxLocator = By.xpath("//span[@class = 'dialog-confirm']/strong[contains(text(), 'Yes')]"); + private By confirmButtonLocator = By.xpath("//a[@data-testid = 'caseFieldsTabDeleteDialogButtonOk']"); + + public Boolean isBannerOnPage(){ + return isItemOnAPage(successBannerLocator); + } + public WebElement getDeleteBtn(){ + return service.waitForVisibilityByLocator(deleteBtnLocator); + } + public WebElement getCheckbox(){ + return service.waitForVisibilityByLocator(checkboxLocator); + } + public WebElement getConfirmButton(){ + return service.waitForVisibilityByLocator(confirmButtonLocator); + } +} diff --git a/src/test/java/step/AddProjectStep.java b/src/test/java/step/AddProjectStep.java new file mode 100644 index 0000000..d30cb06 --- /dev/null +++ b/src/test/java/step/AddProjectStep.java @@ -0,0 +1,25 @@ +package step; + +import page.AddProjectPage; +import page.DashboardPage; + +public class AddProjectStep { + + private DashboardPage dashboardPage; + private AddProjectPage addProjectPage; + + public AddProjectStep(DashboardPage dashboardPage, AddProjectPage addProjectPage) { + this.dashboardPage = dashboardPage; + this.addProjectPage = addProjectPage; + } + + public void createProject(){ + dashboardPage.getAddProjectBtn().click(); + + addProjectPage.getNameInput().sendKeys("test"); + addProjectPage.getAccessBtn().click(); + addProjectPage.getAccessDropdownBtn().click(); + addProjectPage.getDesignerDropdownMenuLink().click(); + addProjectPage.getAcceptBtn().click(); + } +} diff --git a/src/test/java/step/DeleteProjectStep.java b/src/test/java/step/DeleteProjectStep.java new file mode 100644 index 0000000..61518c0 --- /dev/null +++ b/src/test/java/step/DeleteProjectStep.java @@ -0,0 +1,18 @@ +package step; + +import page.OverviewPage; + +public class DeleteProjectStep { + + private OverviewPage overviewPage; + + public DeleteProjectStep(OverviewPage overviewPage) { + this.overviewPage = overviewPage; + } + + public void deleteProject(){ + overviewPage.getDeleteBtn().click(); + overviewPage.getCheckbox().click(); + overviewPage.getConfirmButton().click(); + } +} diff --git a/src/test/java/step/LoginStep.java b/src/test/java/step/LoginStep.java new file mode 100644 index 0000000..5b08cb1 --- /dev/null +++ b/src/test/java/step/LoginStep.java @@ -0,0 +1,19 @@ +package step; + +import page.LoginPage; + +public class LoginStep { + + private LoginPage loginPage; + + public LoginStep(LoginPage loginPage) { + this.loginPage = loginPage; + } + + public void performLogin(String email, String pass){ + loginPage.getEmailInput().sendKeys(email); + loginPage.getPassInput().sendKeys(pass); + loginPage.getLoginButton().click(); + } + +} diff --git a/src/test/java/test/CreateProjectTest.java b/src/test/java/test/CreateProjectTest.java new file mode 100644 index 0000000..708c6c9 --- /dev/null +++ b/src/test/java/test/CreateProjectTest.java @@ -0,0 +1,29 @@ +package test; + +import com.beust.ah.A; +import org.testng.Assert; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import page.AddProjectPage; +import page.DashboardPage; +import page.OverviewPage; +import step.AddProjectStep; +import utils.BaseTest; + +public class CreateProjectTest extends BaseTest { + + private AddProjectStep addProjectStep; + private OverviewPage overviewPage; + + @BeforeMethod + public void setUpMethod(){ + overviewPage = new OverviewPage(); + addProjectStep = new AddProjectStep(new DashboardPage(), new AddProjectPage()); + } + + @Test(groups = {"create project"}, dependsOnGroups = {"login"}) + public void createProjectTest(){ + addProjectStep.createProject(); + Assert.assertTrue(overviewPage.isBannerOnPage()); + } +} diff --git a/src/test/java/test/DeleteProjectTest.java b/src/test/java/test/DeleteProjectTest.java new file mode 100644 index 0000000..ea9e2b0 --- /dev/null +++ b/src/test/java/test/DeleteProjectTest.java @@ -0,0 +1,26 @@ +package test; + +import org.testng.Assert; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import page.OverviewPage; +import step.DeleteProjectStep; +import utils.BaseTest; + +public class DeleteProjectTest extends BaseTest { + + private DeleteProjectStep deleteProjectStep; + private OverviewPage overviewPage; + + @BeforeMethod + public void setUpMethod(){ + overviewPage = new OverviewPage(); + deleteProjectStep = new DeleteProjectStep(overviewPage); + } + + @Test(dependsOnGroups = {"create project", "login"}) + public void deleteProjectTest(){ + deleteProjectStep.deleteProject(); + Assert.assertTrue(overviewPage.isBannerOnPage()); + } +} diff --git a/src/test/java/test/LoginTest.java b/src/test/java/test/LoginTest.java new file mode 100644 index 0000000..1d5ac1f --- /dev/null +++ b/src/test/java/test/LoginTest.java @@ -0,0 +1,27 @@ +package test; + +import org.testng.Assert; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Parameters; +import org.testng.annotations.Test; +import page.LoginPage; +import step.LoginStep; +import utils.BaseTest; + +public class LoginTest extends BaseTest { + + private LoginStep loginStep; + + @BeforeMethod + public void setUpMethod(){ + loginStep = new LoginStep(new LoginPage()); + driver.get("https://uyfiytfuyl.testrail.io/index.php?/auth/login/LWZhMDA0NWExYzgyM2UyNWUzMDVjMjE3ZmRjNzU1ZWEzMjJkOTZmNWY1MWEwODk0MDNjZDJhN2E1NTQ2YTEzM2Y:"); + } + + @Parameters({"email", "psw"}) + @Test(groups = {"login"}) + public void loginTest(String email, String psw) throws InterruptedException { + loginStep.performLogin(email, psw); + Assert.assertEquals(driver.getCurrentUrl(), "https://uyfiytfuyl.testrail.io/index.php?/dashboard"); + } +} diff --git a/src/test/java/utils/BasePage.java b/src/test/java/utils/BasePage.java new file mode 100644 index 0000000..f4b62d7 --- /dev/null +++ b/src/test/java/utils/BasePage.java @@ -0,0 +1,27 @@ +package utils; + +import org.openqa.selenium.By; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebDriver; +import wait_service.WaitService; +import web_driver.WebDriverFactory; + +public class BasePage { + + public static WebDriver webDriver; + public WaitService service; + + public BasePage(){ + WebDriverFactory factory = new WebDriverFactory(); + webDriver = factory.getDriver(); + service = new WaitService(webDriver); + } + + protected Boolean isItemOnAPage(By by){ + try { + return webDriver.findElement(by).isDisplayed(); + } catch (NoSuchElementException e) { + return false; + } + } +} diff --git a/src/test/java/utils/BaseTest.java b/src/test/java/utils/BaseTest.java index 50e49d7..c39219e 100644 --- a/src/test/java/utils/BaseTest.java +++ b/src/test/java/utils/BaseTest.java @@ -3,13 +3,14 @@ import org.openqa.selenium.WebDriver; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeSuite; import web_driver.WebDriverFactory; public class BaseTest { protected static WebDriver driver; - @BeforeMethod + @BeforeSuite public void setUp(){ WebDriverFactory factory = new WebDriverFactory(); driver = factory.getDriver(); From 5838dc7fc99ee818104d21b408764b7794626519 Mon Sep 17 00:00:00 2001 From: "Yury.Chychayeu" Date: Tue, 23 Jan 2024 12:52:39 +0100 Subject: [PATCH 3/4] fixes --- .../java/web_driver/WebDriverFactory.java | 3 ++- src/test/java/step/DeleteProjectStep.java | 18 ------------- .../{AddProjectStep.java => Project.java} | 13 ++++++++-- src/test/java/test/DeleteProjectTest.java | 26 ------------------- ...reateProjectTest.java => ProjectTest.java} | 17 +++++++----- 5 files changed, 24 insertions(+), 53 deletions(-) delete mode 100644 src/test/java/step/DeleteProjectStep.java rename src/test/java/step/{AddProjectStep.java => Project.java} (59%) delete mode 100644 src/test/java/test/DeleteProjectTest.java rename src/test/java/test/{CreateProjectTest.java => ProjectTest.java} (55%) diff --git a/src/main/java/web_driver/WebDriverFactory.java b/src/main/java/web_driver/WebDriverFactory.java index 2c5ebba..439d84b 100644 --- a/src/main/java/web_driver/WebDriverFactory.java +++ b/src/main/java/web_driver/WebDriverFactory.java @@ -1,5 +1,6 @@ package web_driver; +import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.WebDriver; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeOptions; @@ -9,7 +10,7 @@ public class WebDriverFactory { private static WebDriver driver; public WebDriver getDriver(){ - System.setProperty("webdriver.edge.driver", "src/main/resources/msedgedriver.exe"); + WebDriverManager.edgedriver().setup(); if (driver == null){ driver = new EdgeDriver(edgeOptions()); } diff --git a/src/test/java/step/DeleteProjectStep.java b/src/test/java/step/DeleteProjectStep.java deleted file mode 100644 index 61518c0..0000000 --- a/src/test/java/step/DeleteProjectStep.java +++ /dev/null @@ -1,18 +0,0 @@ -package step; - -import page.OverviewPage; - -public class DeleteProjectStep { - - private OverviewPage overviewPage; - - public DeleteProjectStep(OverviewPage overviewPage) { - this.overviewPage = overviewPage; - } - - public void deleteProject(){ - overviewPage.getDeleteBtn().click(); - overviewPage.getCheckbox().click(); - overviewPage.getConfirmButton().click(); - } -} diff --git a/src/test/java/step/AddProjectStep.java b/src/test/java/step/Project.java similarity index 59% rename from src/test/java/step/AddProjectStep.java rename to src/test/java/step/Project.java index d30cb06..bd6183c 100644 --- a/src/test/java/step/AddProjectStep.java +++ b/src/test/java/step/Project.java @@ -2,15 +2,24 @@ import page.AddProjectPage; import page.DashboardPage; +import page.OverviewPage; -public class AddProjectStep { +public class Project { private DashboardPage dashboardPage; private AddProjectPage addProjectPage; + private OverviewPage overviewPage; - public AddProjectStep(DashboardPage dashboardPage, AddProjectPage addProjectPage) { + public Project(DashboardPage dashboardPage, AddProjectPage addProjectPage, OverviewPage overviewPage) { this.dashboardPage = dashboardPage; this.addProjectPage = addProjectPage; + this.overviewPage = overviewPage; + } + + public void deleteProject(){ + overviewPage.getDeleteBtn().click(); + overviewPage.getCheckbox().click(); + overviewPage.getConfirmButton().click(); } public void createProject(){ diff --git a/src/test/java/test/DeleteProjectTest.java b/src/test/java/test/DeleteProjectTest.java deleted file mode 100644 index ea9e2b0..0000000 --- a/src/test/java/test/DeleteProjectTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package test; - -import org.testng.Assert; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import page.OverviewPage; -import step.DeleteProjectStep; -import utils.BaseTest; - -public class DeleteProjectTest extends BaseTest { - - private DeleteProjectStep deleteProjectStep; - private OverviewPage overviewPage; - - @BeforeMethod - public void setUpMethod(){ - overviewPage = new OverviewPage(); - deleteProjectStep = new DeleteProjectStep(overviewPage); - } - - @Test(dependsOnGroups = {"create project", "login"}) - public void deleteProjectTest(){ - deleteProjectStep.deleteProject(); - Assert.assertTrue(overviewPage.isBannerOnPage()); - } -} diff --git a/src/test/java/test/CreateProjectTest.java b/src/test/java/test/ProjectTest.java similarity index 55% rename from src/test/java/test/CreateProjectTest.java rename to src/test/java/test/ProjectTest.java index 708c6c9..0d66712 100644 --- a/src/test/java/test/CreateProjectTest.java +++ b/src/test/java/test/ProjectTest.java @@ -1,29 +1,34 @@ package test; -import com.beust.ah.A; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import page.AddProjectPage; import page.DashboardPage; import page.OverviewPage; -import step.AddProjectStep; +import step.Project; import utils.BaseTest; -public class CreateProjectTest extends BaseTest { +public class ProjectTest extends BaseTest { - private AddProjectStep addProjectStep; + private Project project; private OverviewPage overviewPage; @BeforeMethod public void setUpMethod(){ overviewPage = new OverviewPage(); - addProjectStep = new AddProjectStep(new DashboardPage(), new AddProjectPage()); + project = new Project(new DashboardPage(), new AddProjectPage(), new OverviewPage()); } @Test(groups = {"create project"}, dependsOnGroups = {"login"}) public void createProjectTest(){ - addProjectStep.createProject(); + project.createProject(); + Assert.assertTrue(overviewPage.isBannerOnPage()); + } + + @Test(groups = {"create project"}, dependsOnGroups = {"login"}) + public void deleteProjectTest(){ + project.deleteProject(); Assert.assertTrue(overviewPage.isBannerOnPage()); } } From da0d8b34d28e2c1a9d35f2c31022b1c216ef14b7 Mon Sep 17 00:00:00 2001 From: "Yury.Chychayeu" Date: Mon, 26 Feb 2024 14:04:58 +0100 Subject: [PATCH 4/4] Cucumber --- pom.xml | 17 +++++++++++++ src/test/java/RunCucumberTest.java | 17 +++++++++++++ src/test/java/step/LoginStep.java | 29 ++++++++++++++++++++++- src/test/java/step/Project.java | 17 ++++++++++--- src/test/resources/features/login.feature | 14 +++++++++++ 5 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 src/test/java/RunCucumberTest.java create mode 100644 src/test/resources/features/login.feature diff --git a/pom.xml b/pom.xml index cf0a75b..e48f002 100644 --- a/pom.xml +++ b/pom.xml @@ -33,5 +33,22 @@ 7.8.0 test + + + + io.cucumber + cucumber-java + 7.15.0 + + + io.cucumber + cucumber-testng + 7.15.0 + + + io.cucumber + cucumber-picocontainer + 7.15.0 + diff --git a/src/test/java/RunCucumberTest.java b/src/test/java/RunCucumberTest.java new file mode 100644 index 0000000..be77a24 --- /dev/null +++ b/src/test/java/RunCucumberTest.java @@ -0,0 +1,17 @@ +import io.cucumber.testng.AbstractTestNGCucumberTests; +import io.cucumber.testng.CucumberOptions; +import org.testng.annotations.DataProvider; + +@CucumberOptions( + features = {"src/test/resources/features"}, + plugin = {"json:target/cucumber.json", "html:target/site/cucumber-pretty"}, + glue = "src/test/java/step" +) +public class RunCucumberTest extends AbstractTestNGCucumberTests { + + @Override + @DataProvider + public Object[][] scenarios() { + return super.scenarios(); + } +} diff --git a/src/test/java/step/LoginStep.java b/src/test/java/step/LoginStep.java index 5b08cb1..63b18ba 100644 --- a/src/test/java/step/LoginStep.java +++ b/src/test/java/step/LoginStep.java @@ -1,19 +1,46 @@ package step; +import io.cucumber.java.bs.A; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import org.openqa.selenium.WebDriver; +import org.testng.Assert; import page.LoginPage; +import web_driver.WebDriverFactory; public class LoginStep { private LoginPage loginPage; + private WebDriver driver; + + public LoginStep(LoginPage loginPage) { this.loginPage = loginPage; } - public void performLogin(String email, String pass){ + @Given("driver is ready") + public void openDriver() { + driver = new WebDriverFactory().getDriver(); + driver.get("https://piogjheioghtor.testrail.io/index.php?/auth/login/LWZhMDA0NWExYzgyM2UyNWUzMDVjMjE3ZmRjNzU1ZWEzMjJkOTZmNWY1MWEwODk0MDNjZDJhN2E1NTQ2YTEzM2Y:"); + + } + + @When("perform login with {string} email and {string} password") + public void performLogin(String email, String pass) { loginPage.getEmailInput().sendKeys(email); loginPage.getPassInput().sendKeys(pass); loginPage.getLoginButton().click(); } + @Then("Dashboard page is opened") + public void isDashboardPageOpened() { + Assert.assertEquals(driver.getCurrentUrl(), "https://piogjheioghtor.testrail.io/index.php?/dashboard"); + } + + @Then("login page is opened") + public void loginPageIsOpened() { + Assert.assertEquals(driver.getCurrentUrl(), "https://piogjheioghtor.testrail.io/index.php?/auth/login/LWZhMDA0NWExYzgyM2UyNWUzMDVjMjE3ZmRjNzU1ZWEzMjJkOTZmNWY1MWEwODk0MDNjZDJhN2E1NTQ2YTEzM2Y:"); + } } diff --git a/src/test/java/step/Project.java b/src/test/java/step/Project.java index bd6183c..e523476 100644 --- a/src/test/java/step/Project.java +++ b/src/test/java/step/Project.java @@ -1,5 +1,8 @@ package step; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import org.testng.Assert; import page.AddProjectPage; import page.DashboardPage; import page.OverviewPage; @@ -10,19 +13,22 @@ public class Project { private AddProjectPage addProjectPage; private OverviewPage overviewPage; + + public Project(DashboardPage dashboardPage, AddProjectPage addProjectPage, OverviewPage overviewPage) { this.dashboardPage = dashboardPage; this.addProjectPage = addProjectPage; this.overviewPage = overviewPage; } - public void deleteProject(){ + @When("Delete project") + public void deleteProject() { overviewPage.getDeleteBtn().click(); overviewPage.getCheckbox().click(); overviewPage.getConfirmButton().click(); } - - public void createProject(){ + @When("Create project") + public void createProject() { dashboardPage.getAddProjectBtn().click(); addProjectPage.getNameInput().sendKeys("test"); @@ -31,4 +37,9 @@ public void createProject(){ addProjectPage.getDesignerDropdownMenuLink().click(); addProjectPage.getAcceptBtn().click(); } + + @Then("Banner on a page") + public void isBannerOnPage() { + Assert.assertTrue(overviewPage.isBannerOnPage()); + } } diff --git a/src/test/resources/features/login.feature b/src/test/resources/features/login.feature new file mode 100644 index 0000000..fa69df9 --- /dev/null +++ b/src/test/resources/features/login.feature @@ -0,0 +1,14 @@ +Feature: Full test rail test + Scenario: Login attempt + Given driver is ready + Then login page is opened + When perform login with "email" email and "pass" password + Then Dashboard page is opened + + Scenario: Create project + When Create project + Then Banner on a page + + Scenario: Delete project + When Delete project + Then Banner on a page \ No newline at end of file