Example usage for org.openqa.selenium.interactions Actions keyUp

List of usage examples for org.openqa.selenium.interactions Actions keyUp

Introduction

In this page you can find the example usage for org.openqa.selenium.interactions Actions keyUp.

Prototype

public Actions keyUp(CharSequence key) 

Source Link

Document

Performs a modifier key release.

Usage

From source file:org.eclipse.che.selenium.pageobject.ProjectExplorer.java

License:Open Source License

/**
 * Performs the multi-select by {@code Ctrl} key
 *
 * @param path item's path in format: "Test/src/pom.xml".
 *///from  w  w  w . ja va  2  s.c om
public void selectMultiFilesByCtrlKeys(String path) {
    if (PlatformUtils.isMac()) {
        Actions actions = actionsFactory.createAction(seleniumWebDriver);
        actions.keyDown(COMMAND).perform();
        waitAndSelectItem(path);
        waitItemIsSelected(path);
        actions.keyUp(COMMAND).perform();
    } else {
        Actions actions = actionsFactory.createAction(seleniumWebDriver);
        actions.keyDown(CONTROL).perform();
        waitAndSelectItem(path);
        waitItemIsSelected(path);
        actions.keyUp(CONTROL).perform();
    }
}

From source file:org.eclipse.che.selenium.pageobject.ProjectExplorer.java

License:Open Source License

/**
 * Performs the multi-select by {@code Shift} key
 *
 * @param path item's path in format: "Test/src/pom.xml".
 *///from   w  w w .j  a  v  a 2  s . c o  m
public void selectMultiFilesByShiftKey(String path) {
    Actions actions = actionsFactory.createAction(seleniumWebDriver);
    actions.keyDown(SHIFT).perform();
    waitAndSelectItem(path);
    waitItemIsSelected(path);
    actions.keyUp(Keys.SHIFT).perform();
}

From source file:org.eclipse.che.selenium.pageobject.ProjectExplorer.java

License:Open Source License

/**
 * Performs the multi-select by {@code Shift} key with check selected items.
 *
 * <p>Note! Before using this method, one item in project explorer must be selected.
 *
 * @param clickItemPath is the path to item which will be clicked in format: "Test/src/pom.xml".
 * @param selectedItemsPaths is the paths to the each items which should be checked.
 *//*from  w ww  .  j a  v  a 2s.  c o m*/
public void selectMultiFilesByShiftKeyWithCheckMultiselection(String clickItemPath,
        List<String> selectedItemsPaths) {
    Actions actions = actionsFactory.createAction(seleniumWebDriver);
    actions.keyDown(SHIFT).perform();
    waitAndSelectItem(clickItemPath);
    waitAllItemsIsSelected(selectedItemsPaths);
    actions.keyUp(SHIFT).perform();
}

From source file:org.eclipse.che.selenium.pageobject.ProjectExplorer.java

License:Open Source License

/**
 * Performs the multi-select by {@code Shift} key with check selected items, for items between
 * {@code firstItemPath} and {@code secondItemPath} including this two items.
 *
 * @param firstItemPath is the path to the first item which will be clicked in format:
 *     "Test/src/pom.xml"./* www .j a va  2 s.co  m*/
 * @param secondItemPath is the path to the second item which will be clicked in format:
 *     "Test/src/pom.xml".
 * @param selectedItemsPaths is the paths to the each items which should be checked.
 */
public void selectMultiFilesByShiftKeyWithCheckMultiselection(String firstItemPath, String secondItemPath,
        List<String> selectedItemsPaths) {
    waitAndSelectItem(firstItemPath);
    waitItemIsSelected(firstItemPath);

    Actions actions = actionsFactory.createAction(seleniumWebDriver);
    actions.keyDown(SHIFT).perform();
    waitAndSelectItem(secondItemPath);
    waitAllItemsIsSelected(selectedItemsPaths);
    actions.keyUp(SHIFT).perform();
}

From source file:org.richfaces.bootstrap.demo.ftest.webdriver.pickList.fragment.PickListSelectionImpl.java

License:Open Source License

private void select() {
    if (selection.size() > 1) {
        //multiple selection is not working
        Actions builder = new Actions(driver);
        boolean firstrun = true;
        for (WebElement keyElement : selection) {
            builder.click(keyElement);//also deselect previous selected elements
            if (firstrun) {
                firstrun = false;//from w ww.j  av a  2  s  .  c  o  m
                builder.keyDown(Keys.CONTROL);
            }
        }
        builder.keyUp(Keys.CONTROL);
        builder.build().perform();
    } else {
        selection.get(0).click();
    }
}

From source file:org.richfaces.fragment.extendedDataTable.RichFacesExtendedDataTable.java

License:Open Source License

private void clickOnRow(int rowIndex, Keys... keys) {
    checkSelectRowArguments(rowIndex, keys);
    Actions builder = new Actions(browser);
    for (Keys key : keys) {
        builder.keyDown(key).build().perform();
    }//ww w .j av a  2  s  .c o  m
    advanced().getCellElement(0, rowIndex).click();
    for (Keys key : keys) {
        builder.keyUp(key).build().perform();
    }
}

From source file:org.safs.selenium.webdriver.lib.interpreter.selrunner.steptype.AddSelection.java

License:Open Source License

@Override
protected boolean performSelect(WebElement select, WebElement option, TestRun ctx) {
    try {/*from   w  w  w .j  a  v  a 2 s.  c  o  m*/
        Actions action = new Actions(ctx.driver());
        action.keyDown(Keys.CONTROL);
        action.perform();

        option.click();

        action = new Actions(ctx.driver());
        action.keyUp(Keys.CONTROL);
        action.perform();
        return true;
    } catch (Exception x) {
        ctx.log().error("Select Option CTRL+click " + x.getClass().getSimpleName() + ", " + x.getMessage());
        return false;
    }
}

From source file:org.safs.selenium.webdriver.lib.WDLibrary.java

License:Open Source License

/**
 * Click the WebElement at a certain coordination with a special key pressed.<br>
 * Firstly it will try to get webelement's location and use Robot to click. At the same<br>
 * time, it will listen to a 'javascript mouse down' event to find out if the click really<br>
 * happened; If not, it will try to use Selenium's API to do the work.<br>
 * If the click point is outside of the boundary of the WebElement, which means we are going<br>
 * to click on the sibling component. At this situation, our click-listener will never receive<br>
 * the click event, we will turn off the click-listener.<br>
 *
 * @param clickable    WebElement, the WebElement to click on
 * @param offset      Point, the coordination relative to this WebElement to click at.<br>
 *                         if the offset is null, then click at the center.
 * @param specialKey   Keys, the special key to press during the click
 * @param mouseButtonNumber int, the mouse-button-number representing right, middle, or left button.
 *                          it can be {@link #MOUSE_BUTTON_LEFT} or {@link #MOUSE_BUTTON_RIGHT}.<br>
 *                          {@link #MOUSE_BUTTON_MIDDLE} NOT supported yet.
 * @param optional String[], the optional parameters
 * <ul>//w w  w .  j  a v a 2 s .co m
 * <li> optional[0] autoscroll boolean, if the component will be scrolled into view automatically before clicking.
 *                                      if not provided, the default value is true.
 * </ul>
 * @throws SeleniumPlusException
 */
public static void click(WebElement clickable, Point offset, Keys specialKey, int mouseButtonNumber,
        String... optional) throws SeleniumPlusException {
    String debugmsg = StringUtils.debugmsg(WDLibrary.class, "click");

    checkBeforeOperation(clickable, true);
    WebDriver wd = WDLibrary.getWebDriver();
    RemoteDriver rd = (wd instanceof RemoteDriver) ? (RemoteDriver) wd : null;
    boolean autoscroll = parseAutoScroll(optional);

    if (autoscroll) {
        try {
            new Actions(wd).moveToElement(clickable).perform();
        } catch (Throwable t) {
            IndependantLog
                    .error(debugmsg + "Ignoring Selenium Robot Click 'moveToElement' action failure caused by "
                            + t.getClass().getName());
        }
    }

    MouseEvent event = null;
    DocumentClickCapture listener = new DocumentClickCapture(true, clickable);
    checkOffset(clickable, offset, listener);

    try {
        //2. Perform the click action by Robot
        Point location = getScreenLocation(clickable);
        if (offset != null)
            location.translate(offset.x, offset.y);
        else {
            Dimension d = clickable.getSize();
            location.translate(d.width / 2, d.height / 2);
        }
        listener.addListeners(false);
        RBT.click(rd, location, specialKey, mouseButtonNumber, 1);
        listener.startListening();

        //3. Wait for the 'click' event, check if the 'mousedown' event really happened.
        // CANAGL -- FIREFOX PROBLEM: A link that takes you to a new page (like the Google SignIn link) will
        // trigger the default action and apparently will NOT allow us to detect the Click occurred.
        // So this WILL generate a waitForClick InterruptedException (Timeout)
        event = listener.waitForClick(timeoutWaitRobotClick);
        if (event == null) {
            IndependantLog.resumeLogging();
            IndependantLog
                    .warn(debugmsg + " Robot may fail to perform click. Click screen location is " + location);
            throw new SeleniumPlusException("The Robot click action didn't happen.");
        } else {
            IndependantLog.resumeLogging();
            IndependantLog.debug(debugmsg + "Robot click successful.");
        }
    } catch (Throwable thr) {
        IndependantLog.resumeLogging();
        IndependantLog.warn(debugmsg + "Met Exception " + StringUtils.debugmsg(thr));

        // let the failed listeners exit.
        try {
            Thread.sleep(DocumentClickCapture.LISTENER_LOOP_DELAY + DocumentClickCapture.delayWaitReady);
        } catch (Exception x) {
            IndependantLog.debug(debugmsg + StringUtils.debugmsg(x));
        }

        try {
            //2. Perform the click action by Selenium
            IndependantLog.debug(debugmsg + " Try selenium API to click.");
            //Create a combined actions according to the parameters
            Actions actions = new Actions(getWebDriver());

            if (autoscroll) {
                if (offset != null)
                    actions.moveToElement(clickable, offset.x, offset.y);
                else
                    actions.moveToElement(clickable);
            }

            if (specialKey != null)
                actions.keyDown(specialKey);
            if (isRightMouseButton(mouseButtonNumber))
                actions.contextClick();
            else if (isLeftMouseButton(mouseButtonNumber))
                actions.click();
            else if (isMiddleMouseButton(mouseButtonNumber)) {
                throw new SeleniumPlusException("Click 'mouse middle button' has not been supported yet.");
            } else {
                throw new SeleniumPlusException(
                        "Mouse button number '" + mouseButtonNumber + "' cannot be recognized.");
            }
            if (specialKey != null)
                actions.keyUp(specialKey);

            IndependantLog.debug(
                    debugmsg + "click with key '" + specialKey + "', mousebutton='" + mouseButtonNumber + "'");

            //Perform the actions
            listener.addListeners(false);
            try {
                //if the Robot click worked, but was not detected. If we clicked a link, original page has
                //disappeared, so the link doesn't exist neither, the WebElement is stale. WebDriver will
                //not throw StaleElementReferenceException until the 'implicit timeout' is reached.
                //But we don't want to waste that time, so just set 'implicit timeout' to 0 and don't wait.
                WDTimeOut.setImplicitlyWait(0, TimeUnit.SECONDS);
                actions.build().perform();
                listener.startListening();

                // Dharmesh: Not report waitForClick failure due to listener event not capture 
                // if click coordination out of component size or background. 
                // It is hard to find sibling component.
                try {
                    event = listener.waitForClick(timeoutWaitClick);
                } catch (Throwable the) {
                    IndependantLog.debug(debugmsg + " waitForClick failed but not reported");
                }
                ;

                /*if(event != null)
                   IndependantLog.debug(debugmsg+"click has been performed.");
                else{
                   throw new SeleniumPlusException("Selenium Action.click failed to return the MouseEvent.");
                }*/

            } catch (StaleElementReferenceException x) {
                listener.stopListening(); // chrome is NOT stopping!
                // the click probably was successful because the elements have changed!
                IndependantLog.debug(debugmsg
                        + "StaleElementException (not found) suggests the click has been performed successfully.");
            } finally {
                IndependantLog.debug(
                        debugmsg + "selenium API click finally stopping listener and resetting timeouts.");
                listener.stopListening(); // chrome is NOT stopping!
                WDTimeOut.resetImplicitlyWait(Processor.getSecsWaitForComponent(), TimeUnit.SECONDS);
            }
        } catch (Throwable th) {
            listener.stopListening(); // chrome is NOT stopping!
            if (enableClickListenerFailures) {
                IndependantLog.error(debugmsg, th);
                throw new SeleniumPlusException("click action failed: " + StringUtils.debugmsg(th));
            } else {
                IndependantLog.debug(debugmsg + "ignoring selenium API click failure caused by "
                        + th.getClass().getName() + ", " + th.getMessage());
            }
        }
    } finally {
        IndependantLog.debug(debugmsg + "FINALLY stopping any ongoing listener, if any.");
        listener.stopListening(); // chrome is NOT stopping!
    }
}

From source file:org.safs.selenium.webdriver.lib.WDLibrary.java

License:Open Source License

/**
 * Double-Click the WebElement at a certain coordination with a special key pressed.<br>
 * Firstly it will try to get webelement's location and use Robot to double click. At the same<br>
 * time, it will listen to a 'javascript mouse down' event to find out if the double click really<br>
 * happened; If not, it will try to use Selenium's API to do the work.<br>
 * If the click point is outside of the boundary of the WebElement, which means we are going<br>
 * to click on the sibling component. At this situation, our click-listener will never receive<br>
 * the click event, we will turn off the click-listener.<br>
 *
 * @param clickable    WebElement, the WebElement to click on
 * @param offset      Point, the coordination relative to this WebElement to click at.<br>
 *                         if the offset is null, then click at the center.
 * @param specialKey   Keys, the special key to press during the click
 * @param mouseButtonNumber int, the mouse-button-number representing right, middle, or left button.
 *                          it can be {@link #MOUSE_BUTTON_LEFT}<br>
 *                          {@link #MOUSE_BUTTON_MIDDLE} and {@link #MOUSE_BUTTON_RIGHT} NOT supported yet.
 * @param optional String[], the optional parameters
 * <ul>/*from   ww w .  j a  v  a2  s  .c om*/
 * <li> optional[0] autoscroll boolean, if the component will be scrolled into view automatically before clicking.
 *                                      if not provided, the default value is true.
 * </ul>
 * @throws SeleniumPlusException
 */
public static void doubleClick(WebElement clickable, Point offset, Keys specialKey, int mouseButtonNumber,
        String... optional) throws SeleniumPlusException {
    String debugmsg = StringUtils.debugmsg(WDLibrary.class, "doubleClick");

    checkBeforeOperation(clickable, true);

    MouseEvent event = null;
    DocumentClickCapture listener = new DocumentClickCapture(true, clickable);
    checkOffset(clickable, offset, listener);
    boolean autoscroll = parseAutoScroll(optional);

    try {
        //2. Perform the click action by Robot
        Point location = getScreenLocation(clickable);
        if (offset != null)
            location.translate(offset.x, offset.y);
        else
            location.translate(clickable.getSize().width / 2, clickable.getSize().height / 2);
        listener.addListeners(false);
        RBT.click(location, specialKey, mouseButtonNumber, 2);
        listener.startListening();

        //3. Wait for the 'click' event, check if the 'mousedown' event really happened.
        event = listener.waitForClick(timeoutWaitClick);
        if (event == null) {
            IndependantLog.warn(
                    debugmsg + " Robot may fail to perform doubleclick. Click screen location is " + location);
            throw new SeleniumPlusException("The doubleclick action didn't happen.");
        } else {
            IndependantLog.debug(debugmsg + "doubleclick has been peformed.");
        }
    } catch (Throwable thr) {
        IndependantLog.warn(debugmsg + "Met Exception " + StringUtils.debugmsg(thr));
        try {
            //2. Perform the click action by Selenium
            IndependantLog.debug(debugmsg + " Try selenium API to doubleclick.");
            //Create a combined actions according to the parameters
            Actions actions = new Actions(WDLibrary.getWebDriver());

            if (autoscroll) {
                if (offset != null)
                    actions.moveToElement(clickable, offset.x, offset.y);
                else
                    actions.moveToElement(clickable);
            }

            if (specialKey != null)
                actions.keyDown(specialKey);
            if (isLeftMouseButton(mouseButtonNumber))
                actions.doubleClick();
            else if (isMiddleMouseButton(mouseButtonNumber) || isRightMouseButton(mouseButtonNumber)) {
                throw new SeleniumPlusException(
                        "Double click 'mouse middle/right button' has not been supported yet.");
            } else
                throw new SeleniumPlusException(
                        "Mouse button number '" + mouseButtonNumber + "' cannot be recognized.");

            if (specialKey != null)
                actions.keyUp(specialKey);

            IndependantLog.debug(debugmsg + "doubleclick with key '" + specialKey + "', mousebutton='"
                    + mouseButtonNumber + "'");

            //Perform the actions
            listener.addListeners(false);
            try {
                //unfortunately, if the Robot click worked, but was not detected, we have to wait the full
                //WebDriver implied timeout period for the perform() failure to occur.
                actions.build().perform();
                listener.startListening();
                event = listener.waitForClick(timeoutWaitClick);
                if (event != null)
                    IndependantLog.debug(debugmsg + "doubleclick has been peformed.");
                else {
                    throw new SeleniumPlusException(
                            "Selenium Action.doubleclick failed to detect the MouseEvent.");
                }
            } catch (StaleElementReferenceException x) {
                // the click probably was successful because the elements have changed!
                IndependantLog.debug(debugmsg
                        + "StaleElementException (not found) suggests the click has been performed successfully.");
            }
        } catch (Throwable th) {
            IndependantLog.error(debugmsg, th);
            throw new SeleniumPlusException("doubleclick action failed: " + StringUtils.debugmsg(th));
        }
    } finally {
        listener.stopListening();
    }
}

From source file:org.safs.selenium.webdriver.lib.WDLibrary.java

License:Open Source License

/**
 * Does NOT clear any existing text in the control, but does attempt to insure the window/control has focus.
 * <br><em>Purpose:</em>
 * <a href="http://safsdev.sourceforge.net/sqabasic2000/SeleniumGenericMasterFunctionsReference.htm#detail_InputKeys" alt="inputKeys Keyword Reference" title="inputKeys Keyword Reference">inputKeys</a>
 * <p>//from w w  w . j  a  v a 2 s  . c o  m
 * Bypasses attempts to use AWT Robot for keystrokes.
 * Attempts to convert SAFS keystrokes to Selenium low-level Actions keystrokes.
 * @param we WebElement to send SAFS keystrokes (or plain text).
 * @param keystrokes SAFS keystrokes or plain text to type.
 * @throws SeleniumPlusException if we are unable to process the keystrokes successfully.
 **/
public static void inputKeysSAFS2Selenium(WebElement we, String keystrokes) throws SeleniumPlusException {
    String debugmsg = StringUtils.debugmsg(false);
    IndependantLog.debug(debugmsg + " processing '" + keystrokes + "' on webelement " + we);
    if (!focus(we))
        IndependantLog.warn(debugmsg + " Fail to set focus to webelement " + we);

    RemoteDriver wd = null;
    try {
        wd = (RemoteDriver) getWebDriver();
    } catch (Exception x) {
    }
    // convert to Selenium low-level Action keystrokes.
    if (keysparser != null) {
        Vector keys = keysparser.parseInput(keystrokes);
        Actions actions = new Actions(wd);

        if (we != null)
            actions = actions.moveToElement(we);

        Iterator events = keys.iterator();
        RobotKeyEvent event;
        Keys k = null;
        CharSequence c = null;
        while (events.hasNext()) {
            try {
                event = (RobotKeyEvent) events.next();
                c = null;
                k = convertToKeys(event);
                if (k == null) {
                    c = convertToCharacter(event);
                } else {

                }
                switch (event.get_event()) {

                case RobotKeyEvent.KEY_PRESS:
                    if (k != null) {
                        IndependantLog.debug(debugmsg + " handling keyDown '" + k.name() + "'");
                        actions = actions.keyDown(k);
                    } else {
                        IndependantLog.debug(debugmsg + " send char '" + c + "'");
                        actions = actions.sendKeys(c);
                    }
                    break;

                case RobotKeyEvent.KEY_RELEASE:
                    if (k != null) {
                        IndependantLog.debug(debugmsg + " handling keyUp '" + k.name() + "'");
                        actions = actions.keyUp(k);
                    } else {
                        IndependantLog.debug(debugmsg + " send char '" + c + "'");
                        actions = actions.sendKeys(c);
                    }
                    break;

                case RobotKeyEvent.KEY_TYPE:
                    if (k != null) {
                        IndependantLog.debug(debugmsg + " send Key '" + k.name() + "'");
                        actions = actions.sendKeys(k);
                    } else {
                        IndependantLog.debug(debugmsg + " send char '" + c + "'");
                        actions = actions.sendKeys(c);
                    }
                    break;
                default:
                }
            } catch (Exception x) {
                IndependantLog.debug(debugmsg + " IGNORING RobotKeyEvent exception:", x);
            }
        }
        try {
            actions.build().perform();
        } catch (StaleElementReferenceException x) {
            // the click probably was successful because the elements have changed!
            IndependantLog.debug(debugmsg + " StaleElementException (not found).");
        } catch (Throwable x) {
            IndependantLog.debug(debugmsg + " " + x.getClass().getName() + ", " + x.getMessage());
        } finally {
            IndependantLog.debug(debugmsg + " selenium actions.build().perform() complete.");
        }
    } else {
        // TODO what if keyparser cannot load a keys converter???
    }
}