org.eclipse.che.selenium.pageobject.intelligent.CommandsPalette.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.che.selenium.pageobject.intelligent.CommandsPalette.java

Source

/*
 * Copyright (c) 2012-2018 Red Hat, Inc.
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *   Red Hat, Inc. - initial API and implementation
 */
package org.eclipse.che.selenium.pageobject.intelligent;

import static java.lang.String.format;
import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.REDRAW_UI_ELEMENTS_TIMEOUT_SEC;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.ArrayList;
import org.eclipse.che.selenium.core.SeleniumWebDriver;
import org.eclipse.che.selenium.core.action.ActionsFactory;
import org.eclipse.che.selenium.pageobject.Loader;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

/** @author Sergey Skorik */
@Singleton
public class CommandsPalette {

    private final SeleniumWebDriver seleniumWebDriver;
    private final Loader loader;
    private final ActionsFactory actionsFactory;
    private final WebDriverWait redrawUiElementTimeout;
    private final Actions actions;

    @Inject
    public CommandsPalette(SeleniumWebDriver seleniumWebDriver, Loader loader, ActionsFactory actionsFactory) {
        this.seleniumWebDriver = seleniumWebDriver;
        this.loader = loader;
        this.actionsFactory = actionsFactory;
        this.redrawUiElementTimeout = new WebDriverWait(seleniumWebDriver, REDRAW_UI_ELEMENTS_TIMEOUT_SEC);
        this.actions = new Actions(seleniumWebDriver);
        PageFactory.initElements(seleniumWebDriver, this);
    }

    public enum MeasuresMemory {
        MB, GB
    }

    public enum MoveTypes {
        UP, DOWN
    }

    /** Class introduce Xpath locators for DOM navigation inside CommandsPalette widget */
    private static final class Locators {
        static final String COMMAND_PALETTE = "//div[@id='gwt-debug-commands_palette']";
        static final String COMMAND_PALETTE_BUTTON = "//div[@id='gwt-debug-button-open_command_palette']";
        static final String CLOSE_COMMAND_PALETTE = "//table[@title='Commands Palette']/tbody/tr[1]/td/table/tbody/tr/td[2]//*[local-name() = 'svg']";
        static final String SEARCH_FIELD = "//input[@id='gwt-debug-commands_palette-filter']";
        static final String COMMANDS_LIST = "//div[@id = 'gwt-debug-commands_palette']//div[contains(@id,'gwt-uid')]";
        static final String COMMANDS = "//div[@id = 'gwt-debug-commands_palette']//div[contains(text(),'%s')]";
    }

    @FindBy(xpath = Locators.COMMAND_PALETTE)
    WebElement commandPalette;

    @FindBy(xpath = Locators.COMMAND_PALETTE_BUTTON)
    WebElement commandPaletteButton;

    @FindBy(xpath = Locators.CLOSE_COMMAND_PALETTE)
    WebElement closeCommandPalette;

    @FindBy(xpath = Locators.SEARCH_FIELD)
    WebElement searchField;

    /** Start CommandPalette widget by clicking on button */
    public void openCommandPalette() {
        loader.waitOnClosed();
        redrawUiElementTimeout.until(ExpectedConditions.visibilityOf(commandPaletteButton)).click();
        redrawUiElementTimeout.until(ExpectedConditions.visibilityOf(commandPalette));
    }

    /** Start CommandPalette widget by Shift+F10 hot keys */
    public void openCommandPaletteByHotKeys() {
        loader.waitOnClosed();
        actionsFactory.createAction(seleniumWebDriver).sendKeys(Keys.SHIFT.toString(), Keys.F10.toString())
                .perform();
        redrawUiElementTimeout.until(ExpectedConditions.visibilityOf(commandPalette));
    }

    /** Check the CommandsPalette widget is started */
    public void waitCommandPalette() {
        redrawUiElementTimeout.until(ExpectedConditions.visibilityOf(commandPalette));
    }

    public void closeCommandPalette() {
        redrawUiElementTimeout.until(ExpectedConditions.visibilityOf(closeCommandPalette)).click();
        redrawUiElementTimeout
                .until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(Locators.COMMAND_PALETTE)));
        loader.waitOnClosed();
    }

    // TODO Get a commands list from the CommandsPalette
    private ArrayList commandsList() {
        ArrayList list = new ArrayList();
        list = (ArrayList) seleniumWebDriver.findElements(By.xpath(Locators.COMMANDS_LIST));

        return list;
    }

    /**
     * Search and start command by name
     *
     * @param commandName name of the command
     */
    public void searchAndStartCommand(String commandName) {
        redrawUiElementTimeout.until(ExpectedConditions.visibilityOf(searchField)).sendKeys(commandName);
        loader.waitOnClosed();
    }

    public void clearSearchField() {
        redrawUiElementTimeout.until(ExpectedConditions.visibilityOf(searchField)).clear();
        redrawUiElementTimeout.until(ExpectedConditions.visibilityOf(searchField)).sendKeys(Keys.ENTER);
        loader.waitOnClosed();
    }

    public void commandIsExists(String commandName) {
        redrawUiElementTimeout.until(
                ExpectedConditions.visibilityOfElementLocated(By.xpath(format(Locators.COMMANDS, commandName))));
    }

    public void commandIsNotExists(String commandName) {
        redrawUiElementTimeout.until(
                ExpectedConditions.invisibilityOfElementLocated(By.xpath(format(Locators.COMMANDS, commandName))));
    }

    /**
     * Start the command by doubleClick
     *
     * @param commandName name of the command
     */
    public void startCommandByDoubleClick(String commandName) {
        String locatorToCurrentCommand = format(Locators.COMMANDS, commandName);
        WebElement currentCommand = redrawUiElementTimeout
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath(locatorToCurrentCommand)));
        actions.doubleClick(currentCommand).perform();
        redrawUiElementTimeout
                .until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(locatorToCurrentCommand)));
    }

    /**
     * Start the command by pressing Enter key
     *
     * @param commandName name of the command
     */
    public void startCommandByEnterKey(String commandName) {
        String locatorToCurrentCommand = format(Locators.COMMANDS, commandName);
        WebElement currentCommand = redrawUiElementTimeout
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath(locatorToCurrentCommand)));
        seleniumWebDriver.findElement(By.xpath(locatorToCurrentCommand)).click();
        actionsFactory.createAction(seleniumWebDriver).sendKeys(currentCommand, Keys.ENTER.toString()).perform();
        redrawUiElementTimeout
                .until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(locatorToCurrentCommand)));
    }

    /**
     * Search and start command by name
     *
     * @param mt where to move(down or up)
     * @param steps
     */
    public void moveAndStartCommand(MoveTypes mt, int steps) {
        Keys k = mt.equals(MoveTypes.UP) ? Keys.ARROW_UP : Keys.ARROW_DOWN;

        for (int i = 0; i < steps; i++) {
            actionsFactory.createAction(seleniumWebDriver).sendKeys(k.toString()).perform();
            loader.waitOnClosed();
        }
        actionsFactory.createAction(seleniumWebDriver).sendKeys(Keys.ENTER.toString()).perform();
    }
}