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/wait_service/WaitService.java b/src/main/java/wait_service/WaitService.java
new file mode 100644
index 0000000..e96d1cd
--- /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
new file mode 100644
index 0000000..f0f423c
--- /dev/null
+++ b/src/main/java/web_driver/WebDriverFactory.java
@@ -0,0 +1,32 @@
+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;
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/elements/Button.java b/src/test/java/elements/Button.java
new file mode 100644
index 0000000..56b7c5e
--- /dev/null
+++ b/src/test/java/elements/Button.java
@@ -0,0 +1,22 @@
+package elements;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class Button {
+
+ private UIElement uiElement;
+
+ public Button(WebDriver driver, By locator) {
+ uiElement = new UIElement(driver, locator);
+ }
+
+ public Button(WebDriver driver, WebElement element) {
+ uiElement = new UIElement(driver, element);
+ }
+
+ public void click() {
+ uiElement.click();
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/elements/CheckBox.java b/src/test/java/elements/CheckBox.java
new file mode 100644
index 0000000..ff673f1
--- /dev/null
+++ b/src/test/java/elements/CheckBox.java
@@ -0,0 +1,22 @@
+package elements;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class CheckBox {
+
+ private UIElement uiElement;
+
+ public CheckBox(WebDriver driver, By locator) {
+ uiElement = new UIElement(driver, locator);
+ }
+
+ public CheckBox(WebDriver driver, WebElement element) {
+ uiElement = new UIElement(driver, element);
+ }
+
+ public void click() {
+ uiElement.click();
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/elements/DropDown.java b/src/test/java/elements/DropDown.java
new file mode 100644
index 0000000..449e869
--- /dev/null
+++ b/src/test/java/elements/DropDown.java
@@ -0,0 +1,22 @@
+package elements;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.Select;
+
+public class DropDown{
+
+ private UIElement uiElement;
+ public Select select;
+
+ public DropDown(WebDriver driver, By locator) {
+ uiElement = new UIElement(driver, locator);
+ select = new Select(uiElement);
+ }
+
+ public DropDown(WebDriver driver, WebElement element) {
+ uiElement = new UIElement(driver, element);
+ select = new Select(uiElement);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/elements/RadioButtonTable.java b/src/test/java/elements/RadioButtonTable.java
new file mode 100644
index 0000000..b20a869
--- /dev/null
+++ b/src/test/java/elements/RadioButtonTable.java
@@ -0,0 +1,23 @@
+package elements;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class RadioButtonTable {
+
+ private UIElement uiElement;
+
+ public RadioButtonTable(WebDriver driver, WebElement element) {
+ uiElement = new UIElement(driver, element);
+ }
+
+ public RadioButtonTable(WebDriver driver, By locator) {
+ uiElement = new UIElement(driver, locator);
+ }
+
+
+ public void selectButtonByValue(int value) {
+ uiElement.findElement(By.xpath("//input[@type='radio' and @value='" + value + "']")).click();
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/elements/TextInput.java b/src/test/java/elements/TextInput.java
new file mode 100644
index 0000000..6b605dd
--- /dev/null
+++ b/src/test/java/elements/TextInput.java
@@ -0,0 +1,22 @@
+package elements;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class TextInput {
+
+ private UIElement uiElement;
+
+ public TextInput(WebDriver driver, By locator) {
+ uiElement = new UIElement(driver, locator);
+ }
+
+ public TextInput(WebDriver driver, WebElement element) {
+ uiElement = new UIElement(driver, element);
+ }
+
+ public void sendKeys(CharSequence... s) {
+ uiElement.sendKeys(s);
+ }
+}
diff --git a/src/test/java/elements/UIElement.java b/src/test/java/elements/UIElement.java
new file mode 100644
index 0000000..c2e0907
--- /dev/null
+++ b/src/test/java/elements/UIElement.java
@@ -0,0 +1,128 @@
+package elements;
+
+import org.openqa.selenium.*;
+import wait_service.WaitService;
+
+import java.rmi.server.UID;
+import java.util.ArrayList;
+import java.util.List;
+
+public class UIElement implements WebElement {
+
+ private WebElement webElement;
+ private WaitService waitService;
+ private WebDriver driver;
+
+ public UIElement(WebDriver driver, WebElement element) {
+ this.driver = driver;
+ this.waitService = new WaitService(driver);
+ this.webElement = element;
+ }
+
+ public UIElement(WebDriver driver, By locator) {
+ this.driver = driver;
+ this.waitService = new WaitService(driver);
+ this.webElement = waitService.waitForVisibilityByLocator(locator);
+ }
+
+
+ @Override
+ public void click() {
+ moveToElement();
+ submit();
+ }
+
+ @Override
+ public void submit() {
+ webElement.submit();
+ }
+
+ @Override
+ public void sendKeys(CharSequence... keysToSend) {
+ moveToElement();
+ webElement.sendKeys(keysToSend);
+ }
+
+ @Override
+ public void clear() {
+ webElement.clear();
+ }
+
+ @Override
+ public String getTagName() {
+ return webElement.getTagName();
+ }
+
+ @Override
+ public String getAttribute(String name) {
+ return webElement.getAttribute(name);
+ }
+
+ @Override
+ public boolean isSelected() {
+ return webElement.isSelected();
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return webElement.isEnabled();
+ }
+
+ @Override
+ public String getText() {
+ return webElement.getText();
+ }
+
+ @Override
+ public List findElements(By by) {
+ return webElement.findElements(by);
+ }
+
+ public List findUIElements(By by) {
+ ArrayList list = new ArrayList<>();
+ for (WebElement element : webElement.findElements(by)) {
+ list.add(new UIElement(driver, element));
+ }
+ return list;
+ }
+
+
+ @Override
+ public UIElement findElement(By by) {
+ return new UIElement(driver, webElement.findElement(by));
+ }
+
+ @Override
+ public boolean isDisplayed() {
+ return webElement.isDisplayed();
+ }
+
+ @Override
+ public Point getLocation() {
+ return webElement.getLocation();
+ }
+
+ @Override
+ public Dimension getSize() {
+ return webElement.getSize();
+ }
+
+ @Override
+ public Rectangle getRect() {
+ return webElement.getRect();
+ }
+
+ @Override
+ public String getCssValue(String propertyName) {
+ return webElement.getCssValue(propertyName);
+ }
+
+ @Override
+ public X getScreenshotAs(OutputType target) throws WebDriverException {
+ return webElement.getScreenshotAs(target);
+ }
+
+ public void moveToElement() {
+ ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true)", webElement);
+ }
+}
diff --git a/src/test/java/elements/table/Table.java b/src/test/java/elements/table/Table.java
new file mode 100644
index 0000000..6fbb868
--- /dev/null
+++ b/src/test/java/elements/table/Table.java
@@ -0,0 +1,25 @@
+package elements.table;
+
+import elements.UIElement;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class Table {
+
+ private UIElement uiElement;
+ public TableHeader tableHeader;
+ public TableBody tableBody;
+
+ public Table(WebDriver driver, By locator) {
+ uiElement = new UIElement(driver, locator);
+ tableBody = new TableBody(driver, uiElement.findElement(By.cssSelector("tbody")));
+ tableHeader = new TableHeader(driver, uiElement.findElement(By.cssSelector("thead")));
+ }
+
+ public Table(WebDriver driver, WebElement element) {
+ uiElement = new UIElement(driver, element);
+ tableBody = new TableBody(driver, uiElement.findElement(By.cssSelector("tbody")));
+ tableHeader = new TableHeader(driver, uiElement.findElement(By.cssSelector("thead")));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/elements/table/TableBody.java b/src/test/java/elements/table/TableBody.java
new file mode 100644
index 0000000..180db42
--- /dev/null
+++ b/src/test/java/elements/table/TableBody.java
@@ -0,0 +1,36 @@
+package elements.table;
+
+import elements.UIElement;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TableBody {
+
+ private UIElement uiElement;
+
+ public TableBody(WebDriver driver, By locator) {
+ uiElement = new UIElement(driver, locator);
+ }
+
+ public TableBody(WebDriver driver, WebElement element) {
+ uiElement = new UIElement(driver, element);
+ }
+
+ public List getColumnByIndex(int index) {
+ List columns = uiElement.findUIElements(By.tagName("tr"));
+ UIElement column = columns.get(index -1);
+ return column.findUIElements(By.tagName("td"));
+ }
+
+ public List getRowByIndex(int index) {
+ return uiElement.findUIElements(By.cssSelector(".column" + index));
+ }
+
+ public UIElement getCellByRowAndColumn(int row, int column) {
+ return getColumnByIndex(column).get(row -1);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/elements/table/TableHeader.java b/src/test/java/elements/table/TableHeader.java
new file mode 100644
index 0000000..9f17525
--- /dev/null
+++ b/src/test/java/elements/table/TableHeader.java
@@ -0,0 +1,26 @@
+package elements.table;
+
+import elements.UIElement;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public class TableHeader {
+
+ private UIElement uiElement;
+
+ public TableHeader(WebDriver driver, By locator) {
+ uiElement = new UIElement(driver, locator);
+ }
+
+ public TableHeader(WebDriver driver, WebElement element) {
+ uiElement = new UIElement(driver, element);
+ }
+
+ public String getColumnHeaderTextByIndex(int index) {
+ List headerCells = uiElement.findUIElements(By.tagName("th"));
+ return headerCells.get(index -1).getText();
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/page/AddProjectPage.java b/src/test/java/page/AddProjectPage.java
new file mode 100644
index 0000000..b2484eb
--- /dev/null
+++ b/src/test/java/page/AddProjectPage.java
@@ -0,0 +1,39 @@
+package page;
+
+import elements.Button;
+import elements.DropDown;
+import elements.RadioButtonTable;
+import elements.TextInput;
+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 radioButtonTableLocator = By.cssSelector("div.dirty-trackable.tab.tab1 > div.table");
+ private By acceptBtnLocator = By.id("accept");
+
+ public TextInput getNameInput() {
+ return new TextInput(webDriver, nameInputLocator);
+ }
+ public Button getAccessBtn() {
+ return new Button(webDriver, accessBtnLocator);
+ }
+
+ public RadioButtonTable getRadioButtonTable() {
+ return new RadioButtonTable(webDriver, radioButtonTableLocator);
+ }
+
+ public DropDown getAccessDropdownBtn() {
+ return new DropDown(webDriver, accessDropdownBtnLocator);
+ }
+
+ public Button getAcceptBtn() {
+ return new Button(webDriver, acceptBtnLocator);
+ }
+
+}
diff --git a/src/test/java/page/DashboardPage.java b/src/test/java/page/DashboardPage.java
new file mode 100644
index 0000000..cc94be8
--- /dev/null
+++ b/src/test/java/page/DashboardPage.java
@@ -0,0 +1,15 @@
+package page;
+
+import elements.Button;
+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 Button getAddProjectBtn() {
+ return new Button(webDriver, addProjectBtnLocator);
+ }
+}
diff --git a/src/test/java/page/LoginPage.java b/src/test/java/page/LoginPage.java
new file mode 100644
index 0000000..7006ea5
--- /dev/null
+++ b/src/test/java/page/LoginPage.java
@@ -0,0 +1,26 @@
+package page;
+
+import elements.Button;
+import elements.TextInput;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.w3c.dom.Text;
+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 webDriver.findElement(emailInputLocator);
+ }
+ public TextInput getPassInput() {
+ return new TextInput(webDriver, pswInputLocator);
+ }
+ public Button getLoginButton() {
+ return new Button(webDriver, loginBtn);
+ }
+}
diff --git a/src/test/java/page/OverviewPage.java b/src/test/java/page/OverviewPage.java
new file mode 100644
index 0000000..3c3f3f9
--- /dev/null
+++ b/src/test/java/page/OverviewPage.java
@@ -0,0 +1,28 @@
+package page;
+
+import elements.Button;
+import elements.CheckBox;
+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 Button getDeleteBtn() {
+ return new Button(webDriver, deleteBtnLocator);
+ }
+ public CheckBox getCheckbox() {
+ return new CheckBox(webDriver, checkboxLocator);
+ }
+ public Button getConfirmButton() {
+ return new Button(webDriver, confirmButtonLocator);
+ }
+}
diff --git a/src/test/java/page/TablePage.java b/src/test/java/page/TablePage.java
new file mode 100644
index 0000000..1b5f08a
--- /dev/null
+++ b/src/test/java/page/TablePage.java
@@ -0,0 +1,14 @@
+package page;
+
+import elements.table.Table;
+import org.openqa.selenium.By;
+import utils.BasePage;
+
+public class TablePage extends BasePage {
+
+ private By tableLocator = By.cssSelector(".table100");
+
+ public Table getTable() {
+ return new Table(webDriver, tableLocator);
+ }
+}
diff --git a/src/test/java/step/LoginStep.java b/src/test/java/step/LoginStep.java
new file mode 100644
index 0000000..9f91e97
--- /dev/null
+++ b/src/test/java/step/LoginStep.java
@@ -0,0 +1,18 @@
+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/step/Project.java b/src/test/java/step/Project.java
new file mode 100644
index 0000000..1d3b560
--- /dev/null
+++ b/src/test/java/step/Project.java
@@ -0,0 +1,36 @@
+package step;
+
+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;
+ }
+
+ public void deleteProject() {
+ overviewPage.getDeleteBtn().click();
+ overviewPage.getCheckbox().click();
+ overviewPage.getConfirmButton().click();
+ }
+
+ public void createProject() {
+ dashboardPage.getAddProjectBtn().click();
+
+ addProjectPage.getNameInput().sendKeys("test");
+ addProjectPage.getAccessBtn().click();
+ addProjectPage.getRadioButtonTable().selectButtonByValue(1);
+ //
+ addProjectPage.getAccessDropdownBtn().select.selectByValue("Designer");
+ //
+ addProjectPage.getAcceptBtn().click();
+ }
+}
diff --git a/src/test/java/step/TableStep.java b/src/test/java/step/TableStep.java
new file mode 100644
index 0000000..efedb96
--- /dev/null
+++ b/src/test/java/step/TableStep.java
@@ -0,0 +1,20 @@
+package step;
+
+import page.TablePage;
+
+public class TableStep{
+
+ private TablePage tablePage;
+
+ public TableStep(TablePage tablePage) {
+ this.tablePage = tablePage;
+ }
+
+ public String getTextFromCell(int row, int column) {
+ return tablePage.getTable().tableBody.getCellByRowAndColumn(row, column).getText();
+ }
+
+ public String getTextFromHeaderCell(int row) {
+ return tablePage.getTable().tableHeader.getColumnHeaderTextByIndex(row);
+ }
+}
diff --git a/src/test/java/test/LoginTest.java b/src/test/java/test/LoginTest.java
new file mode 100644
index 0000000..4a5c6b7
--- /dev/null
+++ b/src/test/java/test/LoginTest.java
@@ -0,0 +1,26 @@
+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://piogjheioghtor.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);
+ }
+}
diff --git a/src/test/java/test/ProjectTest.java b/src/test/java/test/ProjectTest.java
new file mode 100644
index 0000000..f212128
--- /dev/null
+++ b/src/test/java/test/ProjectTest.java
@@ -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", "create project"})
+ public void deleteProjectTest() {
+ project.deleteProject();
+ Assert.assertTrue(overviewPage.isBannerOnPage());
+ }
+}
diff --git a/src/test/java/test/TableTest.java b/src/test/java/test/TableTest.java
new file mode 100644
index 0000000..5cfb857
--- /dev/null
+++ b/src/test/java/test/TableTest.java
@@ -0,0 +1,32 @@
+package test;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+import page.TablePage;
+import step.TableStep;
+import utils.BaseTest;
+
+public class TableTest extends BaseTest {
+
+ private TableStep tableStep;
+
+ @BeforeMethod
+ public void setUpMethod(){
+ tableStep = new TableStep(new TablePage());
+ driver.get("https://colorlib.com/etc/tb/Table_Responsive_v1/index.html");
+ }
+
+ @Test
+ public void tableBodyTest(){
+ Assert.assertEquals(tableStep.getTextFromCell(2, 5), "200391");
+ }
+
+ @Test
+ public void tableHeaderTest(){
+ Assert.assertEquals(tableStep.getTextFromHeaderCell(3), "Name");
+ }
+
+
+
+}
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
new file mode 100644
index 0000000..c39219e
--- /dev/null
+++ b/src/test/java/utils/BaseTest.java
@@ -0,0 +1,23 @@
+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();
+ }
+}