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
33 changes: 30 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,37 @@

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

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

private WebDriver driver;

public WebDriverService() {
WebDriverManager.edgedriver().setup();
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");
driver = new EdgeDriver(edgeOptions);
}

public WebDriver getDriver() {
return driver;
}

}
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 = "step"
)
public class RunCucumberTest extends AbstractTestNGCucumberTests {

@Override
@DataProvider
public Object[][] scenarios() {
return super.scenarios();
}
}
36 changes: 36 additions & 0 deletions src/test/java/page/AddProjectPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package page;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
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 AddProjectPage(WebDriver driver) {
super(driver);
}

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

}
19 changes: 19 additions & 0 deletions src/test/java/page/DashboardPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package page;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import utils.BasePage;

public class DashboardPage extends BasePage {

private By addProjectBtnLocator = By.id("sidebar-projects-add");

public DashboardPage(WebDriver driver) {
super(driver);
}

public WebElement getAddProjectBtn() {
return service.waitForVisibilityByLocator(addProjectBtnLocator);
}
}
27 changes: 27 additions & 0 deletions src/test/java/page/LoginPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package page;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
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 LoginPage(WebDriver driver) {
super(driver);
}

public WebElement getEmailInput() {
return service.waitForVisibilityByLocator(emailInputLocator);
}
public WebElement getPassInput() {
return service.waitForVisibilityByLocator(pswInputLocator);
}
public WebElement getLoginButton() {
return service.waitForVisibilityByLocator(loginBtn);
}
}
31 changes: 31 additions & 0 deletions src/test/java/page/OverviewPage.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.WebDriver;
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 OverviewPage(WebDriver driver) {
super(driver);
}

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);
}
}
28 changes: 28 additions & 0 deletions src/test/java/step/Hook.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
41 changes: 41 additions & 0 deletions src/test/java/step/LoginStep.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package step;

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{

private 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);
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:");
}
}
49 changes: 49 additions & 0 deletions src/test/java/step/Project.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
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;
import page.AddProjectPage;
import page.DashboardPage;
import page.OverviewPage;
import utils.BaseCucumberStep;

public class Project extends BaseCucumberStep {

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



@Given("pages opened")
public void openPages() {
dashboardPage = new DashboardPage(driver);
addProjectPage = new AddProjectPage(driver);
overviewPage = new OverviewPage(driver);
}

@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());
}
}
8 changes: 8 additions & 0 deletions src/test/java/utils/BaseCucumberStep.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package utils;

import org.openqa.selenium.WebDriver;

public class BaseCucumberStep {

public static WebDriver driver;
}
24 changes: 24 additions & 0 deletions src/test/java/utils/BasePage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package utils;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import wait_service.WaitService;

public class BasePage{
public WaitService service;
private WebDriver driver;

public BasePage(WebDriver driver) {
this.service = new WaitService(driver);
this.driver = driver;
}

protected Boolean isItemOnAPage(By by) {
try {
return driver.findElement(by).isDisplayed();
} catch (NoSuchElementException e) {
return false;
}
}
}
13 changes: 13 additions & 0 deletions src/test/resources/features/login.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Feature: Full test rail test
Scenario: Login, create project, delete project
Given driver is ready
Given page is opened
Then login page is opened
When perform login with "email" email and "password" password
Then Dashboard page is opened
Given pages opened
When Create project
Then Banner on a page
When Delete project
Then Banner on a page