protected Collection<Interaction> optionallyClickElement(PointerInput mouse) { List<Interaction> interactions = new ArrayList<>(); Optional<WebElement> target = getTargetElement(); if (target.isPresent()) { interactions.add(mouse.createPointerMove( Duration.ofMillis(500), target.map(Origin::fromElement).orElse(Origin.pointer()), 0, 0)); interactions.add(mouse.createPointerDown(MouseButton.LEFT.asArg())); interactions.add(mouse.createPointerUp(MouseButton.LEFT.asArg())); } return Collections.unmodifiableList(interactions); } }
/** * A convenience method that performs click-and-hold at the location of the source element, * moves by a given offset, then releases the mouse. * * @param source element to emulate button down at. * @param xOffset horizontal move offset. * @param yOffset vertical move offset. * @return A self reference. */ public Actions dragAndDropBy(WebElement source, int xOffset, int yOffset) { if (isBuildingActions()) { action.addAction(new ClickAndHoldAction(jsonMouse, (Locatable) source)); action.addAction(new MoveToOffsetAction(jsonMouse, null, xOffset, yOffset)); action.addAction(new ButtonReleaseAction(jsonMouse, null)); } return moveInTicks(source, 0, 0) .tick(defaultMouse.createPointerDown(LEFT.asArg())) .tick(defaultMouse.createPointerMove(Duration.ofMillis(250), Origin.pointer(), xOffset, yOffset)) .tick(defaultMouse.createPointerUp(LEFT.asArg())); }
/** * Releases the depressed left mouse button, in the middle of the given element. * This is equivalent to: * <i>Actions.moveToElement(onElement).release()</i> * * Invoking this action without invoking {@link #clickAndHold()} first will result in * undefined behaviour. * * @param target Element to release the mouse button above. * @return A self reference. */ public Actions release(WebElement target) { if (isBuildingActions()) { action.addAction(new ButtonReleaseAction(jsonMouse, (Locatable) target)); } return moveInTicks(target, 0, 0).tick(defaultMouse.createPointerUp(LEFT.asArg())); }
/** * A convenience method that performs click-and-hold at the location of the source element, * moves to the location of the target element, then releases the mouse. * * @param source element to emulate button down at. * @param target element to move to and release the mouse at. * @return A self reference. */ public Actions dragAndDrop(WebElement source, WebElement target) { if (isBuildingActions()) { action.addAction(new ClickAndHoldAction(jsonMouse, (Locatable) source)); action.addAction(new MoveMouseAction(jsonMouse, (Locatable) target)); action.addAction(new ButtonReleaseAction(jsonMouse, (Locatable) target)); } return moveInTicks(source, 0, 0) .tick(defaultMouse.createPointerDown(LEFT.asArg())) .moveInTicks(target, 0, 0) .tick(defaultMouse.createPointerUp(LEFT.asArg())); }
/** * Clicks (without releasing) in the middle of the given element. This is equivalent to: * <i>Actions.moveToElement(onElement).clickAndHold()</i> * * @param target Element to move to and click. * @return A self reference. */ public Actions clickAndHold(WebElement target) { if (isBuildingActions()) { action.addAction(new ClickAndHoldAction(jsonMouse, (Locatable) target)); } return moveInTicks(target, 0, 0) .tick(defaultMouse.createPointerDown(LEFT.asArg())); }
private void drawCircle (AppiumDriver driver, Point origin, double radius, int steps) { Point firstPoint = getPointOnCircle(0, steps, origin, radius); PointerInput finger = new PointerInput(Kind.TOUCH, "finger"); Sequence circle = new Sequence(finger, 0); circle.addAction(finger.createPointerMove(NO_TIME, VIEW, firstPoint.x, firstPoint.y)); circle.addAction(finger.createPointerDown(MouseButton.LEFT.asArg())); for (int i = 1; i < steps + 1; i++) { Point point = getPointOnCircle(i, steps, origin, radius); circle.addAction(finger.createPointerMove(STEP_DURATION, VIEW, point.x, point.y)); } circle.addAction(finger.createPointerUp(MouseButton.LEFT.asArg())); driver.perform(Arrays.asList(circle)); }
/** * Clicks (without releasing) at the current mouse location. * @return A self reference. */ public Actions clickAndHold() { if (isBuildingActions()) { action.addAction(new ClickAndHoldAction(jsonMouse, null)); } return tick(defaultMouse.createPointerDown(LEFT.asArg())); }