SideNavigationItemElement.java

package org.vaadin.addons.dramafinder.element;

import com.microsoft.playwright.Locator;
import com.microsoft.playwright.options.AriaRole;
import org.vaadin.addons.dramafinder.element.shared.HasEnabledElement;
import org.vaadin.addons.dramafinder.element.shared.HasLabelElement;
import org.vaadin.addons.dramafinder.element.shared.HasPrefixElement;
import org.vaadin.addons.dramafinder.element.shared.HasSuffixElement;

import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;

/**
 * PlaywrightElement for {@code <vaadin-side-nav-item>}.
 */
@PlaywrightElement(SideNavigationItemElement.FIELD_TAG_NAME)
public class SideNavigationItemElement extends VaadinElement implements HasEnabledElement, HasPrefixElement, HasSuffixElement, HasLabelElement {

    public static final String FIELD_TAG_NAME = "vaadin-side-nav-item";

    public SideNavigationItemElement(Locator locator) {
        super(locator);
    }

    /**
     * Checks if the item is expanded.
     */
    public boolean isExpanded() {
        return getLocator().getAttribute("expanded") != null;
    }

    /**
     * Asserts that the item is expanded.
     */
    public void assertExpanded() {
        assertThat(getLocator()).hasAttribute("expanded", "");
    }

    /**
     * Asserts that the item is collapsed.
     */
    public void assertCollapsed() {
        assertThat(getLocator()).not().hasAttribute("expanded", "");
    }

    /**
     * Asserts that the item is enabled.
     */
    @Override
    public void assertEnabled() {
        assertThat(getLocator()).not().hasAttribute("disabled", "");
    }

    /**
     * Asserts that the item is disabled.
     */
    @Override
    public void assertDisabled() {
        assertThat(getLocator()).hasAttribute("disabled", "");
    }

    /**
     * Asserts that the item is current.
     */
    public void assertCurrent() {
        assertThat(getLocator()).hasAttribute("current", "");
    }

    /**
     * Asserts that the item is not current.
     */
    public void assertNotCurrent() {
        assertThat(getLocator()).not().hasAttribute("current", "");
    }


    /**
     * Toggles the expansion state of the item.
     * This relies on the toggle button inside the item.
     */
    public void toggle() {
        getLocator().locator("button[part='toggle-button']").first().click();
    }

    @Override
    public Locator getLabelLocator() {
        return getLocator();
    }

    public void navigate() {
        getLocator().getByRole(AriaRole.LINK).first().click();
    }
}