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

ru.mk.pump.web.elements.internal.impl.CheckBoxImpl Maven / Gradle / Ivy

package ru.mk.pump.web.elements.internal.impl;

import org.openqa.selenium.By;
import ru.mk.pump.web.browsers.Browser;
import ru.mk.pump.web.constants.ElementParams;
import ru.mk.pump.web.elements.api.Element;
import ru.mk.pump.web.elements.api.annotations.FrameworkImpl;
import ru.mk.pump.web.elements.api.concrete.CheckBox;
import ru.mk.pump.web.elements.api.concrete.complex.Child;
import ru.mk.pump.web.elements.enums.CheckBoxState;
import ru.mk.pump.web.elements.internal.BaseElement;
import ru.mk.pump.web.elements.internal.interfaces.Action;
import ru.mk.pump.web.elements.internal.interfaces.InternalElement;
import ru.mk.pump.web.page.api.Page;

@SuppressWarnings({"unused", "WeakerAccess"})
@FrameworkImpl
public class CheckBoxImpl extends BaseElement implements CheckBox {

    private final static By[] DEFAULT_INPUT_BY = {By.tagName("input")};

    private Child input;

    public CheckBoxImpl(By avatarBy, Page page) {
        super(avatarBy, page);
    }

    public CheckBoxImpl(By avatarBy, InternalElement parentElement) {
        super(avatarBy, parentElement);
    }

    public CheckBoxImpl(By avatarBy, Browser browser) {
        super(avatarBy, browser);
    }

    @Override
    public CheckBoxState getState() {
        Action action = newDelegateActionFactory().newAction((webElement) ->
            getInput().advanced().getActionExecutor().execute(getInput().advanced().getActionsStore().selected())
        , "Check state");

        if (getActionExecutor().execute(action)) {
            return CheckBoxState.CHECKED;
        } else {
            return CheckBoxState.UNCHECKED;
        }
    }

    @Override
    public void setState(CheckBoxState state) {
        if (getState() != state) {
            click();
        }
    }

    private Element getInput() {
        /*исходный элемент уже input*/
        if ("input".equals(getTagName())) {
            return this;
        }
        /*инициализировать Child для поиска и хранения input*/
        if (input == null) {
            input = new Child<>(this, ElementParams.EXTRA_INPUT_BY.getName()).withDefaultBy(DEFAULT_INPUT_BY);
        }
        return input.get(Element.class);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy