All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.epam.jdi.light.elements.base.UIElement Maven / Gradle / Ivy

There is a newer version: 1.6.0
Show newest version
package com.epam.jdi.light.elements.base;

/**
 * Created by Roman Iovlev on 14.02.2018
 * Email: [email protected]; Skype: roman.iovlev
 */

import com.epam.jdi.light.asserts.IsAssert;
import com.epam.jdi.light.common.JDIAction;
import com.epam.jdi.light.elements.interfaces.SetValue;
import com.epam.jdi.tools.func.JFunc1;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;

import static com.epam.jdi.light.common.Exceptions.exception;
import static com.epam.jdi.light.driver.WebDriverByUtils.uiSearch;
import static com.epam.jdi.tools.EnumUtils.getEnumValue;
import static com.epam.jdi.tools.LinqUtils.valueOrDefault;
import static com.epam.jdi.tools.PrintUtils.print;
import static java.lang.Thread.currentThread;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

public class UIElement extends JDIBase implements WebElement, BaseElement, SetValue {
    public UIElement() { }
    public UIElement(WebElement el) { webElement.setForce(el); }

    //region WebElement Wrapper
    @JDIAction
    public void click() {
        get().click();
    }
    public void submit() {
        get().submit();
    }
    @JDIAction("Input {value}")
    public void sendKeys(CharSequence... value) {
        checkEnabled();
        get().sendKeys(value);
    }
    protected void checkEnabled() {
        if (isDisabled()) {
            String methodName = currentThread().getStackTrace()[2].getMethodName();
            throw exception("Can't do "+methodName+" for disabled element '"+getName()+"'");
        }
    }

    @JDIAction
    public void clear() {
        get().clear();
    }
    public String getTagName() {
        return get().getTagName();
    }
    @JDIAction
    public String getText() {
        WebElement el = get();
        String text = el.getText();
        if (isNotBlank(text))
            return text;
        String value = el.getAttribute("value");
        return isNotBlank(value) ? value : text;
    }

    public List findElements(By by) {
        return uiSearch(get(),by);
    }

    public WebElement findElement(By by) {
        return findElements(by).get(0);
    }

    @JDIAction
    public boolean isSelected() {
        return get().isSelected() || getAttribute("class").contains("checked") ||
                getAttribute("checked").equals("true");
    }
    @JDIAction
    public boolean isEnabled() {
        String cl = getAttribute("class");
        return cl.contains("active") ||
                get().isEnabled() && !cl.contains("disabled");
    }

    @JDIAction
    public boolean isDisplayed() {
        try {
            WebElement el = get();
            return el != null && el.isDisplayed();
        } catch (Exception ex) { return false; }
    }
    public Point getLocation() {
        return get().getLocation();
    }
    public Dimension getSize() {
        return get().getSize();
    }
    public Rectangle getRect() {
        return get().getRect();
    }
    public String getCssValue(String s) {
        return get().getCssValue(s);
    }
    public  X getScreenshotAs(OutputType outputType) throws WebDriverException {
        return get().getScreenshotAs(outputType);
    }
    public String getAttribute(String name) {
        return valueOrDefault(get().getAttribute(name), "");
    }
    //endregion

    //region Enchantments
    @JDIAction
    public void hover() {
        doActions(a -> a.moveToElement(get()));
    }
    @JDIAction
    public void jsClick() {
        jsExecute("click()");
    }

    @JDIAction("Input {value}")
    public void input(String value) {
        clear();
        sendKeys(value);
    }
    public void focus(){ sendKeys(""); }

    @JDIAction
    public void setText(String value) {
        //setAttribute("value", value);
        jsExecute("value='"+value+"'");
    }
    public UIElement find(String by) {
        return find(By.cssSelector(by));
    }

    public UIElement find(By by) {
        UIElement el = new UIElement();
        el.parent = this;
        el.setLocator(by);
        return el;
    }

    public List finds(String by) {
        return finds(By.cssSelector(by));
    }

    public List finds(By by) {
        UIElement el = new UIElement();
        el.parent = this;
        el.setLocator(by);
        return el.allUI();
    }

    public void setAttribute(String name, String value) {
        jsExecute("setAttribute('"+name+"','"+value+"')");
    }
    public List getAllAttributes() {
        List result;
        try {
            result = (List) js().executeScript("var s = []; var attrs = arguments[0].attributes; for (var l = 0; l < attrs.length; ++l) { var a = attrs[l]; s.push(a.name + '=\"' + a.value + '\"'); } ; return s;", get());
        } catch (Exception ignore) { return new ArrayList<>(); }
        if (getAttribute("selected").equals("true"))
            result.add("selected");
        if (getAttribute("checked").equals("true"))
            result.add("checked");
        return result;
    }
    public String printHtml() {
        return MessageFormat.format("<{0}{1}>{2}", getTagName(),
                print(getAllAttributes(), el -> " "+ el), getAttribute("innerHTML"));
    }

    public boolean isDisabled() {
        return !isEnabled();
    }
    public boolean isHidden() {
        return !isDisplayed();
    }

    @JDIAction
    public void higlight(String color) {
        jsExecute("style.border='3px dashed "+color+"'");
    }
    public void higlight() { show();
        higlight("red");
    }
    @JDIAction
    public void show() {
        jsExecute("scrollIntoView(true)");
    }

    public String getValue() {
        return getText();
    }

    @JDIAction
    public void select(String name) {
        get(name).click();
    }
    @JDIAction
    public  void select(TEnum name) {
        select(getEnumValue(name));
    }

    public void setValue(String value) {
        setText(value);
    }
    public Select select() {
        return new Select(get());
    }
    //endregion

    //region Actions
    @JDIAction
    public void dragAndDropTo(WebElement to) {
        doActions(a -> a.clickAndHold(get()).moveToElement(to).release(to));
    }
    @JDIAction
    public void doubleClick() {
        doActions(Actions::doubleClick);
    }
    @JDIAction
    public void rightClick() {
        doActions(Actions::contextClick);
    }
    @JDIAction
    public void dragAndDropTo(int x, int y) {
        doActions(a -> a.dragAndDropBy(get(), x, y));
    }
    public void doActions(JFunc1 actions) {
        actions.execute(new Actions(driver())).build().perform();
    }
    //endregion

    //region Asserts
    public IsAssert is() {
        return new IsAssert(this);
    }
    public IsAssert assertThat() {
        return is();
    }
    //endregion
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy