org.eclipse.che.selenium.pageobject.Preferences.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.che.selenium.pageobject.Preferences.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;

import static java.lang.String.format;
import static java.util.Arrays.asList;
import static org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants.Profile.PREFERENCES;
import static org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants.Profile.PROFILE_MENU;
import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.ATTACHING_ELEM_TO_DOM_SEC;
import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.ELEMENT_TIMEOUT_SEC;
import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.REDRAW_UI_ELEMENTS_TIMEOUT_SEC;
import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.WIDGET_TIMEOUT_SEC;
import static org.eclipse.che.selenium.pageobject.Preferences.DropDownGitInformationMenu.CONTRIBUTE_PREFERENCES;
import static org.eclipse.che.selenium.pageobject.Preferences.Locators.EDITOR_CHECKBOX_SPAN_XPATH;
import static org.eclipse.che.selenium.pageobject.Preferences.Locators.EDITOR_INPUT;
import static org.eclipse.che.selenium.pageobject.Preferences.Locators.ERRORS_WARNINGS_RADIO_BUTTON;
import static org.eclipse.che.selenium.pageobject.Preferences.Locators.ERRORS_WARNINGS_RADIO_BUTTON_BLOCK;
import static org.eclipse.che.selenium.pageobject.Preferences.Locators.MENU_IN_EXPANDED_DROPDOWN_XPATH_WITH_PARAM;
import static org.eclipse.che.selenium.pageobject.Preferences.Locators.SSH_DELETE_BUTTON_FOR_HOST;
import static org.openqa.selenium.Keys.ALT;
import static org.openqa.selenium.Keys.COMMAND;
import static org.openqa.selenium.Keys.CONTROL;
import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOf;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.che.selenium.core.SeleniumWebDriver;
import org.eclipse.che.selenium.core.action.ActionsFactory;
import org.eclipse.che.selenium.core.utils.PlatformUtils;
import org.eclipse.che.selenium.core.utils.WaitUtils;
import org.eclipse.che.selenium.core.webdriver.SeleniumWebDriverHelper;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** @autor by mmusienko on 9/19/14. */
@Singleton
public class Preferences {

    private static final String GITHUB_COM = "github.com";
    private final Loader loader;
    private final ActionsFactory actionsFactory;
    private final AskDialog askDialog;
    private final AskForValueDialog askForValueDialog;
    private final GitHub gitHub;
    private final Menu menu;
    private final SeleniumWebDriver seleniumWebDriver;
    private final SeleniumWebDriverHelper seleniumWebDriverHelper;

    @Inject
    public Preferences(SeleniumWebDriver seleniumWebDriver, Loader loader, ActionsFactory actionsFactory,
            AskDialog askDialog, AskForValueDialog askForValueDialog, GitHub github, Menu menu,
            SeleniumWebDriverHelper seleniumWebDriverHelper) {
        this.seleniumWebDriver = seleniumWebDriver;
        this.loader = loader;
        this.actionsFactory = actionsFactory;
        this.askDialog = askDialog;
        this.askForValueDialog = askForValueDialog;
        this.gitHub = github;
        this.menu = menu;
        this.seleniumWebDriverHelper = seleniumWebDriverHelper;
        PageFactory.initElements(seleniumWebDriver, this);
    }

    private static final Logger LOG = LoggerFactory.getLogger(Preferences.class);

    protected interface Locators {
        String PREFERENCES_FORM_ID = "gwt-debug-window-preferences-scrollPanel-preferences";
        String DROP_DOWN_HEADER_XPATH_WITH_PARAM = "//div[@id='gwt-debug-window-preferences-scrollPanel-preferences']//span[text()='%s']";
        String MENU_IN_EXPANDED_DROPDOWN_XPATH_WITH_PARAM = "//div[@id='gwt-debug-window-preferences-scrollPanel-preferences']//div[text()='%s']";
        String DEFAULT_RAM_MENU_FIELD = "gwt-debug-window-preferences-ramManager-memory";
        String SSH_GENERATE_KEY = "gwt-debug-sshKeys-generate";
        String SSH_UPLOAD_KEY = "//button[@id='gwt-debug-sshKeys-upload']";
        String SSH_GENERATE_AND_ADD_TO_GITHUB = "gwt-debug-gitSshKeys-generateGithubKey";
        String SSH_KEYS_TABLE = "//table[@id='gwt-debug-sshKeys-cellTable-keys']/tbody[1]";
        String SSH_DELETE_BUTTON_FOR_HOST = "/following::button[text()='Delete']";
        String SAVE_BUTTON_ID = "window-preferences-storeChanges";
        String REFRESH_BUTTON_ID = "window-preferences-refresh";
        String CLOSE_BTN_ID = "window-preferences-close";
        String COMMITTER_INPUT_NAME = "gwt-debug-committer-preferences-name";
        String COMMITTER_INPUT_EMAIL = "gwt-debug-committer-preferences-email";
        String ERRORS_WARNINGS_TAB = "//div[@id='gwt-debug-window-preferences-scrollPanel-preferences']/following::div[4]";
        String ERRORS_WARNINGS_RADIO_BUTTON = "//div[text()='%s']/following::div[1]//span";
        String ERRORS_WARNINGS_RADIO_BUTTON_BLOCK = "//div[text()='%s']/following::div[1]";
        String EDITOR_PROPERTIES_XPATH = "//div[@id='gwt-debug-editorSectionsPanel']";
        String EDITOR_CHECKBOX_SPAN_XPATH = "//div[text()='%s']/following::div[1]//span";
        String EDITOR_INPUT = "//div[text()='%s']/following::div[1]//input";
        String GENERATE_SSH_KEY_WIDGET_MAIN_FORM = "gwt-debug-askValueDialog-window";
        String TITLE_INPUT_GENERATE_WIDGET = "div#gwt-debug-askValueDialog-window input#gwt-debug-askValueDialog-textBox";
        String SHOW_ARTIFACT_CHECKBOX = "//input[@id='gwt-debug-window-preferences-plugins-maven-showArtifactId-input']";
        String SET_CONTRIBUTE_CHECKBOX_ID = "gwt-debug-preferences-git-contribute-activateByProjectSelection";
        String SHOW_CONTRIBUTE_CHECKBOX_ID = "gwt-debug-preferences-git-contribute-activateByProjectSelection-input";
        String ADD_SCHEMA_URL_BUTTON_ID = "gwt-debug-preferences-addUrl";
        String ADD_SCHEMA_URL_INPUT_ID = "gwt-debug-askValueDialog-textBox";
        String DELETE_SCHEMA_BUTTON_XPATH = "//table[@id='gwt-debug-preferences-cellTable-keys']//button";
    }

    public interface DropDownListsHeaders {
        String KEYS_SETTINGS = "SSH";
    }

    public interface DropDownIdeSettingsMenus {
        String EDITOR = "Editor";
    }

    public interface DropDownSshKeysMenu {
        String VCS = "VCS";
        String MACHINE = "Machine";
    }

    public interface DropDownLanguageServerSettings {
        String YAML = "Yaml";
    }

    public interface DropDownGitInformationMenu {
        String COMMITTER = "Committer";
        String CONTRIBUTE_PREFERENCES = "Contribute";
    }

    public interface DropDownJavaCompilerMenu {
        String ERRORS_WARNINGS = "Errors/Warnings";
    }

    public interface UploadSSHKey {
        String HOST_INPUT = "//input[@name='name']";
        String FILE_INPUT = "//input[@name='privateKey']";
        String UPLOAD_BUTTON = "//button[@id='sshKeys-upload']";
        String CANCEL_BUTTON = "//button[@id='sshKeys-cancel']";
    }

    public enum DropDownValueForErrorWaitingWidget {
        IGNORE, WARNING, ERROR
    }

    public enum FlagForEditorWidget {
        CHECK, UNCHECK
    }

    @FindBy(id = Locators.PREFERENCES_FORM_ID)
    private WebElement preferencesForm;

    @FindBy(id = Locators.DEFAULT_RAM_MENU_FIELD)
    private WebElement defaulRAMField;

    @FindBy(id = Locators.SAVE_BUTTON_ID)
    private WebElement saveBtn;

    @FindBy(id = Locators.REFRESH_BUTTON_ID)
    private WebElement refreshBtn;

    @FindBy(id = Locators.CLOSE_BTN_ID)
    private WebElement closeBtn;

    @FindBy(xpath = Locators.SSH_KEYS_TABLE)
    private WebElement sshKeysTable;

    @FindBy(id = Locators.SSH_GENERATE_KEY)
    private WebElement generateKeyBtn;

    @FindBy(id = Locators.SSH_GENERATE_AND_ADD_TO_GITHUB)
    private WebElement generateAndUploadBtn;

    @FindBy(id = Locators.COMMITTER_INPUT_NAME)
    private WebElement nameCommitterInput;

    @FindBy(id = Locators.COMMITTER_INPUT_EMAIL)
    private WebElement emailCommitterInput;

    @FindBy(xpath = Locators.ERRORS_WARNINGS_TAB)
    private WebElement errorsWarningsTab;

    @FindBy(xpath = Locators.EDITOR_PROPERTIES_XPATH)
    private WebElement editorProperties;

    @FindBy(id = Locators.GENERATE_SSH_KEY_WIDGET_MAIN_FORM)
    private WebElement genrateSShKeyWidget;

    @FindBy(css = Locators.TITLE_INPUT_GENERATE_WIDGET)
    private WebElement genrateSShKeyTitleInput;

    @FindBy(xpath = Locators.SHOW_ARTIFACT_CHECKBOX)
    private WebElement showArtifactCheckBox;

    @FindBy(id = Locators.SET_CONTRIBUTE_CHECKBOX_ID)
    private WebElement setContributeCheckbox;

    @FindBy(id = Locators.SHOW_CONTRIBUTE_CHECKBOX_ID)
    private WebElement showContributeCheckbox;

    @FindBy(id = Locators.ADD_SCHEMA_URL_BUTTON_ID)
    private WebElement addSchemaUrlButton;

    @FindBy(id = Locators.ADD_SCHEMA_URL_INPUT_ID)
    private WebElement addSchemaUrlInput;

    @FindBy(xpath = Locators.DELETE_SCHEMA_BUTTON_XPATH)
    private WebElement deleteSchemaButton;

    /** wait preferences form */
    public void waitPreferencesForm() {
        seleniumWebDriverHelper.waitVisibility(preferencesForm);
    }

    /** wait closing of the preferences form */
    public void waitPreferencesFormIsClosed() {
        seleniumWebDriverHelper.waitInvisibility(By.id(Locators.PREFERENCES_FORM_ID));
    }

    /**
     * wait appears dropdown-header with specified mame
     *
     * @param nameMenu name of header (all names describe in public interface )
     */
    public void waitDropDownHeaderMenu(String nameMenu) {
        seleniumWebDriverHelper.waitVisibilityOfAllElements(
                By.xpath(format(Locators.DROP_DOWN_HEADER_XPATH_WITH_PARAM, nameMenu)), ELEMENT_TIMEOUT_SEC);
    }

    /**
     * wait menu in expanded dropdown list
     *
     * @param menu (all menus describe in public interface )
     */
    public void waitMenuInCollapsedDropdown(String menu) {
        seleniumWebDriverHelper.waitVisibilityOfAllElements(
                By.xpath(format(MENU_IN_EXPANDED_DROPDOWN_XPATH_WITH_PARAM, menu)), ELEMENT_TIMEOUT_SEC);
    }

    /**
     * wait menu with specified name and select it
     *
     * @param nameMenu
     */
    public void selectDroppedMenuByName(String nameMenu) {
        loader.waitOnClosed();
        waitMenuInCollapsedDropdown(nameMenu);
        seleniumWebDriverHelper
                .waitAndClick(By.xpath(format(MENU_IN_EXPANDED_DROPDOWN_XPATH_WITH_PARAM, nameMenu)));
    }

    /** wait ok button click and wait closing the form */
    public void clickOnOkBtn() {
        seleniumWebDriverHelper.waitAndClick(saveBtn);
        loader.waitOnClosed();
    }

    /**
     * determines whether or not 'Preferences' form opened
     *
     * @return true if the form is opened
     */
    public boolean isPreferencesFormOpened() {
        return seleniumWebDriverHelper.isVisible(closeBtn);
    }

    /**
     * defines a state the 'Save' button, enabled or not
     *
     * @return true if the button is enabled
     */
    public boolean isSaveButtonIsEnabled() {
        return seleniumWebDriverHelper.waitVisibilityAndGetEnableState(saveBtn);
    }

    /** wait and click on the 'Refresh' button */
    public void clickRefreshButton() {
        seleniumWebDriverHelper.waitAndClick(refreshBtn);
    }

    /** click on the 'Close' button */
    public void clickOnCloseButton() {
        seleniumWebDriverHelper.waitAndClick(closeBtn);
    }

    /** click on the 'Close' button and wait closing the form */
    public void close() {
        seleniumWebDriverHelper.waitAndClick(closeBtn);
        waitPreferencesFormIsClosed();
    }

    public void clickOnGenerateKeyButton() {
        seleniumWebDriverHelper.waitAndClick(generateKeyBtn);
    }

    public void clickOnAddSchemaUrlButton() {
        seleniumWebDriverHelper.waitAndClick(addSchemaUrlButton);
    }

    public void addSchemaUrl(String schemaName) {
        seleniumWebDriverHelper.waitVisibility(addSchemaUrlInput);
        addSchemaUrlInput.sendKeys(schemaName);
        seleniumWebDriverHelper.waitAndClick(By.id("askValue-dialog-ok"));
    }

    public void deleteSchema() {
        seleniumWebDriverHelper.waitAndClick(deleteSchemaButton);
        askDialog.clickOkBtn();
        askDialog.waitFormToClose();
    }

    public void setStateContributeChecboxAndCloseForm(boolean state) {
        setContributeCheckbox(state);
        clickOnOkBtn();
        close();
    }

    public void openContributeTab() {
        open();
        waitMenuInCollapsedDropdown(CONTRIBUTE_PREFERENCES);
        selectDroppedMenuByName(CONTRIBUTE_PREFERENCES);
    }

    public void open() {
        menu.runCommand(PROFILE_MENU, PREFERENCES);
        waitPreferencesForm();
    }

    public void clickOnGenerateAndUploadToGitHub() {
        seleniumWebDriverHelper.waitAndClick(generateAndUploadBtn);
    }

    public boolean isSshKeyIsPresent(String host) {
        try {
            seleniumWebDriverHelper.waitPresence(By.xpath(Locators.SSH_KEYS_TABLE), ELEMENT_TIMEOUT_SEC);
            return sshKeysTable.getText().contains(host);
        } catch (TimeoutException e) {
            return false;
        }
    }

    // timeout is changed to 40 sec, is related to running tests on ocp platform
    public void waitSshKeyIsPresent(final String host) {
        seleniumWebDriverHelper.waitSuccessCondition(driver -> isSshKeyIsPresent(host), WIDGET_TIMEOUT_SEC);
    }

    public void deleteSshKeyByHost(String host) {
        String deleteButtonXPath = "//div[text()='" + host + "']" + SSH_DELETE_BUTTON_FOR_HOST;
        seleniumWebDriverHelper.waitNoExceptions(
                () -> seleniumWebDriverHelper.waitAndClick(By.xpath(deleteButtonXPath)), WIDGET_TIMEOUT_SEC,
                StaleElementReferenceException.class);

        askDialog.clickOkBtn();
        askDialog.waitFormToClose();
    }

    /**
     * type a name of the committer in the 'Preferences'
     *
     * @param nameCommitter is a name of the committer
     */
    public void typeNameCommitter(String nameCommitter) {
        nameCommitterInput.clear();
        nameCommitterInput.sendKeys(nameCommitter);
    }

    /**
     * wait a name of the committer in the 'Preferences'
     *
     * @param nameCommitter is a name of the committer
     */
    public void waitInputNameCommitter(final String nameCommitter) {
        seleniumWebDriverHelper.waitSuccessCondition(
                webDriver -> nameCommitterInput.getAttribute("value").contains(nameCommitter),
                ATTACHING_ELEM_TO_DOM_SEC);
    }

    /**
     * type and wait a name of the committer in the 'Preferences'
     *
     * @param nameCommitter is a name of the committer
     */
    public void typeAndWaitNameCommitter(String nameCommitter) {
        typeNameCommitter(nameCommitter);
        waitInputNameCommitter(nameCommitter);
    }

    /**
     * type an email of the committer in the 'Preferences'
     *
     * @param nameCommitter is an email of the committer
     */
    public void typeEmailCommitter(String nameCommitter) {
        emailCommitterInput.clear();
        emailCommitterInput.sendKeys(nameCommitter);
    }

    /**
     * wait an email of the committer in the 'Preferences'
     *
     * @param emailCommitter is an email of the committer
     */
    public void waitInputEmailCommitter(final String emailCommitter) {
        seleniumWebDriverHelper.waitSuccessCondition(
                webDriver -> emailCommitterInput.getAttribute("value").contains(emailCommitter),
                ATTACHING_ELEM_TO_DOM_SEC);
    }

    /**
     * type and wait an email of the committer in the 'Preferences'
     *
     * @param emailCommitter is an email of the committer
     */
    public void typeAndWaitEmailCommitter(String emailCommitter) {
        typeEmailCommitter(emailCommitter);
        waitInputEmailCommitter(emailCommitter);
    }

    /** clicks on the 'Contribute' checkbox */
    public void clickOnContributeCheckbox() {
        seleniumWebDriverHelper.waitAndClick(setContributeCheckbox);
    }

    /** call the 'Contribute' by hot key */
    public void callContributeActionByHotKey() {
        seleniumWebDriverHelper.sendKeys(Keys.chord(CONTROL, PlatformUtils.isMac() ? COMMAND : ALT, "6"));
    }

    /** wait the 'Contribute' checkbox is selected */
    public void waitContributeCheckboxIsSelected() {
        seleniumWebDriverHelper.waitElementIsSelected(showContributeCheckbox);
    }

    /** wait the 'Contribute' checkbox is not selected */
    public void waitContributeCheckboxIsNotSelected() {
        seleniumWebDriverHelper.waitElementIsNotSelected(showContributeCheckbox);
    }

    /**
     * Set 'Contribute' checkbox to specified state and wait it state
     *
     * @param state state of checkbox (true if checkbox must be selected)
     */
    public void setContributeCheckbox(boolean state) {
        seleniumWebDriverHelper.waitAndSetCheckbox(showContributeCheckbox, setContributeCheckbox, state);
    }

    /**
     * return the list of items are presented in the 'Error/Warnings' widget
     *
     * @return list of items
     */
    public List<String> getItemsFromErrorWarningsWidget() {
        String errorWarnings = seleniumWebDriverHelper.waitVisibilityAndGetText(errorsWarningsTab,
                REDRAW_UI_ELEMENTS_TIMEOUT_SEC);
        List<String> itemList = asList(
                errorWarnings.split("((\n)(warning|ignore|error)(\n))|((\n)(warning|ignore|error))"));
        return itemList;
    }

    /**
     * set all settings in the 'Error/Warnings' widget
     *
     * @param valueOfDropDown value of drop down
     */
    public void setAllSettingsInErrorWaitingWidget(DropDownValueForErrorWaitingWidget valueOfDropDown) {

        for (String settingsText : getItemsFromErrorWarningsWidget()) {
            List<WebElement> dropDownList = seleniumWebDriverHelper.waitPresenceOfAllElements(
                    By.xpath(format(ERRORS_WARNINGS_RADIO_BUTTON, settingsText)), REDRAW_UI_ELEMENTS_TIMEOUT_SEC);

            seleniumWebDriverHelper.waitAndClick(By.xpath(format(ERRORS_WARNINGS_RADIO_BUTTON_BLOCK, settingsText)),
                    REDRAW_UI_ELEMENTS_TIMEOUT_SEC);

            switch (valueOfDropDown) {
            case IGNORE:
                seleniumWebDriverHelper.waitAndClick(dropDownList.get(0));
                break;
            case WARNING:
                seleniumWebDriverHelper.waitAndClick(dropDownList.get(1));
                break;
            default:
                seleniumWebDriverHelper.waitAndClick(dropDownList.get(2));
                break;
            }
        }
    }

    /**
     * return settings list from the editor settings section
     *
     * @param headerSettings array header settings
     * @return list of settings
     */
    public List<String> getAllSettingsFromEditorWidget(String[] headerSettings) {
        List<String> settingList = new ArrayList<>(asList(seleniumWebDriverHelper
                .waitVisibilityAndGetText(editorProperties, REDRAW_UI_ELEMENTS_TIMEOUT_SEC).split("\n")));
        settingList.removeAll(asList(headerSettings));
        return settingList;
    }

    /**
     * set all flag in once position (check or uncheck) on the editor settings section
     *
     * @param valueOfFlag value of flag
     * @param settingsList list of settings
     */
    public void setAllCheckboxSettingsInEditorWidget(FlagForEditorWidget valueOfFlag, List<String> settingsList) {
        for (String settingsItem : settingsList) {
            if (seleniumWebDriverHelper.waitVisibilityAndGetAttribute(By.xpath(format(EDITOR_INPUT, settingsItem)),
                    "type", REDRAW_UI_ELEMENTS_TIMEOUT_SEC).equals("checkbox")) {
                WebElement checkbox = seleniumWebDriverHelper
                        .waitPresence(By.xpath(format(EDITOR_INPUT, settingsItem)));
                WebElement spanCheckbox = seleniumWebDriverHelper.waitPresence(
                        By.xpath(format(EDITOR_CHECKBOX_SPAN_XPATH, settingsItem)), REDRAW_UI_ELEMENTS_TIMEOUT_SEC);
                switch (valueOfFlag) {
                case CHECK:
                    if (!checkbox.isSelected()) {
                        actionsFactory.createAction(seleniumWebDriver).moveToElement(spanCheckbox).perform();
                        spanCheckbox.click();
                    }
                    break;
                default:
                    if (checkbox.isSelected()) {
                        actionsFactory.createAction(seleniumWebDriver).moveToElement(spanCheckbox).perform();
                        spanCheckbox.click();
                    }
                    break;
                }
            }
        }
    }

    /**
     * Upload private SSH key
     *
     * @param host
     * @param filePath path to file with ssh key
     */
    public void uploadPrivateSshKey(String host, String filePath) {
        File file = new File(filePath);
        LOG.info("Absolute path to private SSH key: {}", file.getAbsolutePath());
        seleniumWebDriverHelper.waitAndClick(By.xpath(Locators.SSH_UPLOAD_KEY));
        WebElement hostInput = seleniumWebDriverHelper.waitVisibility(By.xpath(UploadSSHKey.HOST_INPUT),
                REDRAW_UI_ELEMENTS_TIMEOUT_SEC);
        hostInput.clear();
        hostInput.sendKeys(host);
        seleniumWebDriverHelper.waitAndSendKeysTo(By.xpath(UploadSSHKey.FILE_INPUT), file.getAbsolutePath(),
                REDRAW_UI_ELEMENTS_TIMEOUT_SEC);
        WaitUtils.sleepQuietly(3);
        seleniumWebDriverHelper.waitAndClick(By.xpath(UploadSSHKey.UPLOAD_BUTTON), REDRAW_UI_ELEMENTS_TIMEOUT_SEC);
    }

    /** wait appearance of the Generate SSH key widget */
    public void waitGenerateSshWidget() {
        seleniumWebDriverHelper.waitVisibility(genrateSShKeyWidget, REDRAW_UI_ELEMENTS_TIMEOUT_SEC);
    }

    /**
     * type title for Generate Ssh key form
     *
     * @param title the name of title for created Ssh key
     */
    public void typeTitleOfSshKey(String title) {
        new WebDriverWait(seleniumWebDriver, REDRAW_UI_ELEMENTS_TIMEOUT_SEC)
                .until(visibilityOf(genrateSShKeyTitleInput)).sendKeys(title);
    }

    /** click on Ok btn of Generate Ssh key form */
    public void clickOnOkBtnOfGenerateSshKeyWidget() {
        loader.waitOnClosed();
        askForValueDialog.clickOkBtn();
        loader.waitOnClosed();
    }

    /**
     * wait opening the Generate Ssh key eneter the title ckick on ok btn and wait closing the widget.
     * Wait that Ssh key presents in the list.
     *
     * @param titleOfKey
     */
    public void generateNewSshKey(String titleOfKey) {
        waitGenerateSshWidget();
        typeTitleOfSshKey(titleOfKey);
        clickOnOkBtnOfGenerateSshKeyWidget();
        askDialog.clickCancelBtn();
        askDialog.waitFormToClose();
        waitSshKeyIsPresent(titleOfKey);
    }

    public void generateAndUploadSshKeyOnGithub(String githubUsername, String githubPassword) {
        waitMenuInCollapsedDropdown(Preferences.DropDownSshKeysMenu.VCS);
        selectDroppedMenuByName(Preferences.DropDownSshKeysMenu.VCS);

        loader.waitOnClosed();

        // delete github keu if it exists
        if (isSshKeyIsPresent(GITHUB_COM)) {
            deleteSshKeyByHost(GITHUB_COM);
        }

        String ideWin = seleniumWebDriver.getWindowHandle();

        // regenerate key and upload it on the gitHub
        clickOnGenerateAndUploadToGitHub();

        loader.waitOnClosed();

        // check if github key has been uploaded without authorization on github.com
        if (isSshKeyIsPresent(GITHUB_COM)) {
            close();
            waitPreferencesFormIsClosed();
            return;
        }

        // login to github
        askDialog.waitFormToOpen(25);
        askDialog.clickOkBtn();
        askDialog.waitFormToClose();
        seleniumWebDriverHelper.switchToNextWindow(ideWin);

        gitHub.waitAuthorizationPageOpened();
        gitHub.typeLogin(githubUsername);
        gitHub.typePass(githubPassword);
        gitHub.clickOnSignInButton();

        // it is needed for specified case when the github authorize page is not appeared
        WaitUtils.sleepQuietly(2);

        // authorize on github.com
        if (seleniumWebDriver.getWindowHandles().size() > 1) {
            gitHub.waitAuthorizeBtn();
            gitHub.clickOnAuthorizeBtn();
            seleniumWebDriver.switchTo().window(ideWin);
        }

        seleniumWebDriver.switchTo().window(ideWin);
        loader.waitOnClosed();
        waitSshKeyIsPresent(GITHUB_COM);
        loader.waitOnClosed();
        close();
        waitPreferencesFormIsClosed();
    }

    public void clickOnShowArtifactCheckBox() {
        seleniumWebDriverHelper.getAction().click(showArtifactCheckBox).perform();
    }
}