From e29903d87bdbf080ace5ea5ea7706c2ccbf97f19 Mon Sep 17 00:00:00 2001 From: "Yury.Chychayeu" Date: Thu, 18 Jan 2024 14:30:29 +0100 Subject: [PATCH 1/6] 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/6] 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/6] 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/6] 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 From de315ff15570fcd038d3f4c80ff3cb1c74efe530 Mon Sep 17 00:00:00 2001 From: "Yury.Chychayeu" Date: Tue, 27 Feb 2024 13:53:24 +0100 Subject: [PATCH 5/6] Cucumber with hook --- pom.xml | 2 -- ...iverFactory.java => WebDriverService.java} | 7 ++-- src/test/java/step/Hook.java | 28 +++++++++++++++ src/test/java/step/LoginStep.java | 9 ++--- src/test/java/step/Project.java | 3 +- src/test/java/test/LoginTest.java | 27 --------------- src/test/java/test/ProjectTest.java | 34 ------------------- src/test/java/utils/BaseCucumberStep.java | 8 +++++ src/test/java/utils/BasePage.java | 12 ++----- src/test/java/utils/BaseTest.java | 23 ------------- src/test/resources/features/login.feature | 2 +- 11 files changed, 46 insertions(+), 109 deletions(-) rename src/main/java/web_driver/{WebDriverFactory.java => WebDriverService.java} (84%) create mode 100644 src/test/java/step/Hook.java delete mode 100644 src/test/java/test/LoginTest.java delete mode 100644 src/test/java/test/ProjectTest.java create mode 100644 src/test/java/utils/BaseCucumberStep.java delete mode 100644 src/test/java/utils/BaseTest.java diff --git a/pom.xml b/pom.xml index e48f002..c1a0116 100644 --- a/pom.xml +++ b/pom.xml @@ -33,8 +33,6 @@ 7.8.0 test - - io.cucumber cucumber-java diff --git a/src/main/java/web_driver/WebDriverFactory.java b/src/main/java/web_driver/WebDriverService.java similarity index 84% rename from src/main/java/web_driver/WebDriverFactory.java rename to src/main/java/web_driver/WebDriverService.java index 439d84b..a4d3fbb 100644 --- a/src/main/java/web_driver/WebDriverFactory.java +++ b/src/main/java/web_driver/WebDriverService.java @@ -5,16 +5,13 @@ import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeOptions; -public class WebDriverFactory { +public class WebDriverService { private static WebDriver driver; public WebDriver getDriver(){ WebDriverManager.edgedriver().setup(); - if (driver == null){ - driver = new EdgeDriver(edgeOptions()); - } - return driver; + return new EdgeDriver(edgeOptions()); } public EdgeOptions edgeOptions(){ diff --git a/src/test/java/step/Hook.java b/src/test/java/step/Hook.java new file mode 100644 index 0000000..64aafda --- /dev/null +++ b/src/test/java/step/Hook.java @@ -0,0 +1,28 @@ +package step; + +import io.cucumber.java.After; +import io.cucumber.java.Before; +import utils.BaseCucumberStep; +import web_driver.WebDriverService; + +public class Hook extends BaseCucumberStep { + + private BaseCucumberStep baseCucumberStep; + + public Hook(BaseCucumberStep baseCucumberStep) { + this.baseCucumberStep = baseCucumberStep; + } + + @Before + public void setUp(){ + baseCucumberStep.driver = new WebDriverService().getDriver(); + } + + + @After + public void warUp(){ + if (baseCucumberStep.driver != null){ + baseCucumberStep.driver.close(); + } + } +} diff --git a/src/test/java/step/LoginStep.java b/src/test/java/step/LoginStep.java index 63b18ba..92318c5 100644 --- a/src/test/java/step/LoginStep.java +++ b/src/test/java/step/LoginStep.java @@ -1,20 +1,16 @@ 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; +import utils.BaseCucumberStep; -public class LoginStep { +public class LoginStep extends BaseCucumberStep { private LoginPage loginPage; - private WebDriver driver; - public LoginStep(LoginPage loginPage) { this.loginPage = loginPage; @@ -22,7 +18,6 @@ public LoginStep(LoginPage loginPage) { @Given("driver is ready") public void openDriver() { - driver = new WebDriverFactory().getDriver(); driver.get("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 e523476..8f1dbbf 100644 --- a/src/test/java/step/Project.java +++ b/src/test/java/step/Project.java @@ -6,8 +6,9 @@ import page.AddProjectPage; import page.DashboardPage; import page.OverviewPage; +import utils.BaseCucumberStep; -public class Project { +public class Project extends BaseCucumberStep { private DashboardPage dashboardPage; private AddProjectPage addProjectPage; diff --git a/src/test/java/test/LoginTest.java b/src/test/java/test/LoginTest.java deleted file mode 100644 index 1d5ac1f..0000000 --- a/src/test/java/test/LoginTest.java +++ /dev/null @@ -1,27 +0,0 @@ -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/test/ProjectTest.java b/src/test/java/test/ProjectTest.java deleted file mode 100644 index 0d66712..0000000 --- a/src/test/java/test/ProjectTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package test; - -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.Project; -import utils.BaseTest; - -public class ProjectTest extends BaseTest { - - private Project project; - private OverviewPage overviewPage; - - @BeforeMethod - public void setUpMethod(){ - overviewPage = new OverviewPage(); - project = new Project(new DashboardPage(), new AddProjectPage(), new OverviewPage()); - } - - @Test(groups = {"create project"}, dependsOnGroups = {"login"}) - public void createProjectTest(){ - project.createProject(); - Assert.assertTrue(overviewPage.isBannerOnPage()); - } - - @Test(groups = {"create project"}, dependsOnGroups = {"login"}) - public void deleteProjectTest(){ - project.deleteProject(); - Assert.assertTrue(overviewPage.isBannerOnPage()); - } -} diff --git a/src/test/java/utils/BaseCucumberStep.java b/src/test/java/utils/BaseCucumberStep.java new file mode 100644 index 0000000..be0eb4b --- /dev/null +++ b/src/test/java/utils/BaseCucumberStep.java @@ -0,0 +1,8 @@ +package utils; + +import org.openqa.selenium.WebDriver; + +public class BaseCucumberStep { + + public static WebDriver driver; +} diff --git a/src/test/java/utils/BasePage.java b/src/test/java/utils/BasePage.java index f4b62d7..b1ece15 100644 --- a/src/test/java/utils/BasePage.java +++ b/src/test/java/utils/BasePage.java @@ -2,24 +2,18 @@ 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 class BasePage extends BaseCucumberStep { public WaitService service; public BasePage(){ - WebDriverFactory factory = new WebDriverFactory(); - webDriver = factory.getDriver(); - service = new WaitService(webDriver); + service = new WaitService(driver); } protected Boolean isItemOnAPage(By by){ try { - return webDriver.findElement(by).isDisplayed(); + return driver.findElement(by).isDisplayed(); } catch (NoSuchElementException e) { return false; } diff --git a/src/test/java/utils/BaseTest.java b/src/test/java/utils/BaseTest.java deleted file mode 100644 index c39219e..0000000 --- a/src/test/java/utils/BaseTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package utils; - -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; - - @BeforeSuite - public void setUp(){ - WebDriverFactory factory = new WebDriverFactory(); - driver = factory.getDriver(); - } - - @AfterSuite - public void wrapUp(){ - driver.quit(); - } -} diff --git a/src/test/resources/features/login.feature b/src/test/resources/features/login.feature index fa69df9..52fb03c 100644 --- a/src/test/resources/features/login.feature +++ b/src/test/resources/features/login.feature @@ -2,7 +2,7 @@ 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 + When perform login with "chichaevwork+qazwsx@gmail.com" email and "Qwerty1234%" password Then Dashboard page is opened Scenario: Create project From 1b658ca989994a6424b876d24e1b54d7b1eb55d7 Mon Sep 17 00:00:00 2001 From: "Yury.Chychayeu" Date: Thu, 29 Feb 2024 10:53:03 +0100 Subject: [PATCH 6/6] Cucumber with hook v2 --- src/main/java/web_driver/WebDriverService.java | 13 ++++++------- src/test/java/RunCucumberTest.java | 2 +- src/test/java/page/AddProjectPage.java | 13 +++++++++---- src/test/java/page/DashboardPage.java | 7 ++++++- src/test/java/page/LoginPage.java | 11 ++++++++--- src/test/java/page/OverviewPage.java | 13 +++++++++---- src/test/java/step/LoginStep.java | 14 +++++++------- src/test/java/step/Project.java | 11 +++++++---- src/test/java/utils/BasePage.java | 11 +++++++---- src/test/resources/features/login.feature | 13 ++++++------- 10 files changed, 66 insertions(+), 42 deletions(-) diff --git a/src/main/java/web_driver/WebDriverService.java b/src/main/java/web_driver/WebDriverService.java index a4d3fbb..f3decef 100644 --- a/src/main/java/web_driver/WebDriverService.java +++ b/src/main/java/web_driver/WebDriverService.java @@ -7,14 +7,10 @@ public class WebDriverService { - private static WebDriver driver; + private WebDriver driver; - public WebDriver getDriver(){ + public WebDriverService() { WebDriverManager.edgedriver().setup(); - return new EdgeDriver(edgeOptions()); - } - - public EdgeOptions edgeOptions(){ EdgeOptions edgeOptions = new EdgeOptions(); edgeOptions.setHeadless(true); @@ -23,8 +19,11 @@ public EdgeOptions edgeOptions(){ edgeOptions.addArguments("--ignore-certificate-errors"); edgeOptions.addArguments("--silent"); edgeOptions.addArguments("--start-maximized"); + driver = new EdgeDriver(edgeOptions); + } - return edgeOptions; + public WebDriver getDriver() { + return driver; } } \ No newline at end of file diff --git a/src/test/java/RunCucumberTest.java b/src/test/java/RunCucumberTest.java index be77a24..e5b6ea8 100644 --- a/src/test/java/RunCucumberTest.java +++ b/src/test/java/RunCucumberTest.java @@ -5,7 +5,7 @@ @CucumberOptions( features = {"src/test/resources/features"}, plugin = {"json:target/cucumber.json", "html:target/site/cucumber-pretty"}, - glue = "src/test/java/step" + glue = "step" ) public class RunCucumberTest extends AbstractTestNGCucumberTests { diff --git a/src/test/java/page/AddProjectPage.java b/src/test/java/page/AddProjectPage.java index 4bdc0d2..7d923d7 100644 --- a/src/test/java/page/AddProjectPage.java +++ b/src/test/java/page/AddProjectPage.java @@ -1,6 +1,7 @@ package page; import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import utils.BasePage; @@ -12,19 +13,23 @@ public class AddProjectPage extends BasePage { private By designerDropdownLinkLocator = By.xpath("//a[contains(text(), 'Designer')]"); private By acceptBtnLocator = By.id("accept"); - public WebElement getNameInput(){ + public AddProjectPage(WebDriver driver) { + super(driver); + } + + public WebElement getNameInput() { return service.waitForVisibilityByLocator(nameInputLocator); } - public WebElement getAccessBtn(){ + public WebElement getAccessBtn() { return service.waitForVisibilityByLocator(accessBtnLocator); } - public WebElement getAccessDropdownBtn(){ + public WebElement getAccessDropdownBtn() { return service.waitForVisibilityByLocator(accessDropdownBtnLocator); } public WebElement getDesignerDropdownMenuLink(){ return service.waitForVisibilityByLocator(designerDropdownLinkLocator); } - public WebElement getAcceptBtn(){ + public WebElement getAcceptBtn() { return service.waitForVisibilityByLocator(acceptBtnLocator); } diff --git a/src/test/java/page/DashboardPage.java b/src/test/java/page/DashboardPage.java index 5546f82..7859a01 100644 --- a/src/test/java/page/DashboardPage.java +++ b/src/test/java/page/DashboardPage.java @@ -1,6 +1,7 @@ package page; import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import utils.BasePage; @@ -8,7 +9,11 @@ public class DashboardPage extends BasePage { private By addProjectBtnLocator = By.id("sidebar-projects-add"); - public WebElement getAddProjectBtn(){ + public DashboardPage(WebDriver driver) { + super(driver); + } + + public WebElement getAddProjectBtn() { return service.waitForVisibilityByLocator(addProjectBtnLocator); } } diff --git a/src/test/java/page/LoginPage.java b/src/test/java/page/LoginPage.java index 8e208b3..d34747e 100644 --- a/src/test/java/page/LoginPage.java +++ b/src/test/java/page/LoginPage.java @@ -1,6 +1,7 @@ package page; import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import utils.BasePage; @@ -10,13 +11,17 @@ public class LoginPage extends BasePage { private By pswInputLocator = By.id("password"); private By loginBtn = By.id("button_primary"); - public WebElement getEmailInput(){ + public LoginPage(WebDriver driver) { + super(driver); + } + + public WebElement getEmailInput() { return service.waitForVisibilityByLocator(emailInputLocator); } - public WebElement getPassInput(){ + public WebElement getPassInput() { return service.waitForVisibilityByLocator(pswInputLocator); } - public WebElement getLoginButton(){ + public WebElement getLoginButton() { return service.waitForVisibilityByLocator(loginBtn); } } diff --git a/src/test/java/page/OverviewPage.java b/src/test/java/page/OverviewPage.java index d3a8afd..e40d39f 100644 --- a/src/test/java/page/OverviewPage.java +++ b/src/test/java/page/OverviewPage.java @@ -1,6 +1,7 @@ package page; import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import utils.BasePage; @@ -11,16 +12,20 @@ public class OverviewPage extends BasePage { 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(){ + public OverviewPage(WebDriver driver) { + super(driver); + } + + public Boolean isBannerOnPage() { return isItemOnAPage(successBannerLocator); } - public WebElement getDeleteBtn(){ + public WebElement getDeleteBtn() { return service.waitForVisibilityByLocator(deleteBtnLocator); } - public WebElement getCheckbox(){ + public WebElement getCheckbox() { return service.waitForVisibilityByLocator(checkboxLocator); } - public WebElement getConfirmButton(){ + public WebElement getConfirmButton() { return service.waitForVisibilityByLocator(confirmButtonLocator); } } diff --git a/src/test/java/step/LoginStep.java b/src/test/java/step/LoginStep.java index 92318c5..fb899a0 100644 --- a/src/test/java/step/LoginStep.java +++ b/src/test/java/step/LoginStep.java @@ -3,25 +3,25 @@ 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 utils.BaseCucumberStep; -public class LoginStep extends BaseCucumberStep { +public class LoginStep extends BaseCucumberStep{ private LoginPage loginPage; - - - public LoginStep(LoginPage loginPage) { - this.loginPage = loginPage; - } - @Given("driver is ready") public void openDriver() { driver.get("https://piogjheioghtor.testrail.io/index.php?/auth/login/LWZhMDA0NWExYzgyM2UyNWUzMDVjMjE3ZmRjNzU1ZWEzMjJkOTZmNWY1MWEwODk0MDNjZDJhN2E1NTQ2YTEzM2Y:"); } + @Given("page is opened") + public void openPage() { + loginPage = new LoginPage(driver); + } + @When("perform login with {string} email and {string} password") public void performLogin(String email, String pass) { loginPage.getEmailInput().sendKeys(email); diff --git a/src/test/java/step/Project.java b/src/test/java/step/Project.java index 8f1dbbf..0b9d06a 100644 --- a/src/test/java/step/Project.java +++ b/src/test/java/step/Project.java @@ -1,5 +1,7 @@ package step; +import com.beust.ah.A; +import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; import org.testng.Assert; @@ -16,10 +18,11 @@ public class Project extends BaseCucumberStep { - public Project(DashboardPage dashboardPage, AddProjectPage addProjectPage, OverviewPage overviewPage) { - this.dashboardPage = dashboardPage; - this.addProjectPage = addProjectPage; - this.overviewPage = overviewPage; + @Given("pages opened") + public void openPages() { + dashboardPage = new DashboardPage(driver); + addProjectPage = new AddProjectPage(driver); + overviewPage = new OverviewPage(driver); } @When("Delete project") diff --git a/src/test/java/utils/BasePage.java b/src/test/java/utils/BasePage.java index b1ece15..40fa00f 100644 --- a/src/test/java/utils/BasePage.java +++ b/src/test/java/utils/BasePage.java @@ -2,16 +2,19 @@ import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebDriver; import wait_service.WaitService; -public class BasePage extends BaseCucumberStep { +public class BasePage{ public WaitService service; + private WebDriver driver; - public BasePage(){ - service = new WaitService(driver); + public BasePage(WebDriver driver) { + this.service = new WaitService(driver); + this.driver = driver; } - protected Boolean isItemOnAPage(By by){ + protected Boolean isItemOnAPage(By by) { try { return driver.findElement(by).isDisplayed(); } catch (NoSuchElementException e) { diff --git a/src/test/resources/features/login.feature b/src/test/resources/features/login.feature index 52fb03c..d2e66dc 100644 --- a/src/test/resources/features/login.feature +++ b/src/test/resources/features/login.feature @@ -1,14 +1,13 @@ Feature: Full test rail test - Scenario: Login attempt + Scenario: Login, create project, delete project Given driver is ready + Given page is opened Then login page is opened - When perform login with "chichaevwork+qazwsx@gmail.com" email and "Qwerty1234%" password + When perform login with "email" email and "password" password Then Dashboard page is opened - - Scenario: Create project + Given pages opened 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 + Then Banner on a page +