Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 32 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,39 @@

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.10.0</version>
</dependency>

<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.4.0</version>
</dependency>

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.8.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.15.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>7.15.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>7.15.0</version>
</dependency>
</dependencies>
</project>
23 changes: 23 additions & 0 deletions src/main/java/wait_service/WaitService.java
Original file line number Diff line number Diff line change
@@ -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));
}

}
33 changes: 33 additions & 0 deletions src/main/java/web_driver/WebDriverFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
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;

public class WebDriverFactory {

private static WebDriver driver;

public WebDriver getDriver(){
WebDriverManager.edgedriver().setup();
if (driver == null){
driver = new EdgeDriver(edgeOptions());
}
return driver;
}

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;
}

}
17 changes: 17 additions & 0 deletions src/test/java/RunCucumberTest.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
31 changes: 31 additions & 0 deletions src/test/java/page/AddProjectPage.java
Original file line number Diff line number Diff line change
@@ -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);
}

}
14 changes: 14 additions & 0 deletions src/test/java/page/DashboardPage.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
22 changes: 22 additions & 0 deletions src/test/java/page/LoginPage.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
26 changes: 26 additions & 0 deletions src/test/java/page/OverviewPage.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
46 changes: 46 additions & 0 deletions src/test/java/step/LoginStep.java
Original file line number Diff line number Diff line change
@@ -0,0 +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;
}

@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:");
}
}
45 changes: 45 additions & 0 deletions src/test/java/step/Project.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
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;

public class Project {

private DashboardPage dashboardPage;
private AddProjectPage addProjectPage;
private OverviewPage overviewPage;



public Project(DashboardPage dashboardPage, AddProjectPage addProjectPage, OverviewPage overviewPage) {
this.dashboardPage = dashboardPage;
this.addProjectPage = addProjectPage;
this.overviewPage = overviewPage;
}

@When("Delete project")
public void deleteProject() {
overviewPage.getDeleteBtn().click();
overviewPage.getCheckbox().click();
overviewPage.getConfirmButton().click();
}
@When("Create project")
public void createProject() {
dashboardPage.getAddProjectBtn().click();

addProjectPage.getNameInput().sendKeys("test");
addProjectPage.getAccessBtn().click();
addProjectPage.getAccessDropdownBtn().click();
addProjectPage.getDesignerDropdownMenuLink().click();
addProjectPage.getAcceptBtn().click();
}

@Then("Banner on a page")
public void isBannerOnPage() {
Assert.assertTrue(overviewPage.isBannerOnPage());
}
}
27 changes: 27 additions & 0 deletions src/test/java/test/LoginTest.java
Original file line number Diff line number Diff line change
@@ -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");
}
}
34 changes: 34 additions & 0 deletions src/test/java/test/ProjectTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
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());
}
}
Loading