package org.richfaces.showcase; import org.jboss.arquillian.drone.api.annotation.Drone; import org.junit.Before; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Action; public class AbstractWebDriverTest extends AbstractShowcaseTest { @Drone protected WebDriver webDriver; @Before public void loadPage() { String addition = getAdditionToContextRoot(); this.contextRoot = getContextRoot(); if (runInPortalEnv) { webDriver.get(String.format("%s://%s:%s/%s", contextRoot.getProtocol(), contextRoot.getHost(), contextRoot.getPort(), "portal/classic/showcase")); JavascriptExecutor js = (JavascriptExecutor) webDriver; String setTextQuery = "document.querySelector(\"input[id$='portalForm:%s']\").value = '%s';"; js.executeScript(String.format(setTextQuery, "seleniumTestDemo", getDemoName())); js.executeScript(String.format(setTextQuery, "seleniumTestSample", getSampleName())); js.executeScript("document.querySelector(\"a[id$='portalForm:redirectToPortlet']\").click()"); } else { webDriver.manage().deleteAllCookies();// remove state from previous test webDriver.get(contextRoot.toExternalForm() + addition); } } protected Action fireEventAction(final WebElement element, final String event) { return new EventAction(webDriver, element, event); } protected void fireEvent(WebElement element, String event) { fireEventAction(element, event).perform(); } public static class EventAction implements Action { private final WebDriver driver; private final String event; private final WebElement element; public EventAction(WebDriver driver, WebElement element, String event) { this.driver = driver; this.element = element; this.event = event; } @Override public void perform() { String jQueryCmd = String.format("jQuery(arguments[0]).trigger('%s')", event); JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(jQueryCmd, element); } } /** * Works only with injected elements. */ public boolean isElementPresent(WebElement element) { try { element.isDisplayed(); return true; } catch (NoSuchElementException ignored) { return false; } } public void waitFor(long millis) { try { Thread.sleep(millis); } catch (InterruptedException ex) { } } }