From 3b1af3333d687e354ab9fa0a475ae7ef74b740f9 Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Tue, 20 Sep 2022 21:13:24 +0500 Subject: Add testing framework --- .../mavlushechka/a1qa/elements/BaseElement.java | 71 ++++++++++++++++++++++ .../com/mavlushechka/a1qa/elements/Button.java | 11 ++++ .../java/com/mavlushechka/a1qa/elements/Field.java | 29 +++++++++ .../java/com/mavlushechka/a1qa/elements/Label.java | 11 ++++ .../com/mavlushechka/a1qa/elements/Slider.java | 29 +++++++++ 5 files changed, 151 insertions(+) create mode 100644 src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java create mode 100644 src/main/java/com/mavlushechka/a1qa/elements/Button.java create mode 100644 src/main/java/com/mavlushechka/a1qa/elements/Field.java create mode 100644 src/main/java/com/mavlushechka/a1qa/elements/Label.java create mode 100644 src/main/java/com/mavlushechka/a1qa/elements/Slider.java (limited to 'src/main/java/com/mavlushechka/a1qa/elements') diff --git a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java new file mode 100644 index 0000000..edcf1e7 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java @@ -0,0 +1,71 @@ +package com.mavlushechka.a1qa.elements; + +import com.mavlushechka.a1qa.driverUtils.WebDriverUtils; +import com.mavlushechka.a1qa.utils.LoggerUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.WebElement; + +public abstract class BaseElement { + + private final By locator; + private final String name; + + + public BaseElement(By locator, String name) { + this.locator = locator; + this.name = name; + } + + public void click() { + WebElement webElement = find(); + + LoggerUtils.info("Clicking on the \"" + name + "\" element."); + webElement.click(); + } + + public String getText() { + WebElement webElement = find(); + + LoggerUtils.info("Getting text of the \"" + name + "\" element."); + return webElement.getText(); + } + + public boolean isEnabled() { + WebElement webElement = find(); + + LoggerUtils.info("Getting state of the \"" + name + "\" element."); + return webElement.isEnabled(); + } + + public boolean isVisible() { + WebElement webElement = find(); + + LoggerUtils.info("Getting visibility of the \"" + name + "\" element."); + return webElement.isDisplayed(); + } + + public String getName() { + return name; + } + + public Dimension getDimension() { + WebElement webElement = find(); + + LoggerUtils.info("Getting dimension of the \"" + name + "\" element."); + return webElement.getSize(); + } + + public String getAttributeValue(String attribute) { + WebElement webElement = find(); + + LoggerUtils.info("Getting \"" + attribute + "\" attribute of the \"" + name + "\" element."); + return webElement.getAttribute(attribute); + } + + protected WebElement find() { + LoggerUtils.info("Finding the \"" + name + "\" element."); + return WebDriverUtils.findElement(locator); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Button.java b/src/main/java/com/mavlushechka/a1qa/elements/Button.java new file mode 100644 index 0000000..d68b5f6 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/elements/Button.java @@ -0,0 +1,11 @@ +package com.mavlushechka.a1qa.elements; + +import org.openqa.selenium.By; + +public class Button extends BaseElement { + + public Button(By locator, String name) { + super(locator, name); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Field.java b/src/main/java/com/mavlushechka/a1qa/elements/Field.java new file mode 100644 index 0000000..bf573db --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/elements/Field.java @@ -0,0 +1,29 @@ +package com.mavlushechka.a1qa.elements; + +import com.mavlushechka.a1qa.utils.LoggerUtils; +import com.mavlushechka.a1qa.utils.StringUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; + +public class Field extends BaseElement { + + public Field(By locator, String name) { + super(locator, name); + } + + public void sendKeys(String keys) { + sendKeys(keys, false); + } + + public void sendKeys(String keys, boolean isSecret) { + WebElement field = find(); + + LoggerUtils.info("Entering \"" + (isSecret ? StringUtils.replaceByStars(keys) : keys) + "\" keys to the \"" + getName() + "\" field."); + field.sendKeys(keys); + } + + public String getValue() { + return find().getAttribute("value"); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Label.java b/src/main/java/com/mavlushechka/a1qa/elements/Label.java new file mode 100644 index 0000000..a822f63 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/elements/Label.java @@ -0,0 +1,11 @@ +package com.mavlushechka.a1qa.elements; + +import org.openqa.selenium.By; + +public class Label extends BaseElement { + + public Label(By locator, String name) { + super(locator, name); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Slider.java b/src/main/java/com/mavlushechka/a1qa/elements/Slider.java new file mode 100644 index 0000000..45c1e69 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/elements/Slider.java @@ -0,0 +1,29 @@ +package com.mavlushechka.a1qa.elements; + +import com.mavlushechka.a1qa.driverUtils.ActionUtils; +import com.mavlushechka.a1qa.utils.DoubleUtils; +import com.mavlushechka.a1qa.utils.LoggerUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.Point; +import org.openqa.selenium.WebElement; + +public class Slider extends BaseElement { + + public Slider(By locator, String name) { + super(locator, name); + } + + public void slideTo(int percentage) { + WebElement slider = find(); + Point currentPoint = new Point((int) Math.round(DoubleUtils.getPercentageOf(slider.getSize().getWidth(), getValue())-getDimension().width/2.0), 0); + Point expectedPoint = new Point((int) Math.round(DoubleUtils.getPercentageOf(slider.getSize().getWidth(), percentage)-getDimension().width/2.0), 0); + + LoggerUtils.info("Sliding on the \"" + getName() + "\" element."); + ActionUtils.dragAndDrop(slider, currentPoint, expectedPoint); + } + + public int getValue() { + return Integer.parseInt(find().getAttribute("value")); + } + +} -- cgit v1.2.3 From 7aa745ca6f86c307e871dd908b79bc296393d476 Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Wed, 21 Sep 2022 01:29:12 +0500 Subject: Add clear() method to Field class --- src/main/java/com/mavlushechka/a1qa/elements/Field.java | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/main/java/com/mavlushechka/a1qa/elements') diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Field.java b/src/main/java/com/mavlushechka/a1qa/elements/Field.java index bf573db..99cd41d 100644 --- a/src/main/java/com/mavlushechka/a1qa/elements/Field.java +++ b/src/main/java/com/mavlushechka/a1qa/elements/Field.java @@ -22,6 +22,13 @@ public class Field extends BaseElement { field.sendKeys(keys); } + public void clear() { + WebElement field = find(); + + LoggerUtils.info("Clearing the \"" + getName() + "\" field."); + field.clear(); + } + public String getValue() { return find().getAttribute("value"); } -- cgit v1.2.3 From 4d09a3fe0610acdac4d65ba858e771afc6fc062c Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Thu, 22 Sep 2022 00:51:58 +0500 Subject: Add the isInvisible() method to the BaseElement class --- src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/mavlushechka/a1qa/elements') diff --git a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java index edcf1e7..8a7408d 100644 --- a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java +++ b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java @@ -1,10 +1,12 @@ package com.mavlushechka.a1qa.elements; import com.mavlushechka.a1qa.driverUtils.WebDriverUtils; +import com.mavlushechka.a1qa.driverUtils.WebDriverWaitFactory; import com.mavlushechka.a1qa.utils.LoggerUtils; import org.openqa.selenium.By; import org.openqa.selenium.Dimension; import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; public abstract class BaseElement { @@ -42,7 +44,14 @@ public abstract class BaseElement { WebElement webElement = find(); LoggerUtils.info("Getting visibility of the \"" + name + "\" element."); - return webElement.isDisplayed(); + return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.visibilityOf(webElement)).isDisplayed(); + } + + public boolean isInvisible() { + WebElement webElement = find(); + + LoggerUtils.info("Getting invisibility of the \"" + name + "\" element."); + return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.invisibilityOf(webElement)); } public String getName() { -- cgit v1.2.3 From 28c1d2972e31012a8040d6b42a81ee21d988a476 Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Thu, 22 Sep 2022 00:55:08 +0500 Subject: Add checking visibility of an element before finding the element in the BaseElement class --- src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'src/main/java/com/mavlushechka/a1qa/elements') diff --git a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java index 8a7408d..29666be 100644 --- a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java +++ b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java @@ -41,17 +41,13 @@ public abstract class BaseElement { } public boolean isVisible() { - WebElement webElement = find(); - LoggerUtils.info("Getting visibility of the \"" + name + "\" element."); - return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.visibilityOf(webElement)).isDisplayed(); + return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.visibilityOfElementLocated(locator)).isDisplayed(); } public boolean isInvisible() { - WebElement webElement = find(); - LoggerUtils.info("Getting invisibility of the \"" + name + "\" element."); - return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.invisibilityOf(webElement)); + return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.invisibilityOfElementLocated(locator)); } public String getName() { @@ -73,6 +69,7 @@ public abstract class BaseElement { } protected WebElement find() { + isVisible(); LoggerUtils.info("Finding the \"" + name + "\" element."); return WebDriverUtils.findElement(locator); } -- cgit v1.2.3 From cb46f3d30cb8e85a18d91a8d86a3a9164e0c6af3 Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Thu, 22 Sep 2022 00:56:27 +0500 Subject: Add the scrollTo() protected method to the BaseElement class --- src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/main/java/com/mavlushechka/a1qa/elements') diff --git a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java index 29666be..6cb10e5 100644 --- a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java +++ b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java @@ -1,5 +1,6 @@ package com.mavlushechka.a1qa.elements; +import com.mavlushechka.a1qa.driverUtils.ActionUtils; import com.mavlushechka.a1qa.driverUtils.WebDriverUtils; import com.mavlushechka.a1qa.driverUtils.WebDriverWaitFactory; import com.mavlushechka.a1qa.utils.LoggerUtils; @@ -74,4 +75,11 @@ public abstract class BaseElement { return WebDriverUtils.findElement(locator); } + protected void scrollTo() { + WebElement webElement = find(); + + LoggerUtils.info("Scrolling to the \"" + name + "\" element."); + ActionUtils.scrollTo(webElement); + } + } -- cgit v1.2.3 From 441d7a21494f3cb9a16ae6095540326938af536b Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Thu, 22 Sep 2022 00:57:18 +0500 Subject: Use the scrollTo() method in the click() method before clicking on the element in BaseElement class --- src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src/main/java/com/mavlushechka/a1qa/elements') diff --git a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java index 6cb10e5..a2dc55a 100644 --- a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java +++ b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java @@ -23,6 +23,7 @@ public abstract class BaseElement { public void click() { WebElement webElement = find(); + scrollTo(); LoggerUtils.info("Clicking on the \"" + name + "\" element."); webElement.click(); } -- cgit v1.2.3