From 3a87bf2e4dbcffa417de1d3c19f3e93709c37bd0 Mon Sep 17 00:00:00 2001 From: John Richardson Date: Mon, 18 Jul 2016 11:18:34 +0100 Subject: [PATCH] Add further convenience methods to BaseUiAutomation Convenience methods to make it easier to get UiObjects and perform UiDevice based gestures and operations. Upgrade API level for BaseUiAutomation from 17 -> 18 and update dependent workloads accordingly. --- wlauto/common/android/BaseUiAutomation.class | Bin 5965 -> 16894 bytes wlauto/external/uiauto/project.properties | 2 +- .../arm/wlauto/uiauto/BaseUiAutomation.java | 386 +++++++++++++++++- .../andebench/uiauto/project.properties | 2 +- .../androbench/uiauto/project.properties | 2 +- .../benchmarkpi/uiauto/project.properties | 2 +- .../caffeinemark/uiauto/project.properties | 2 +- .../cfbench/uiauto/project.properties | 2 +- .../facebook/uiauto/project.properties | 2 +- .../geekbench/uiauto/project.properties | 2 +- .../glbenchmark/uiauto/project.properties | 2 +- .../linpack/uiauto/project.properties | 2 +- .../peacekeeper/uiauto/project.properties | 2 +- .../quadrant/uiauto/project.properties | 2 +- .../real_linpack/uiauto/project.properties | 2 +- .../smartbench/uiauto/project.properties | 2 +- 16 files changed, 398 insertions(+), 16 deletions(-) diff --git a/wlauto/common/android/BaseUiAutomation.class b/wlauto/common/android/BaseUiAutomation.class index e2bf1737c46e8d30c254ff3b650fc067c651d7c8..1f6f8cdd24cbb603b1057fdc8ab3310e172646d9 100644 GIT binary patch literal 16894 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 F{{W0855xcf delta 2746 zcmZ`*33Oa#75@HtZ|1#u^V*V0XPU`6ZMJ463+WOtXrWXKsU$2dw4;GKO@@#*ozyh6 zRIDS=YDy7>N0n|Yr8J6BsDU?W(12)v&YbhF_kQ=@ z@80{*J9CG4u0D10%+YZGjiS;(3wFujvj#55=XBg}U^n*2&0Y=rH0(E^O9>qh=y*`h z4;j$#uz>@3M8iQT`KX3N2J)~=!=Ri$uj31He#}5Vz9=PziWLY#T^pM8^>gM>UKZIEFC;RTwu=i3tgJT&})q;AuP~Z@;GD>pD(o z_=Y_Crh$4K*6}R^C-H3!&l*@LBRGlY3_OqT7`X9yoRZ5I3|xxu%Hexb=KC66)N$It zBI(pZ{6NDG<@_TJ_vrYsfuG=~QurkeKhyAY4KE9ri#z(edy`l6c6BBCxNS)$6Maj1 z;u|+6Hd@D(9WK#gU8dgY(KaNzR(D#b)t#o^pSY!eb?=(B0@c=S#bN8EJg>FOeN55t zigmT8)g_h<@AI4z)+T>tMJw7&tiUf!{1U$s&^Gt>t?TUW)9`B(zrk-!yo%phFZd%R z_&xq0pw`oli9g~s6Rr4@hSyE3!k?{z{IDmEgtRD%%B-?t-Ad#~8awcYz^r((v#+p1-02f5$)M`5F`d#G4xaW#ZrX zkASzQx2q%GAFk^#@n8H;!xT^a-Of$uFF~e#I%&HXUi9AjCO_48Vnj#>ArkEuP zOc4@=rYI7{rYI4m*1AA*i6|36!mW*OiZ}GclU)rh$^HbhW{R+wZ9N^Rn<3_qI#F(l z3MpA-y)vze0T)@%6okcm?y9Y(&~$4Ed{$b*em&a!siiR0S^$UQ4y0v-eG^0X|%Zl~fe0gO~)M%zhejbDkfup|sZeRU7U$ zu05mBVs)d?V`+G!HVnUygAFr{X*Q-0HLL0nAYXV|5IBraxdK zn8vJTH4;*bZ4^w=?F5@b7j53ecdHvk?2S2CmyMQqS^MRa_T`z(f{R*3xRKflXNk~F zA9B50OQg4tJI4n@#t$Tk(EAQ?_Yhh9AM*N1x7J*XH(VQez< z{vu|bJTUT-bNMfwnBu^nA_CBdY1oKT^fQB-96!Pt+-&>}$oL`aJrjR!tVw#GsmB)T zNsoM4kIII)&FzUTIR<>GtOZ}zLZ;4LMBKnG%W!xhXW2x?2*Uo^Hs-9H3L;ZGTj9mW z9Oz8D8I#E8{QNNW`xvEzCzi5aOyZ>mMo@l%Dp4zl+RVPGBzaY_kjF-K8gtXAY1X8S zS84JEy+Jh*zHcAqMcg(bAFxPUL|s=L1OH?6j3U+=R^} z$4!H`aHZ1p7XCiM2d0AMcPl>1Z-pAR_g3C|=}bH6PVrI7CHUiX+bIMQB7#O^TmAD} zYe%qvExC}b+0?AczPzB>9U_Al?oMHWT)gW6)T&LMfXCT9g5r=GatBCS^9U{)!Mkm| zXXQ4J7(Dy(AWBEE=v;jh%J5%&uCgzgpc-Gm#bdbC#**WB?-TSuaUPfmpBUgF?j9xy z2l&Zy5CwQNg}FGy4}(Fz?uW?MW30jQ$#jldvv^Z{6SRt-`7^> z9>e)DB|3to%VR3(Te_T8LJAkf>e9GmLRnN29Y26*v}B%*%W9qRAl&Lu?!f`LT|?Ux zlJ=r9)r0lS81N*6dy0(M{rq1`BZ4EChogL 100) ? 100 : percent; + float percentage = nPercent / 100f; + + Rect rect = view.getVisibleBounds(); + + if (rect.width() <= FINGER_TOUCH_HALF_WIDTH * 2) { + throw new IllegalStateException("Object width is too small for operation"); + } + + // Start at the top-center and bottom-center of the control + Point startPoint1 = new Point(rect.centerX(), rect.centerY() + + (int) ((rect.height() / 2) * percentage)); + Point startPoint2 = new Point(rect.centerX(), rect.centerY() + - (int) ((rect.height() / 2) * percentage)); + + // End at the same point at the center of the control + Point endPoint1 = new Point(rect.centerX(), rect.centerY() + FINGER_TOUCH_HALF_WIDTH); + Point endPoint2 = new Point(rect.centerX(), rect.centerY() - FINGER_TOUCH_HALF_WIDTH); + + view.performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, steps); + } + + public void uiObjectVertPinchOut(UiObject view, int steps, int percent) throws Exception { + final int FINGER_TOUCH_HALF_WIDTH = 20; + + // Make value between 1 and 100 + int nPercent = (percent < 0) ? 1 : (percent > 100) ? 100 : percent; + float percentage = nPercent / 100f; + + Rect rect = view.getVisibleBounds(); + + if (rect.width() <= FINGER_TOUCH_HALF_WIDTH * 2) { + throw new IllegalStateException("Object width is too small for operation"); + } + + // Start from the same point at the center of the control + Point startPoint1 = new Point(rect.centerX(), rect.centerY() + FINGER_TOUCH_HALF_WIDTH); + Point startPoint2 = new Point(rect.centerX(), rect.centerY() - FINGER_TOUCH_HALF_WIDTH); + + // End at the top-center and bottom-center of the control + Point endPoint1 = new Point(rect.centerX(), rect.centerY() + + (int) ((rect.height() / 2) * percentage)); + Point endPoint2 = new Point(rect.centerX(), rect.centerY() + - (int) ((rect.height() / 2) * percentage)); + + view.performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, steps); + } + + public void setScreenOrientation(ScreenOrientation orientation) throws Exception { + switch (orientation) { + case RIGHT: + getUiDevice().setOrientationRight(); + break; + case NATURAL: + getUiDevice().setOrientationNatural(); + break; + case LEFT: + getUiDevice().setOrientationLeft(); + break; + default: + throw new Exception("No orientation specified"); + } + } + + public void unsetScreenOrientation() throws Exception { + getUiDevice().unfreezeRotation(); + } + + public void uiObjectPerformLongClick(UiObject view, int steps) throws Exception { + Rect rect = view.getBounds(); + UiDevice.getInstance().swipe(rect.centerX(), rect.centerY(), + rect.centerX(), rect.centerY(), steps); + } + + public void uiDeviceSwipeVertical(int startY, int endY, int xCoordinate, int steps) { + getUiDevice().swipe(startY, xCoordinate, endY, xCoordinate, steps); + } + + public void uiDeviceSwipeHorizontal(int startX, int endX, int yCoordinate, int steps) { + getUiDevice().swipe(startX, yCoordinate, endX, yCoordinate, steps); + } + + public void uiObjectPinch(UiObject view, PinchType direction, int steps, + int percent) throws Exception { + if (direction.equals(PinchType.IN)) { + view.pinchIn(percent, steps); + } else if (direction.equals(PinchType.OUT)) { + view.pinchOut(percent, steps); + } + } + + public void uiObjectVertPinch(UiObject view, PinchType direction, + int steps, int percent) throws Exception { + if (direction.equals(PinchType.IN)) { + uiObjectVertPinchIn(view, steps, percent); + } else if (direction.equals(PinchType.OUT)) { + uiObjectVertPinchOut(view, steps, percent); + } + } + + public void repeatClickUiObject(UiObject view, int repeatCount, int intervalInMillis) throws Exception { + int repeatInterval = intervalInMillis > CLICK_REPEAT_INTERVAL_MINIMUM + ? intervalInMillis : CLICK_REPEAT_INTERVAL_DEFAULT; + if (repeatCount < 1 || !view.isClickable()) { + return; + } + + for (int i = 0; i < repeatCount; ++i) { + view.click(); + SystemClock.sleep(repeatInterval); // in order to register as separate click + } + } + + public UiObject clickUiObject(FindByCriteria criteria, String matching) throws Exception { + return clickUiObject(criteria, matching, null, false); + } + + public UiObject clickUiObject(FindByCriteria criteria, String matching, boolean wait) throws Exception { + return clickUiObject(criteria, matching, null, wait); + } + + public UiObject clickUiObject(FindByCriteria criteria, String matching, String clazz) throws Exception { + return clickUiObject(criteria, matching, clazz, false); + } + + public UiObject clickUiObject(FindByCriteria criteria, String matching, String clazz, boolean wait) throws Exception { + UiObject view; + + switch (criteria) { + case BY_ID: + view = (clazz == null) + ? getUiObjectByResourceId(matching) : getUiObjectByResourceId(matching, clazz); + break; + case BY_DESC: + view = (clazz == null) + ? getUiObjectByDescription(matching) : getUiObjectByDescription(matching, clazz); + break; + case BY_TEXT: + default: + view = (clazz == null) + ? getUiObjectByText(matching) : getUiObjectByText(matching, clazz); + break; + } + + if (wait) { + view.clickAndWaitForNewWindow(); + } else { + view.click(); + } + return view; + } + + public UiObject getUiObjectByResourceId(String resourceId, String className) throws Exception { + return getUiObjectByResourceId(resourceId, className, uiAutoTimeout); + } + + public UiObject getUiObjectByResourceId(String resourceId, String className, long timeout) throws Exception { + UiObject object = new UiObject(new UiSelector().resourceId(resourceId) + .className(className)); + if (!object.waitForExists(timeout)) { + throw new UiObjectNotFoundException(String.format("Could not find \"%s\" \"%s\"", + resourceId, className)); + } + return object; + } + + public UiObject getUiObjectByResourceId(String id) throws Exception { + UiObject object = new UiObject(new UiSelector().resourceId(id)); + + if (!object.waitForExists(uiAutoTimeout)) { + throw new UiObjectNotFoundException("Could not find view with resource ID: " + id); + } + return object; + } + + public UiObject getUiObjectByDescription(String description, String className) throws Exception { + return getUiObjectByDescription(description, className, uiAutoTimeout); + } + + public UiObject getUiObjectByDescription(String description, String className, long timeout) throws Exception { + UiObject object = new UiObject(new UiSelector().descriptionContains(description) + .className(className)); + if (!object.waitForExists(timeout)) { + throw new UiObjectNotFoundException(String.format("Could not find \"%s\" \"%s\"", + description, className)); + } + return object; + } + + public UiObject getUiObjectByDescription(String desc) throws Exception { + UiObject object = new UiObject(new UiSelector().descriptionContains(desc)); + + if (!object.waitForExists(uiAutoTimeout)) { + throw new UiObjectNotFoundException("Could not find view with description: " + desc); + } + return object; + } + + public UiObject getUiObjectByText(String text, String className) throws Exception { + return getUiObjectByText(text, className, uiAutoTimeout); + } + + public UiObject getUiObjectByText(String text, String className, long timeout) throws Exception { + UiObject object = new UiObject(new UiSelector().textContains(text) + .className(className)); + if (!object.waitForExists(timeout)) { + throw new UiObjectNotFoundException(String.format("Could not find \"%s\" \"%s\"", + text, className)); + } + return object; + } + + public UiObject getUiObjectByText(String text) throws Exception { + UiObject object = new UiObject(new UiSelector().textContains(text)); + + if (!object.waitForExists(uiAutoTimeout)) { + throw new UiObjectNotFoundException("Could not find view with text: " + text); + } + return object; + } +} diff --git a/wlauto/workloads/andebench/uiauto/project.properties b/wlauto/workloads/andebench/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/andebench/uiauto/project.properties +++ b/wlauto/workloads/andebench/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/androbench/uiauto/project.properties b/wlauto/workloads/androbench/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/androbench/uiauto/project.properties +++ b/wlauto/workloads/androbench/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/benchmarkpi/uiauto/project.properties b/wlauto/workloads/benchmarkpi/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/benchmarkpi/uiauto/project.properties +++ b/wlauto/workloads/benchmarkpi/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/caffeinemark/uiauto/project.properties b/wlauto/workloads/caffeinemark/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/caffeinemark/uiauto/project.properties +++ b/wlauto/workloads/caffeinemark/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/cfbench/uiauto/project.properties b/wlauto/workloads/cfbench/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/cfbench/uiauto/project.properties +++ b/wlauto/workloads/cfbench/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/facebook/uiauto/project.properties b/wlauto/workloads/facebook/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/facebook/uiauto/project.properties +++ b/wlauto/workloads/facebook/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/geekbench/uiauto/project.properties b/wlauto/workloads/geekbench/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/geekbench/uiauto/project.properties +++ b/wlauto/workloads/geekbench/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/glbenchmark/uiauto/project.properties b/wlauto/workloads/glbenchmark/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/glbenchmark/uiauto/project.properties +++ b/wlauto/workloads/glbenchmark/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/linpack/uiauto/project.properties b/wlauto/workloads/linpack/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/linpack/uiauto/project.properties +++ b/wlauto/workloads/linpack/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/peacekeeper/uiauto/project.properties b/wlauto/workloads/peacekeeper/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/peacekeeper/uiauto/project.properties +++ b/wlauto/workloads/peacekeeper/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/quadrant/uiauto/project.properties b/wlauto/workloads/quadrant/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/quadrant/uiauto/project.properties +++ b/wlauto/workloads/quadrant/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/real_linpack/uiauto/project.properties b/wlauto/workloads/real_linpack/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/real_linpack/uiauto/project.properties +++ b/wlauto/workloads/real_linpack/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18 diff --git a/wlauto/workloads/smartbench/uiauto/project.properties b/wlauto/workloads/smartbench/uiauto/project.properties index a3ee5ab6..ce39f2d0 100644 --- a/wlauto/workloads/smartbench/uiauto/project.properties +++ b/wlauto/workloads/smartbench/uiauto/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-17 +target=android-18