List of usage examples for org.openqa.selenium.interactions Actions keyUp
public Actions keyUp(CharSequence key)
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??? } }