public Map<String, Object> toJson() { return encode(); }
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)); }
private Sequence getSequence(InputSource source) { Sequence sequence = sequences.get(source); if (sequence != null) { return sequence; } int longest = 0; for (Sequence examining : sequences.values()) { longest = Math.max(longest, examining.size()); } sequence = new Sequence(source, longest); sequences.put(source, sequence); return sequence; }
public Sequence(InputSource device, int initialLength) { if (!(device instanceof Encodable)) { throw new IllegalArgumentException("Input device must implement Encodable: " + device); } this.device = device; for (int i = 0; i < initialLength; i++) { addAction(new Pause(device, Duration.ZERO)); } }
Map<String, Object> sequenceValues = sequence.toJson(); SourceType sourceType = SourceType.valueOf(((String) sequenceValues.get("type")).toUpperCase()); mappedActions.put(sourceType, (List<Map<String, Object>>) sequenceValues.get("actions"));
@Test public void testLowLevelKeys() { wait.until(ExpectedConditions.presenceOfElementLocated(loginScreen)).click(); WebElement usernameField = driver.findElement(username); usernameField.click(); KeyInput keyboard = new KeyInput("keyboard"); Sequence sendKeys = new Sequence(keyboard, 0); sendKeys.addAction(keyboard.createKeyDown(Keys.SHIFT.getCodePoint())); sendKeys.addAction(keyboard.createKeyDown("f".codePointAt(0))); sendKeys.addAction(keyboard.createKeyUp("f".codePointAt(0))); sendKeys.addAction(keyboard.createKeyUp(Keys.SHIFT.getCodePoint())); sendKeys.addAction(keyboard.createKeyDown("o".codePointAt(0))); sendKeys.addAction(keyboard.createKeyUp("o".codePointAt(0))); sendKeys.addAction(keyboard.createKeyDown("o".codePointAt(0))); sendKeys.addAction(keyboard.createKeyUp("o".codePointAt(0))); driver.perform(Arrays.asList(sendKeys)); Assert.assertEquals("Foo", usernameField.getText()); }
public Actions tick(Interaction... actions) { // All actions must be for a unique source. Set<InputSource> seenSources = new HashSet<>(); for (Interaction action : actions) { boolean freshlyAdded = seenSources.add(action.getSource()); if (!freshlyAdded) { throw new IllegalStateException(String.format( "You may only add one action per input source per tick: %s", Arrays.asList(actions))); } } // Add all actions to sequences for (Interaction action : actions) { Sequence sequence = getSequence(action.getSource()); sequence.addAction(action); } // And now pad the remaining sequences with a pause. Set<InputSource> unseen = new HashSet<>(sequences.keySet()); unseen.removeAll(seenSources); for (InputSource source : unseen) { getSequence(source).addAction(new Pause(source, Duration.ZERO)); } return this; }