diff --git a/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/T2CAppiumUtils.java b/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/T2CAppiumUtils.java index 217d2b2e8..945ff9faf 100644 --- a/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/T2CAppiumUtils.java +++ b/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/T2CAppiumUtils.java @@ -54,7 +54,8 @@ public static void doAction(BaseDriverController driver, ActionInfo actionInfo) } catch (Exception e) { e.printStackTrace(); if (!isOption) { - throw e; + int index = actionInfo.getId(); + throw new IllegalStateException("Failed at step " + index + ": " + e.getMessage(), e); } } } @@ -73,7 +74,6 @@ public static void chooseActionType(BaseDriverController driver, ActionInfo acti driver.click(webElement); break; case "tap": - //wait 3s before and after the tap action int x = (Integer) arguments.get("x"); int y = (Integer) arguments.get("y"); driver.tap(x, y); @@ -118,6 +118,10 @@ public static void chooseActionType(BaseDriverController driver, ActionInfo acti case "home": driver.pressKey(AndroidKey.HOME); break; + case "pressKeyCode": + String keyCode = arguments.get("keyCode") + ""; + driver.pressKeyCode(keyCode); + break; case "move": Object xVector = arguments.get("xVector"); Object yVector = arguments.get("yVector"); diff --git a/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/controller/AndroidDriverController.java b/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/controller/AndroidDriverController.java index 6168c4ac6..bd2af4064 100644 --- a/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/controller/AndroidDriverController.java +++ b/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/controller/AndroidDriverController.java @@ -20,6 +20,8 @@ import java.time.Duration; import java.util.Arrays; +import java.util.List; +import java.util.Map; public class AndroidDriverController extends BaseDriverController { private final AndroidDriver androidDriver; @@ -53,6 +55,13 @@ public void pressKey(AndroidKey key) { androidDriver.pressKey(new KeyEvent(key)); } + @Override + public void pressKeyCode(String keyCode) { + List keyEventArgs = Arrays.asList("keyevent", keyCode); + Map keyEventCmd = ImmutableMap.of("command", "input", "args", keyEventArgs); + androidDriver.executeScript("mobile: shell", keyEventCmd); + } + @Override public void scroll(WebElement webElement, int xVector, int yVector) { Point location = webElement.getLocation(); diff --git a/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/controller/BaseDriverController.java b/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/controller/BaseDriverController.java index 24144f1ee..24a450328 100644 --- a/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/controller/BaseDriverController.java +++ b/taps_to_cases/T2C_Runner/src/main/java/com/microsoft/hydralab/t2c/runner/controller/BaseDriverController.java @@ -56,6 +56,9 @@ public void terminateApp(String appPackageName) { public void pressKey(AndroidKey key) { } + public void pressKeyCode(String keyCode) { + } + public void scroll(WebElement webElement, int xVector, int yVector) { } diff --git a/taps_to_cases/T2C_Runner/src/test/java/com/microsoft/hydralab/t2c/runner/MockDriverT2CTest.java b/taps_to_cases/T2C_Runner/src/test/java/com/microsoft/hydralab/t2c/runner/MockDriverT2CTest.java index 62a00fb44..f2e7e699f 100644 --- a/taps_to_cases/T2C_Runner/src/test/java/com/microsoft/hydralab/t2c/runner/MockDriverT2CTest.java +++ b/taps_to_cases/T2C_Runner/src/test/java/com/microsoft/hydralab/t2c/runner/MockDriverT2CTest.java @@ -92,6 +92,10 @@ public void pressKey(AndroidKey key) { logger.info("Called " + currentMethodName()); } + public void pressKeyCode(String keyCode) { + logger.info("Called " + currentMethodName()); + } + public void scroll(WebElement webElement, int xVector, int yVector) { logger.info("Called " + currentMethodName()); }