From a2945d58cb1345b3b6bbb23ae9f852ee9109ded5 Mon Sep 17 00:00:00 2001 From: Michael McGeagh Date: Tue, 20 Sep 2016 11:15:40 +0100 Subject: [PATCH] Reorder functions and relabel ActionLogger tags. No functional changes made to actual workload run --- .../com.arm.wlauto.uiauto.googlephotos.jar | Bin 15747 -> 15554 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 488 ++++++++---------- 2 files changed, 228 insertions(+), 260 deletions(-) diff --git a/wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar b/wlauto/workloads/googlephotos/com.arm.wlauto.uiauto.googlephotos.jar index 8e54107579e6e26309f23b24cce10eff2bfa88b0..3ed0133d96b1acd9876b3cd108667dd41c478366 100644 GIT binary patch delta 15421 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 diff --git a/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index 2e62f2b9..71e7e162 100755 --- a/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/googlephotos/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -48,7 +48,7 @@ public class UiAutomation extends UxPerfUiAutomation { packageName = parameters.getString("package"); packageID = packageName + ":id/"; - pauseForSplashScreen(); + sleep(5); // Pause while splash screen loads setScreenOrientation(ScreenOrientation.NATURAL); dismissWelcomeView(); closePromotionPopUp(); @@ -60,12 +60,7 @@ public class UiAutomation extends UxPerfUiAutomation { unsetScreenOrientation(); } - public void pauseForSplashScreen() { - sleep(5); // Pause while splash screen loads - } - public void dismissWelcomeView() throws Exception { - // Click through the first two pages and make sure that we don't sign // in to our google account. This ensures the same set of photographs // are placed in the camera directory for each run. @@ -84,9 +79,6 @@ public class UiAutomation extends UxPerfUiAutomation { UiObject doNotSignInButton = new UiObject(new UiSelector().resourceId(packageID + "dont_sign_in_button")); - // Folder containing test images (early check required) - UiObject workingFolder = new UiObject(new UiSelector().text("wa-working")); - if (doNotSignInButton.exists()) { doNotSignInButton.click(); } else { @@ -99,6 +91,9 @@ public class UiAutomation extends UxPerfUiAutomation { getUiObjectByText("Use without an account", "android.widget.TextView"); useWithoutAccount.clickAndWaitForNewWindow(); + // Folder containing test images (early check required) + UiObject workingFolder = new UiObject(new UiSelector().text("wa-working")); + // On some devices the welcome views don't always appear so check // for the existence of the wa-working directory before attempting // to dismiss welcome views promoting app features @@ -122,240 +117,6 @@ public class UiAutomation extends UxPerfUiAutomation { } } - private void gesturesTest() throws Exception { - String testTag = "gestures"; - - // Perform a range of swipe tests while browsing photo gallery - LinkedHashMap testParams = new LinkedHashMap(); - testParams.put("swipe_left", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.LEFT, 10)); - testParams.put("pinch_out", new GestureTestParams(GestureType.PINCH, PinchType.OUT, 100, 50)); - testParams.put("pinch_in", new GestureTestParams(GestureType.PINCH, PinchType.IN, 100, 50)); - testParams.put("swipe_right", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.RIGHT, 10)); - - Iterator> it = testParams.entrySet().iterator(); - - // Select first photograph - selectPhoto(1); - - while (it.hasNext()) { - Map.Entry pair = it.next(); - GestureType type = pair.getValue().gestureType; - Direction dir = pair.getValue().gestureDirection; - PinchType pinch = pair.getValue().pinchType; - int steps = pair.getValue().steps; - int percent = pair.getValue().percent; - - UiObject view = new UiObject(new UiSelector().enabled(true)); - - if (!view.waitForExists(viewTimeout)) { - throw new UiObjectNotFoundException("Could not find \"photo view\"."); - } - - String runName = String.format(testTag + "_" + pair.getKey()); - ActionLogger logger = new ActionLogger(runName, parameters); - logger.start(); - - switch (type) { - case UIDEVICE_SWIPE: - uiDeviceSwipe(dir, steps); - break; - case UIOBJECT_SWIPE: - uiObjectSwipe(view, dir, steps); - break; - case PINCH: - uiObjectVertPinch(view, pinch, steps, percent); - break; - default: - break; - } - - logger.stop(); - } - - UiObject navigateUpButton = - getUiObjectByDescription("Navigate Up", "android.widget.ImageButton"); - navigateUpButton.click(); - } - - public enum Position { LEFT, RIGHT, CENTRE }; - - private class SeekBarTestParams { - - private Position seekBarPosition; - private int percent; - private int steps; - - SeekBarTestParams(final Position position, final int steps, final int percent) { - this.seekBarPosition = position; - this.steps = steps; - this.percent = percent; - } - } - - private void editPhotoColorTest() throws Exception { - String testTag = "edit_photo"; - - // Perform a range of swipe tests while browsing photo gallery - LinkedHashMap testParams = new LinkedHashMap(); - testParams.put("increment_color", new SeekBarTestParams(Position.RIGHT, 10, 20)); - testParams.put("reset_color", new SeekBarTestParams(Position.CENTRE, 0, 0)); - testParams.put("decrement_color", new SeekBarTestParams(Position.LEFT, 10, 20)); - - Iterator> it = testParams.entrySet().iterator(); - - // Select second photograph - selectPhoto(2); - UiObject editView = getUiObjectByResourceId(packageID + "edit", - "android.widget.ImageView"); - editView.click(); - - // Manage potential different spelling of UI element - UiObject editColor = new UiObject(new UiSelector().text("Color")); - UiObject editColour = new UiObject(new UiSelector().text("Colour")); - - long timeout = TimeUnit.SECONDS.toMillis(3); - - if (editColor.waitForExists(timeout)) { - editColor.click(); - } else if (editColour.waitForExists(timeout)) { - editColour.click(); - } else { - throw new UiObjectNotFoundException(String.format("Could not find \"%s\" \"%s\"", - "Color/Colour", "android.widget.RadioButton")); - } - - UiObject seekBar = getUiObjectByResourceId(packageID + "cpe_strength_seek_bar", - "android.widget.SeekBar"); - - while (it.hasNext()) { - Map.Entry pair = it.next(); - Position pos = pair.getValue().seekBarPosition; - int steps = pair.getValue().steps; - int percent = pair.getValue().percent; - - String runName = String.format(testTag + "_" + pair.getKey()); - ActionLogger logger = new ActionLogger(runName, parameters); - - sleep(1); // pause for stability before editing the colour - - logger.start(); - seekBarTest(seekBar, pos, steps); - logger.stop(); - } - - closeAndReturn(true); - } - - private void cropPhotoTest() throws Exception { - String testTag = "crop_photo"; - - // To improve travel accuracy perform the slide bar operation slowly - final int steps = 500; - - // Perform a range of swipe tests while browsing photo gallery - LinkedHashMap testParams = new LinkedHashMap(); - testParams.put("tilt_positive", Position.LEFT); - testParams.put("tilt_reset", Position.RIGHT); - testParams.put("tilt_negative", Position.RIGHT); - - Iterator> it = testParams.entrySet().iterator(); - - // Select third photograph - selectPhoto(3); - UiObject editView = getUiObjectByResourceId(packageID + "edit", - "android.widget.ImageView"); - editView.click(); - - UiObject cropTool = getUiObjectByResourceId(packageID + "cpe_crop_tool", - "android.widget.ImageView"); - cropTool.click(); - - UiObject straightenSlider = getUiObjectByResourceId(packageID + "cpe_straighten_slider"); - - while (it.hasNext()) { - Map.Entry pair = it.next(); - Position pos = pair.getValue(); - - String runName = String.format(testTag + "_" + pair.getKey()); - ActionLogger logger = new ActionLogger(runName, parameters); - - logger.start(); - slideBarTest(straightenSlider, pos, steps); - logger.stop(); - } - - closeAndReturn(true); - } - - private void rotatePhotoTest() throws Exception { - String testTag = "rotate_photo"; - - String[] subTests = {"anticlockwise_90", "anticlockwise_180", "anticlockwise_270"}; - - // Select fourth photograph - selectPhoto(4); - UiObject editView = getUiObjectByResourceId(packageID + "edit", - "android.widget.ImageView"); - editView.click(); - - UiObject cropTool = getUiObjectByResourceId(packageID + "cpe_crop_tool"); - cropTool.click(); - - UiObject rotate = getUiObjectByResourceId(packageID + "cpe_rotate_90"); - - for (String subTest : subTests) { - String runName = String.format(testTag + "_" + subTest); - ActionLogger logger = new ActionLogger(runName, parameters); - - logger.start(); - rotate.click(); - logger.stop(); - } - - closeAndReturn(true); - } - - // Helper to slide the seekbar during photo edit. - private void seekBarTest(final UiObject view, final Position pos, final int steps) throws Exception { - final int SWIPE_MARGIN_LIMIT = 5; - Rect rect = view.getVisibleBounds(); - - switch (pos) { - case LEFT: - getUiDevice().click(rect.left + SWIPE_MARGIN_LIMIT, rect.centerY()); - break; - case RIGHT: - getUiDevice().click(rect.right - SWIPE_MARGIN_LIMIT, rect.centerY()); - break; - case CENTRE: - view.click(); - break; - default: - break; - } - } - - // Helper to slide the slidebar during photo edit. - private void slideBarTest(final UiObject view, final Position pos, final int steps) throws Exception { - final int SWIPE_MARGIN_LIMIT = 5; - Rect rect = view.getBounds(); - - switch (pos) { - case LEFT: - getUiDevice().drag(rect.left + SWIPE_MARGIN_LIMIT, rect.centerY(), - rect.left + rect.width() / 4, rect.centerY(), - steps); - break; - case RIGHT: - getUiDevice().drag(rect.right - SWIPE_MARGIN_LIMIT, rect.centerY(), - rect.right - rect.width() / 4, rect.centerY(), - steps); - break; - default: - break; - } - } - public void closePromotionPopUp() throws Exception { UiObject promoCloseButton = new UiObject(new UiSelector().resourceId(packageID + "promo_close_button")); @@ -462,25 +223,232 @@ public class UiAutomation extends UxPerfUiAutomation { navigateUpButton.click(); } - // Helper to tag an individual photograph based on the index in wa-working - // gallery. After long clicking it tags the photograph with a tick in the - // corner of the image to indicate that the photograph has been selected - public void tagPhoto(final int index) throws Exception { - UiObject photo = - new UiObject(new UiSelector().resourceId(packageID + "recycler_view") - .childSelector(new UiSelector() - .index(index))); + private void gesturesTest() throws Exception { + String testTag = "gesture"; - // On some versions of the app a non-zero index is used for the - // photographs position while on other versions a zero index is used. - // Try both possiblities before throwing an exception. - if (photo.exists()) { - uiObjectPerformLongClick(photo, 100); + // Perform a range of swipe tests while browsing photo gallery + LinkedHashMap testParams = new LinkedHashMap(); + testParams.put("swipe_left", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.LEFT, 10)); + testParams.put("pinch_out", new GestureTestParams(GestureType.PINCH, PinchType.OUT, 100, 50)); + testParams.put("pinch_in", new GestureTestParams(GestureType.PINCH, PinchType.IN, 100, 50)); + testParams.put("swipe_right", new GestureTestParams(GestureType.UIDEVICE_SWIPE, Direction.RIGHT, 10)); + + Iterator> it = testParams.entrySet().iterator(); + + // Select first photograph + selectPhoto(1); + + while (it.hasNext()) { + Map.Entry pair = it.next(); + GestureType type = pair.getValue().gestureType; + Direction dir = pair.getValue().gestureDirection; + PinchType pinch = pair.getValue().pinchType; + int steps = pair.getValue().steps; + int percent = pair.getValue().percent; + + UiObject view = new UiObject(new UiSelector().enabled(true)); + + if (!view.waitForExists(viewTimeout)) { + throw new UiObjectNotFoundException("Could not find \"photo view\"."); + } + + String runName = String.format(testTag + "_" + pair.getKey()); + ActionLogger logger = new ActionLogger(runName, parameters); + logger.start(); + + switch (type) { + case UIDEVICE_SWIPE: + uiDeviceSwipe(dir, steps); + break; + case PINCH: + uiObjectVertPinch(view, pinch, steps, percent); + break; + default: + break; + } + + logger.stop(); + } + + UiObject navigateUpButton = + getUiObjectByDescription("Navigate Up", "android.widget.ImageButton"); + navigateUpButton.click(); + } + + public enum Position { LEFT, RIGHT, CENTRE }; + + private class SeekBarTestParams { + + private Position seekBarPosition; + private int percent; + private int steps; + + SeekBarTestParams(final Position position, final int steps, final int percent) { + this.seekBarPosition = position; + this.steps = steps; + this.percent = percent; + } + } + + private void editPhotoColorTest() throws Exception { + String testTag = "edit"; + + // Perform a range of swipe tests while browsing photo gallery + LinkedHashMap testParams = new LinkedHashMap(); + testParams.put("color_increment", new SeekBarTestParams(Position.RIGHT, 10, 20)); + testParams.put("color_reset", new SeekBarTestParams(Position.CENTRE, 0, 0)); + testParams.put("color_decrement", new SeekBarTestParams(Position.LEFT, 10, 20)); + + Iterator> it = testParams.entrySet().iterator(); + + // Select second photograph + selectPhoto(2); + + UiObject editView = getUiObjectByResourceId(packageID + "edit", + "android.widget.ImageView"); + editView.click(); + + // Manage potential different spelling of UI element + UiObject editCol = new UiObject(new UiSelector().textMatches("Colou?r")); + long timeout = TimeUnit.SECONDS.toMillis(3); + if (editCol.waitForExists(timeout)) { + editCol.click(); } else { - photo = new UiObject(new UiSelector().resourceId(packageID + "recycler_view") - .childSelector(new UiSelector() - .index(index - 1))); - uiObjectPerformLongClick(photo, 100); + throw new UiObjectNotFoundException(String.format("Could not find \"%s\" \"%s\"", + "Color/Colour", "android.widget.RadioButton")); + } + + UiObject seekBar = getUiObjectByResourceId(packageID + "cpe_strength_seek_bar", + "android.widget.SeekBar"); + + while (it.hasNext()) { + Map.Entry pair = it.next(); + Position pos = pair.getValue().seekBarPosition; + int steps = pair.getValue().steps; + int percent = pair.getValue().percent; + + String runName = String.format(testTag + "_" + pair.getKey()); + ActionLogger logger = new ActionLogger(runName, parameters); + + sleep(1); // pause for stability before editing the colour + + logger.start(); + seekBarTest(seekBar, pos, steps); + logger.stop(); + } + + closeAndReturn(true); + } + + private void cropPhotoTest() throws Exception { + String testTag = "crop"; + + // To improve travel accuracy perform the slide bar operation slowly + final int steps = 500; + + // Perform a range of swipe tests while browsing photo gallery + LinkedHashMap testParams = new LinkedHashMap(); + testParams.put("tilt_positive", Position.LEFT); + testParams.put("tilt_reset", Position.RIGHT); + testParams.put("tilt_negative", Position.RIGHT); + + Iterator> it = testParams.entrySet().iterator(); + + // Select third photograph + selectPhoto(3); + + UiObject editView = getUiObjectByResourceId(packageID + "edit", + "android.widget.ImageView"); + editView.click(); + + UiObject cropTool = getUiObjectByResourceId(packageID + "cpe_crop_tool", + "android.widget.ImageView"); + cropTool.click(); + + UiObject straightenSlider = getUiObjectByResourceId(packageID + "cpe_straighten_slider"); + + while (it.hasNext()) { + Map.Entry pair = it.next(); + Position pos = pair.getValue(); + + String runName = String.format(testTag + "_" + pair.getKey()); + ActionLogger logger = new ActionLogger(runName, parameters); + + logger.start(); + slideBarTest(straightenSlider, pos, steps); + logger.stop(); + } + + closeAndReturn(true); + } + + private void rotatePhotoTest() throws Exception { + String testTag = "rotate"; + + String[] subTests = {"90", "180", "270"}; + + // Select fourth photograph + selectPhoto(4); + + UiObject editView = getUiObjectByResourceId(packageID + "edit", + "android.widget.ImageView"); + editView.click(); + + UiObject cropTool = getUiObjectByResourceId(packageID + "cpe_crop_tool"); + cropTool.click(); + + UiObject rotate = getUiObjectByResourceId(packageID + "cpe_rotate_90"); + + for (String subTest : subTests) { + String runName = String.format(testTag + "_" + subTest); + ActionLogger logger = new ActionLogger(runName, parameters); + + logger.start(); + rotate.click(); + logger.stop(); + } + + closeAndReturn(true); + } + + // Helper to slide the seekbar during photo edit. + private void seekBarTest(final UiObject view, final Position pos, final int steps) throws Exception { + final int SWIPE_MARGIN_LIMIT = 5; + Rect rect = view.getVisibleBounds(); + + switch (pos) { + case LEFT: + getUiDevice().click(rect.left + SWIPE_MARGIN_LIMIT, rect.centerY()); + break; + case RIGHT: + getUiDevice().click(rect.right - SWIPE_MARGIN_LIMIT, rect.centerY()); + break; + case CENTRE: + view.click(); + break; + default: + break; + } + } + + // Helper to slide the slidebar during photo edit. + private void slideBarTest(final UiObject view, final Position pos, final int steps) throws Exception { + final int SWIPE_MARGIN_LIMIT = 5; + Rect rect = view.getBounds(); + + switch (pos) { + case LEFT: + getUiDevice().drag(rect.left + SWIPE_MARGIN_LIMIT, rect.centerY(), + rect.left + rect.width() / 4, rect.centerY(), + steps); + break; + case RIGHT: + getUiDevice().drag(rect.right - SWIPE_MARGIN_LIMIT, rect.centerY(), + rect.right - rect.width() / 4, rect.centerY(), + steps); + break; + default: + break; } } }