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

Java tutorial

Introduction

Here is the source code for org.eclipse.che.selenium.pageobject.GitHub.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 org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.LOAD_PAGE_TIMEOUT_SEC;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.che.selenium.core.SeleniumWebDriver;
import org.eclipse.che.selenium.core.user.DefaultTestUser;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

/** The Object containing GitHubAuthPage page`s webelenents */
@Singleton
public class GitHub {
    private final SeleniumWebDriver seleniumWebDriver;
    private final DefaultTestUser testUser;

    @Inject
    public GitHub(SeleniumWebDriver seleniumWebDriver, DefaultTestUser testUser) {
        this.seleniumWebDriver = seleniumWebDriver;
        this.testUser = testUser;
        PageFactory.initElements(seleniumWebDriver, this);
    }

    private interface Locators {

        String LOGIN_FIELD = "login_field";

        String PASS_FIELD = "password";

        String SIGN_IN_BTN = "input[value='Sign in']";

        String ACCOUNT_SETTINGS = "account_settings";

        String APPLICATIONS_BTN = "//*[@id='site-container']//a[contains(.,'Applications')]";

        String REVOKE_BTN = "//a[contains(.,'envy')]/..//a[@data-method='delete']/span";

        String AUTHORIZE_BUTTON = "//button[@id='js-oauth-authorize-btn']";

        String LOGOUT_BTN = "logout";

        String SSH_KEYS_BTN = "//*[@id='site-container']//a[contains(.,'SSH Keys')]";

        String DELETE_SSH_KEY_BTN = "//li[contains(.,'%s')]/a[@data-method='delete']";

        String CONFIRM_PASS_INPUT_ID = "//input[@id='confirm-password']";

        String CONFIRM_PASS_BUTTON = "//button[text()='Confirm password']";

        String APPLICATIONS_PAGE = "//h3[text()='Authorized applications']";

        String SSH_PAGE = "//a[@id='add_key_action']";

        String SUDO_PASS_FORM_ID = "sudo_password";
    }

    @FindBy(id = Locators.LOGIN_FIELD)
    public WebElement loginField;

    @FindBy(id = Locators.PASS_FIELD)
    public WebElement passField;

    @FindBy(css = Locators.SIGN_IN_BTN)
    public WebElement signInBtn;

    @FindBy(id = Locators.ACCOUNT_SETTINGS)
    public WebElement accountSettings;

    @FindBy(xpath = Locators.APPLICATIONS_BTN)
    public WebElement applicationsBtn;

    @FindBy(xpath = Locators.REVOKE_BTN)
    public WebElement revokeBtn;

    @FindBy(xpath = Locators.AUTHORIZE_BUTTON)
    public WebElement authorizeBtn;

    @FindBy(id = Locators.LOGOUT_BTN)
    public WebElement logoutBtn;

    @FindBy(xpath = Locators.SSH_KEYS_BTN)
    public WebElement sshKeysBtn;

    @FindBy(xpath = Locators.CONFIRM_PASS_INPUT_ID)
    public WebElement confirmPassInput;

    @FindBy(xpath = Locators.CONFIRM_PASS_BUTTON)
    public WebElement confirmPassBtn;

    @FindBy(id = Locators.SUDO_PASS_FORM_ID)
    public WebElement sudoPassForm;

    /** Wait web elements for login on google. */
    public void waitAuthorizationPageOpened() {
        new WebDriverWait(seleniumWebDriver, 30).until(new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver elem) {
                return loginField.isDisplayed() && passField.isDisplayed() && signInBtn.isDisplayed();
            }
        });
    }

    /**
     * type login to login field
     *
     * @param login
     */
    public void typeLogin(String login) {
        new WebDriverWait(seleniumWebDriver, 10).until(ExpectedConditions.visibilityOf(loginField));
        loginField.sendKeys(login);
    }

    /**
     * type password to password field
     *
     * @param pass
     */
    public void typePass(String pass) {
        passField.sendKeys(pass);
    }

    /** wait closing github login form */
    public void waitClosingLoginPage() {
        new WebDriverWait(seleniumWebDriver, 10)
                .until(ExpectedConditions.invisibilityOfElementLocated(By.id(Locators.PASS_FIELD)));
        new WebDriverWait(seleniumWebDriver, 10)
                .until(ExpectedConditions.invisibilityOfElementLocated(By.id(Locators.LOGIN_FIELD)));
    }

    /** click on submit btn on github auth form */
    public void clickOnSignInButton() {
        new WebDriverWait(seleniumWebDriver, 15).until(ExpectedConditions.elementToBeClickable(signInBtn));
        signInBtn.click();
    }

    public void openGithub() {
        seleniumWebDriver.get("https://github.com/login");
        waitAccountSettingsBtn();
    }

    public void openGithubAndLogin(String login, String pass) {
        seleniumWebDriver.get("https://github.com/login");
        waitAuthorizationPageOpened();
        typeLogin(login);
        typePass(pass);
        clickOnSignInButton();
        waitAccountSettingsBtn();
    }

    /** wait for appearing account settings button */
    public void waitAccountSettingsBtn() {
        new WebDriverWait(seleniumWebDriver, 30)
                .until(ExpectedConditions.visibilityOfElementLocated(By.id(Locators.ACCOUNT_SETTINGS)));
    }

    /**
     * wait for appearing appereance supo password form after click on autorize button form if we have
     * not ssh key on github
     */
    public void waitSudoPassForm() {
        new WebDriverWait(seleniumWebDriver, 10).until(ExpectedConditions.visibilityOf(sudoPassForm));
    }

    /** type password to sudo field on github */
    public void typeToSudoPassForm(String pass) {
        sudoPassForm.sendKeys(pass);
    }

    /** click on account settings button */
    public void clickOnAccountSettingsButton() {
        accountSettings.click();
    }

    /** wait for appearing applications button in settings menu. */
    public void waitApplicationsBtn() {
        new WebDriverWait(seleniumWebDriver, 30)
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Locators.APPLICATIONS_BTN)));
    }

    /** click on applications button in settings menu. */
    public void clickOnApplicationsButton() {
        applicationsBtn.click();
    }

    /** wait for appearing Revoke button in applications menu. */
    public boolean isRevokeBtnPresent() {
        try {
            WebElement element = seleniumWebDriver.findElement(By.xpath(Locators.REVOKE_BTN));
            return element.isDisplayed();
        } catch (Exception e) {
            System.err.println("Element not found!");
            return false;
        }
    }

    /** wait for disappearing Revoke button in applications menu. */
    public void waitRevokeBtnDisappear() {
        new WebDriverWait(seleniumWebDriver, 30)
                .until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(Locators.REVOKE_BTN)));
    }

    /** click on Revoke button in applications menu. */
    public void clickOnRevokeButton() {
        revokeBtn.click();
    }

    /**
     * wait and check if authorization button is present.
     *
     * @return true if button is present, false otherwise
     */
    public boolean isAuthorizeButtonPresent() {
        try {
            waitAuthorizeBtn();
            return true;
        } catch (TimeoutException e) {
            return false;
        }
    }

    /** wait for authorize button. */
    public void waitAuthorizeBtn() {
        new WebDriverWait(seleniumWebDriver, 30).until(ExpectedConditions.visibilityOf(authorizeBtn));
    }

    /** click on authorize button */
    public void clickOnAuthorizeBtn() {
        waitAuthorizeBtn();
        new WebDriverWait(seleniumWebDriver, LOAD_PAGE_TIMEOUT_SEC)
                .until(ExpectedConditions.elementToBeClickable(authorizeBtn));
        authorizeBtn.click();
    }

    /** logout from github */
    public void clickOnLogoutBtn() {
        logoutBtn.click();
    }

    /** Open settings, check and delete SSH key */
    public void checkAndDeleteSshKey() {
        clickOnAccountSettingsButton();
        waitSshKeysBtn();
        clickOnSshKeysButton();
        waitSshPage();
        if (isDeleteSshKeyButtonPresent()) {
            clickOnDeleteSshKeyButton();
            waitDeleteButtonDisappear();
        }
    }

    /** wait for appearing ssh keys button in settings menu. */
    public void waitSshKeysBtn() {
        new WebDriverWait(seleniumWebDriver, 30)
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Locators.SSH_KEYS_BTN)));
    }

    /** click on ssh keys button */
    public void clickOnSshKeysButton() {
        sshKeysBtn.click();
    }

    public boolean isDeleteSshKeyButtonPresent() {
        try {
            WebElement element = seleniumWebDriver
                    .findElement(By.xpath(String.format(Locators.DELETE_SSH_KEY_BTN, testUser.getName())));
            return element.isDisplayed();
        } catch (Exception e) {
            System.err.println("Element not found!");
            return false;
        }
    }

    /** wait for appearing delete button in ssh keys menu. */
    public void waitDeleteButton() {
        new WebDriverWait(seleniumWebDriver, 30).until(ExpectedConditions.visibilityOfElementLocated(
                By.xpath(String.format(Locators.DELETE_SSH_KEY_BTN, testUser.getName()))));
    }

    /** wait for disappearing of delete button in ssh keys menu. */
    public void waitDeleteButtonDisappear() {
        new WebDriverWait(seleniumWebDriver, 30).until(ExpectedConditions.invisibilityOfElementLocated(
                By.xpath(String.format(Locators.DELETE_SSH_KEY_BTN, testUser.getName()))));
    }

    /** click on delete ssh key */
    public void clickOnDeleteSshKeyButton() {
        WebElement elem = seleniumWebDriver
                .findElement(By.xpath(String.format(Locators.DELETE_SSH_KEY_BTN, testUser.getName())));
        elem.click();
    }

    /** wait for confirm button appear */
    public void waitConfirmPasswordInput() {
        new WebDriverWait(seleniumWebDriver, 30)
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Locators.CONFIRM_PASS_INPUT_ID)));
    }

    public boolean isConfirmPasswordInputPresent() {
        try {
            WebElement element = seleniumWebDriver.findElement(By.xpath(Locators.CONFIRM_PASS_INPUT_ID));
            return element.isDisplayed();
        } catch (Exception ex) {
            return false;
        }
    }

    public void typeConfirmationPassword(String pass) {
        confirmPassInput.sendKeys(pass);
    }

    public void clickConfirmPasswordButton() {
        confirmPassBtn.click();
    }

    /** wait for applications page form */
    public void waitApplicationsPage() {
        new WebDriverWait(seleniumWebDriver, 30)
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Locators.APPLICATIONS_PAGE)));
    }

    /** wait for ssh page form */
    public void waitSshPage() {
        new WebDriverWait(seleniumWebDriver, 30)
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Locators.SSH_PAGE)));
    }
}