@Test public void horizontalSwipingTest() { Activity activity = new Activity("io.appium.android.apis", ".view.Gallery1"); driver.startActivity(activity); AndroidElement gallery = driver.findElementById("io.appium.android.apis:id/gallery"); List<MobileElement> images = gallery .findElementsByClassName("android.widget.ImageView"); int originalImageCount = images.size(); Point location = gallery.getLocation(); Point center = gallery.getCenter(); TouchAction swipe = new TouchAction(driver) .press(element(images.get(2),-10, center.y - location.y)) .waitAction(waitOptions(ofSeconds(2))) .moveTo(element(gallery,10,center.y - location.y)) .release(); swipe.perform(); assertNotEquals(originalImageCount, gallery .findElementsByClassName("android.widget.ImageView").size()); }
@Test public void pressByElementTest() { Activity activity = new Activity("io.appium.android.apis", ".view.Buttons1"); driver.startActivity(activity); new TouchAction(driver) .press(element(driver.findElementById("io.appium.android.apis:id/button_toggle"))) .waitAction(waitOptions(ofSeconds(1))) .release() .perform(); assertEquals("ON" ,driver .findElementById("io.appium.android.apis:id/button_toggle").getText()); }
@Test public void pressByCoordinatesTest() { Activity activity = new Activity("io.appium.android.apis", ".view.Buttons1"); driver.startActivity(activity); Point point = driver.findElementById("io.appium.android.apis:id/button_toggle").getLocation(); new TouchAction(driver) .press(point(point.x + 20, point.y + 30)) .waitAction(waitOptions(ofSeconds(1))) .release() .perform(); assertEquals("ON" ,driver .findElementById("io.appium.android.apis:id/button_toggle").getText()); }
@Test public void swipeTest() { WebDriverWait webDriverWait = new WebDriverWait(driver, 30); IOSElement slider = webDriverWait.until(driver1 -> driver.findElementByClassName("XCUIElementTypeSlider")); Dimension size = slider.getSize(); ElementOption press = element(slider, size.width / 2 + 2, size.height / 2); ElementOption move = element(slider, 1, size.height / 2); TouchAction swipe = new TouchAction(driver).press(press) .waitAction(waitOptions(ofSeconds(2))) .moveTo(move).release(); swipe.perform(); assertEquals("0%", slider.getAttribute("value")); }
@Test public void multiTouchTest() { Activity activity = new Activity("io.appium.android.apis", ".view.Buttons1"); driver.startActivity(activity); TouchAction press = new TouchAction(driver) .press(element(driver.findElementById("io.appium.android.apis:id/button_toggle"))) .waitAction(waitOptions(ofSeconds(1))) .release(); new MultiTouchAction(driver) .add(press) .perform(); assertEquals("ON" ,driver .findElementById("io.appium.android.apis:id/button_toggle").getText()); }
@Test public void tapActionTestByElement() throws Exception { Activity activity = new Activity("io.appium.android.apis", ".view.ChronometerDemo"); driver.startActivity(activity); AndroidElement chronometer = driver.findElementById("io.appium.android.apis:id/chronometer"); TouchAction startStop = new TouchAction(driver) .tap(tapOptions().withElement(element(driver.findElementById("io.appium.android.apis:id/start")))) .waitAction(waitOptions(ofSeconds(2))) .tap(tapOptions().withElement(element(driver.findElementById("io.appium.android.apis:id/stop")))); startStop.perform(); String time = chronometer.getText(); assertNotEquals(time, "Initial format: 00:00"); Thread.sleep(2500); assertEquals(time, chronometer.getText()); }
/** * @author wasiq.bhamla * @since 12-May-2017 10:08:55 PM */ public void tap () { perform ("Tapping on", e -> this.touch.waitAction (WaitOptions.waitOptions (ofMillis (this.beforeTap))) .tap (TapOptions.tapOptions () .withElement (ElementOption.element (e))) .waitAction (WaitOptions.waitOptions (ofMillis (this.afterTap))) .perform ()); }
/** * @author wasiq.bhamla * @since Sep 18, 2018 3:21:26 PM */ public void longPress () { perform ("Performing long press on", e -> this.touch.waitAction (WaitOptions.waitOptions (ofMillis (this.afterTap))) .longPress (LongPressOptions.longPressOptions () .withElement (ElementOption.element (e))) .waitAction (WaitOptions.waitOptions (ofMillis (this.afterTap))) .perform ()); }
public static void doubleClickByCoordinate(int x, int y) { log.info(MyLogger.getMethodName()); log.info("Double click X: " + x + " Y: " +y ); try { TouchAction touchAction = new TouchAction(driver); //touchAction.press(PointOption.point(x,y)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(100))).release().perform(); //touchAction.tap(PointOption.point(x,y)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(100))).release().perform(); touchAction.tap(PointOption.point(x, y)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(200))).tap(PointOption.point(x, y)).perform(); }catch (Exception e){ e.printStackTrace(); log.error("Fail to doubleClickByCoordinate"); } }
public static void swipe(int startX,int startY, int endX, int endY){ log.info("scroll from : startX " +startX + ", startY "+ startY+ ", to endX "+ endX+ ",endY "+ endY); try { TouchAction touchAction = new TouchAction(driver); PointOption pointStart = PointOption.point(startX, startY); PointOption pointEnd = PointOption.point(endX, endY); WaitOptions waitOption = WaitOptions.waitOptions(Duration.ofMillis(1000)); touchAction.press(pointStart).waitAction(waitOption).moveTo(pointEnd).release().perform(); }catch (Exception e){ log.error("scroll from : startX " +startX + ", startY "+ startY+ ", to endX "+ endX+ ",endY "+ endY); e.printStackTrace(); } }
public static void LongPressCoordinate(int x, int y){ log.info("LongPressCoordinate : x :" + x + " y : " + y); TouchAction touchAction = new TouchAction(driver); int endX = x; int endY = y + 10; try { //touchAction.longPress(PointOption.point(x,y)).waitAction(WaitOptions.waitOptions(Duration.ofSeconds(10))).perform(); if(!Util.isAndroid()){ endX = 0; y = 10; } touchAction.longPress(PointOption.point(x, y)).waitAction(WaitOptions.waitOptions(Duration.ofSeconds(10))) .moveTo(PointOption.point(endX, endY)).release().perform(); }catch (Exception e){ e.printStackTrace(); log.error("Fail to do long press"); } }
public static void clickElementCenter(MobileElement elem){ log.info(MyLogger.getMethodName()); Point point = elem.getCenter(); log.info("Element center : " + point); TouchAction touchAction = new TouchAction(driver); touchAction.press(PointOption.point(point.getX(),point.getY())).waitAction(WaitOptions.waitOptions(Duration.ofMillis(50))).release().perform(); }
public void iOSSwipe(int startX, int startY, int endX, int endY) throws Exception { TouchAction action = new TouchAction(driver); action.press(startX, startY); action.waitAction(1000); //has to be >= 500 otherwise it will fail action.moveTo(endX, endY); action.release(); action.perform(); }
public static void zoom(int startx1, int starty1, int endx1, int endy1, int startx2, int starty2, int endx2, int endy2, int duration) { LOGGER.debug(String.format( "Zoom action will be performed with parameters : startX1 : %s ; startY1: %s ; endX1: %s ; endY1: %s; startX2 : %s ; startY2: %s ; endX2: %s ; endY2: %s", startx1, starty1, endx1, endy1, startx2, starty2, endx2, endy2)); MobileDriver<?> driver = (MobileDriver<?>) getDriver(); try { MultiTouchAction multiTouch = new MultiTouchAction(driver); TouchAction<?> tAction0 = new TouchAction(driver); TouchAction<?> tAction1 = new TouchAction(driver); PointOption<?> startPoint1 = PointOption.point(startx1, starty1); PointOption<?> endPoint1 = PointOption.point(endx1 , endy1); PointOption<?> startPoint2 = PointOption.point(startx2, starty2); PointOption<?> endPoint2 = PointOption.point(endx2 , endy2); WaitOptions waitOptions = WaitOptions.waitOptions(Duration.ofMillis(duration)); tAction0.press(startPoint1).waitAction(waitOptions).moveTo(endPoint1).release(); tAction1.press(startPoint2).waitAction(waitOptions).moveTo(endPoint2).release(); multiTouch.add(tAction0).add(tAction1); multiTouch.perform(); LOGGER.info("Zoom has been performed"); } catch (Exception e) { LOGGER.error("Error during zooming", e); } }
/** * 向上滑动,从某个元素的顶部中间位置开始向上滑动一段距离 * @param yDiff */ public static void scrollUp(MobileElement elem,int yDiff) { log.info(MyLogger.getMethodName()); Point elemPoint = elem.getLocation(); Dimension dim = elem.getSize(); int startX = elemPoint.getX() + (int) (dim.getWidth() * 0.5); int startY = elemPoint.getY(); int endX = startX; int endY = startY - yDiff; log.info("scroll from : startX " +startX + ", startY "+ startY+ ", to endX "+ endX+ ",endY "+ endY); TouchAction touchAction = new TouchAction(driver); PointOption pointStart = PointOption.point(startX,startY); PointOption pointEnd = PointOption.point(endX,endX); touchAction.press(pointStart).waitAction(WaitOptions.waitOptions(Duration.ofSeconds(1))).moveTo(pointEnd).release().perform(); log.info("scroll over" ); }
@ReplayOnError(replayDelayMs=1000) public void swipe(int xMove, int yMove) { findElement(); int xInit = detectedObjectRectangle.x + detectedObjectRectangle.width / 2; int yInit = detectedObjectRectangle.y + detectedObjectRectangle.height / 2; createTouchAction().press(PointOption.point(xInit, yInit)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(500))) .moveTo(PointOption.point(xInit + xMove, yInit + yMove)) .release() .perform(); }
@Override public void doubleTap(WebElement webElement) { logger.entering(webElement); new TouchAction(this) .tap(webElement).release() .waitAction(DOUBLE_TAP_WAIT_TIME) .tap(webElement).release() .perform(); logger.exiting(); }
/** * Tap with X fingers on screen * @param fingers number of fingers to tap with * @param duration duration in ms to wait before releasing */ @ReplayOnError public void tap(int fingers, int duration) { PerformsTouchActions performTouchActions = checkForMobile(); MobileElement mobElement = (MobileElement) getUnderlyingElement(element); // code from appium MultiTouchAction multiTouch = new MultiTouchAction(performTouchActions); for (int i = 0; i < fingers; i++) { TouchAction<?> tap = createTouchAction(); multiTouch.add(tap.press(ElementOption.element(mobElement)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(duration))).release()); } multiTouch.perform(); }
/** * Convenience method for swiping on the given element to the given direction * @param xOffset X offset from the top-left corner of the element * @param yOffset Y offset from the top-left corner of the element * @param xMove Movement amplitude on x axis * @param yMove Movement amplitude on y axis */ @ReplayOnError public void swipe(int xOffset, int yOffset, int xMove, int yMove) { MobileElement mobElement = (MobileElement) getUnderlyingElement(element); createTouchAction().press(ElementOption.element(mobElement, xOffset, yOffset)) .waitAction() .moveTo(ElementOption.element(mobElement, xMove, yMove)) .release().perform(); }
@Override public <T extends Actor> void performAs(T actor) { WebDriverFacade facade = (WebDriverFacade) BrowseTheWeb.as(actor).getDriver(); AndroidDriver androidDriver = (AndroidDriver) facade.getProxiedDriver(); TouchAction actions = new TouchAction(androidDriver); actions.press(start) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000))) .moveTo(end) .release() .perform(); }