com.liferay.faces.test.showcase.buttonlink.ButtonLinkTester.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.faces.test.showcase.buttonlink.ButtonLinkTester.java

Source

/**
 * Copyright (c) 2000-2018 Liferay, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.liferay.faces.test.showcase.buttonlink;

import java.util.Locale;

import org.junit.Assume;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;

import com.liferay.faces.test.selenium.browser.BrowserDriver;
import com.liferay.faces.test.selenium.browser.WaitingAsserter;
import com.liferay.faces.test.showcase.TesterBase;

/**
 * @author  Kyle Stiemann
 * @author  Philip White
 */
public class ButtonLinkTester extends TesterBase {

    protected static final String generalButton1Xpath = "//input[contains(@src,'jsf-logo-small.png')][@type='image']";
    protected static final String generalLink1Xpath = "//img[contains(@src,'jsf-logo-small.png')]/parent::a[contains(text(),'Text for a link')]";
    protected static final String generalLink2Xpath = "//a[contains(text(),'Text for a link')][not(./img[contains(@src,'jsf-logo-small.png')])]";

    protected void runButtonLinkGeneralTest(String componentName, String buttonLink1xpath, String buttonLink2xpath)
            throws Exception {

        // Skip the test if it's not the JSF showcase. other showcases should
        // include their own test for this use case.
        Assume.assumeTrue(SHOWCASE_CONTEXT_URL.contains("jsf"));

        BrowserDriver browserDriver = getBrowserDriver();
        navigateToUseCase(browserDriver, componentName, "general");

        // Test that both buttons/links render on the page visibly and are clickable.
        WaitingAsserter waitingAsserter = getWaitingAsserter();
        waitingAsserter.assertElementDisplayed(buttonLink1xpath);
        clickButtonLink(browserDriver, buttonLink1xpath);
        waitingAsserter.assertElementDisplayed(buttonLink2xpath);
        clickButtonLink(browserDriver, buttonLink2xpath);

        String lowerCaseComponentName = componentName.toLowerCase(Locale.ENGLISH);

        // Test that the images render on the link use cases successfully.
        if (lowerCaseComponentName.contains("link")) {
            assertImageRendered(browserDriver, waitingAsserter, getExampleImageXpath("children"));
        }
    }

    protected void runButtonLinkImmediateTest(String componentName) throws Exception {

        BrowserDriver browserDriver = getBrowserDriver();
        navigateToUseCase(browserDriver, componentName, "immediate");

        // Test that the value submits successfully and the valueChangeListener
        // method is called during the
        // APPLY_REQUEST_VALUES phase.
        browserDriver.clickElementAndWaitForRerender(
                "(//*[contains(@onclick,'mojarra.ab')][contains(text(),'Submit') or contains(@value,'Submit')])[1]");

        WaitingAsserter waitingAsserter = getWaitingAsserter();
        waitingAsserter.assertElementDisplayed(immediateMessage1Xpath);

        // Test that the value submits successfully and the valueChangeListener
        // method is called during the
        // PROCESS_VALIDATIONS phase.
        browserDriver.clickElementAndWaitForRerender(
                "(//*[contains(@onclick,'mojarra.ab')][contains(text(),'Submit') or contains(@value,'Submit')])[2]");
        waitingAsserter.assertElementDisplayed("//li[contains(text(),'INVOKE_APPLICATION ')]");
    }

    protected void runButtonLinkNavigationParamTest(String componentName) throws Exception {

        BrowserDriver browserDriver = getBrowserDriver();
        navigateToUseCase(browserDriver, componentName, "navigation");

        WaitingAsserter waitingAsserter = getWaitingAsserter();
        waitingAsserter.assertElementDisplayed("//pre/span[text()='foo=']");

        String toParamPageXpath = "(//a[contains(.,'To Param page')]|//input[contains(@value,'To Param page')]|//button[contains(.,'To Param page')])";
        String backToNavigationXpath = "(//a[contains(.,'Back to Navigation with foo=1234')]|//input[contains(@value,'Back to Navigation with foo=1234')]|//button[contains(.,'Back to Navigation with foo=1234')])";
        testNavigationPage(browserDriver, waitingAsserter, toParamPageXpath, backToNavigationXpath);
        testParamPage(browserDriver, waitingAsserter, toParamPageXpath, backToNavigationXpath);

        if (componentName.startsWith("command")) {

            // Click "To Param page" and check that it opens the Param page
            String ajaxCheckbox1Xpath = "//label[contains(text(),'Ajax')]/input[@type='checkbox']";
            browserDriver.clickElementAndWaitForRerender(ajaxCheckbox1Xpath);

            String ajaxButtonLinkXpathSuffix = "[contains(@onclick,'mojarra.ab') or contains(@onclick,'jsf.ajax.request')]";

            testNavigationPage(browserDriver, waitingAsserter, toParamPageXpath + ajaxButtonLinkXpathSuffix,
                    backToNavigationXpath);

            // Click "Back to Navigation with foo=1234" and assert that the value "1234" submits successfully.
            browserDriver.clickElementAndWaitForRerender(ajaxCheckbox1Xpath);
            testParamPage(browserDriver, waitingAsserter, toParamPageXpath,
                    backToNavigationXpath + ajaxButtonLinkXpathSuffix);
        }
    }

    protected void runVariousStylesTest(String componentName) throws Exception {

        BrowserDriver browserDriver = getBrowserDriver();
        navigateToUseCase(browserDriver, componentName, "various-styles");

        // Test the values and classes of every button.
        WaitingAsserter waitingAsserter = getWaitingAsserter();
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-primary')][@value='Primary' or contains(.,'Primary')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-info')][@value='Info' or contains(.,'Info')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-success')][@value='Success' or contains(.,'Success')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-warning')][@value='Warning' or contains(.,'Warning')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-danger')][@value=' Danger' or contains(.,' Danger')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-link')][@value='Link' or contains(.,'Link')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-primary')][contains(@class,'btn-lg') or contains(@class,'btn-large')][@value='Large' or contains(.,'Large')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-lg') or contains(@class,'btn-large')][@value='Large' or contains(.,'Large')][2]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-primary')][@value='Default' or contains(.,'Default')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ') or @class='btn'][@value='Default' or contains(.,'Default')][2]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-primary')][contains(@class,'btn-sm') or contains(@class,'btn-small')][@value='Small' or contains(.,'Small')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-sm') or contains(@class,'btn-small')][@value='Small' or contains(.,'Small')][2]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-primary')][contains(@class,'btn-mini') or contains(@class,'btn-xs')][@value='Mini' or contains(.,'Mini')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-mini') or contains(@class,'btn-xs')][@value='Mini' or contains(.,'Mini')][2]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-primary')][@value='Disabled' or contains(.,'Disabled')]");
        waitingAsserter.assertElementDisplayed(
                "(//*[contains(@class,'btn ') or @class='btn'][@value='Disabled' or contains(.,'Disabled')])[2]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-primary')][@value='Block' or contains(.,'Block')]");
        waitingAsserter.assertElementDisplayed(
                "//*[contains(@class,'btn ')][contains(@class,'btn-block')][@value='Block' or contains(.,'Block')][2]");

        // Click first button.
        clickButtonLink(browserDriver,
                "//*[contains(@class,'btn ')][contains(@class,'btn-primary')][@value='Primary' or contains(.,'Primary')]");
    }

    private void clickButtonLink(BrowserDriver browserDriver, String xpath) {

        WebElement webElement = browserDriver.findElementByXpath(xpath);
        String tagName = webElement.getTagName();
        String onclick = webElement.getAttribute("onclick");
        browserDriver.clickElement(xpath);

        // If the clicking the button/link will cause the page to reload.
        if (!"button".equals(tagName) || ((onclick != null) && !"".equals(onclick))) {

            browserDriver.waitFor(ExpectedConditions.stalenessOf(webElement));
            waitForShowcasePageReady(browserDriver);
        }
    }

    private void testNavigationPage(BrowserDriver browserDriver, WaitingAsserter waitingAsserter,
            String toParamPageXpath, String backToNavigationXpath) {

        // Click "To Param page" and check that it opens the Param page.
        browserDriver.clickElement(toParamPageXpath);
        waitingAsserter.assertElementDisplayed(backToNavigationXpath);
        waitForShowcasePageReady(browserDriver);
    }

    private void testParamPage(BrowserDriver browserDriver, WaitingAsserter waitingAsserter,
            String toParamPageXpath, String backToNavigationXpath) {

        // Click "Back to Navigation with foo=1234" and assert that the value "1234" appears in the model value.
        browserDriver.clickElement(backToNavigationXpath);
        waitingAsserter.assertElementDisplayed(toParamPageXpath);
        waitingAsserter.assertElementDisplayed("//pre/span[text()='foo=1234']");
        waitForShowcasePageReady(browserDriver);
    }
}