Skip to content

Commit a62e283

Browse files
committed
DoubleTap Support
1 parent b16e0b8 commit a62e283

File tree

8 files changed

+100
-3
lines changed

8 files changed

+100
-3
lines changed

src/main/java/io/appium/java_client/TouchAction.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,35 @@ public TouchAction tap(WebElement el, int x, int y) {
184184
parameterBuilder.add(action);
185185
return this;
186186
}
187+
188+
/**
189+
* Double taps an element, offset from upper left corner.
190+
*
191+
* @param el element to tap.
192+
* @param x x offset.
193+
* @param y y offset.
194+
* @return this TouchAction, for chaining.
195+
*/
196+
public TouchAction doubleTap(WebElement el, int x, int y) {
197+
ActionParameter action = new ActionParameter("doubleTap", (HasIdentity) el);
198+
action.addParameter("x", x);
199+
action.addParameter("y", y);
200+
parameterBuilder.add(action);
201+
return this;
202+
}
187203

204+
/**
205+
* Double taps an element, offset from upper left corner.
206+
*
207+
* @param el element to tap.
208+
* @return this TouchAction, for chaining.
209+
*/
210+
public TouchAction doubleTap(WebElement el) {
211+
ActionParameter action = new ActionParameter("doubleTap", (HasIdentity) el);
212+
parameterBuilder.add(action);
213+
return this;
214+
}
215+
188216
/**
189217
* A wait action, used as a NOP in multi-chaining.
190218
*

src/main/java/io/appium/java_client/TouchShortcuts.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@ public interface TouchShortcuts {
4848
* @param el The element to pinch.
4949
*/
5050
void zoom(WebElement el);
51+
52+
/**
53+
* Convenience method for double tapping element at a coordinate.
54+
*
55+
* @param element we want to double tap.
56+
* @param x x coordinate.
57+
* @param y y coordinate.
58+
*/
59+
void doubleTap(WebElement element, int x, int y);
60+
61+
/**
62+
* Convenience method for double tapping center of an element.
63+
*
64+
* @param element we want to double tap.
65+
*/
66+
void doubleTap(WebElement element);
5167

5268
/**
5369
* Convenience method for tapping a position on the screen.

src/main/java/io/appium/java_client/android/AndroidDriver.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,4 +389,18 @@ public void lockDevice() {
389389
public void unlockDevice() {
390390
CommandExecutionHelper.execute(this, unlockCommand());
391391
}
392+
393+
/**
394+
* @see TouchShortcuts#doubleTap(WebElement, int, int).
395+
*/
396+
@Override public void doubleTap(WebElement element, int x, int y) {
397+
throw new UnsupportedOperationException("Support has not been added in the android driver.");
398+
}
399+
400+
/**
401+
* @see TouchShortcuts#doubleTap(WebElement).
402+
*/
403+
@Override public void doubleTap(WebElement element) {
404+
throw new UnsupportedOperationException("Support has not been added in the android driver.");
405+
}
392406
}

src/main/java/io/appium/java_client/ios/IOSDriver.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.appium.java_client.CommandExecutionHelper;
2626
import io.appium.java_client.FindsByIosUIAutomation;
2727
import io.appium.java_client.MobileSelector;
28+
import io.appium.java_client.TouchAction;
2829
import io.appium.java_client.ios.internal.JsonToIOSElementConverter;
2930
import io.appium.java_client.remote.MobilePlatform;
3031
import io.appium.java_client.service.local.AppiumDriverLocalService;
@@ -272,4 +273,20 @@ class IOSAlert implements Alert {
272273
}
273274

274275
}
276+
277+
/**
278+
* @see TouchShortcuts#doubleTap(WebElement, int, int).
279+
*/
280+
@Override public void doubleTap(WebElement element, int x, int y) {
281+
TouchAction action = new TouchAction(this);
282+
action.doubleTap(element, x, y).perform();
283+
}
284+
285+
/**
286+
* @see TouchShortcuts#doubleTap(WebElement).
287+
*/
288+
@Override public void doubleTap(WebElement element) {
289+
TouchAction action = new TouchAction(this);
290+
action.doubleTap(element).perform();
291+
}
275292
}

src/main/java/io/appium/java_client/youiengine/YouiEngineDriver.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package io.appium.java_client.youiengine;
1818

1919
import io.appium.java_client.AppiumDriver;
20-
import io.appium.java_client.TouchAction;
2120
import io.appium.java_client.youiengine.internal.JsonToYouiEngineElementConverter;
2221
import org.openqa.selenium.Capabilities;
2322
import org.openqa.selenium.WebElement;
@@ -39,4 +38,18 @@ public void swipe(int startx, int starty, int endx, int endy, int duration) {
3938
.release();
4039
swipeAction.perform();
4140
}
41+
42+
/**
43+
* @see TouchShortcuts#doubleTap(WebElement, int, int).
44+
*/
45+
@Override public void doubleTap(WebElement element, int x, int y) {
46+
throw new UnsupportedOperationException("Support has not been added in the YouiEngineDriver.");
47+
}
48+
49+
/**
50+
* @see TouchShortcuts#doubleTap(WebElement).
51+
*/
52+
@Override public void doubleTap(WebElement element) {
53+
throw new UnsupportedOperationException("Support has not been added in the YouiEngineDriver.");
54+
}
4255
}

src/main/java/org/openqa/selenium/WebDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
package org.openqa.selenium;
1919

20-
import org.openqa.selenium.logging.Logs;
2120
import org.openqa.selenium.logging.LoggingPreferences;
21+
import org.openqa.selenium.logging.Logs;
2222

2323
import java.net.URL;
2424
import java.util.List;

src/test/java/io/appium/java_client/android/AndroidGestureTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class AndroidGestureTest extends BaseAndroidTest {
3939
assertEquals("ON" ,driver
4040
.findElementById("io.appium.android.apis:id/button_toggle").getText());
4141
}
42-
42+
4343
@Test public void singleElementTapTest() throws Exception {
4444
driver.startActivity("io.appium.android.apis", ".view.Buttons1");
4545
driver.tap(1, driver.findElementById("io.appium.android.apis:id/button_toggle"), 1000);

src/test/java/io/appium/java_client/ios/IOSGesturesTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.appium.java_client.ios;
1818

1919
import static org.junit.Assert.assertEquals;
20+
import static org.junit.Assert.assertNotNull;
2021

2122
import io.appium.java_client.MobileElement;
2223
import io.appium.java_client.SwipeElementDirection;
@@ -33,6 +34,14 @@ public class IOSGesturesTest extends BaseIOSTest {
3334
driver.tap(2, e, 2000);
3435
assertEquals(driver.findElementByXPath("//*[@name = \"Answer\"]").getText(), "6");
3536
}
37+
38+
@Test public void doubleTapTest() {
39+
IOSElement firstField = (IOSElement) driver.findElementById("IntegerA");
40+
firstField.sendKeys("2");
41+
driver.doubleTap(firstField);
42+
IOSElement editingMenu = (IOSElement) driver.findElementByClassName("UIAEditingMenu");
43+
assertNotNull(editingMenu);
44+
}
3645

3746
@Test public void zoomTest() {
3847
MobileElement e = driver.findElementById("IntegerA");

0 commit comments

Comments
 (0)