From 7f9a16ba756ae07162836a44108623c04c902fe5 Mon Sep 17 00:00:00 2001 From: muendelezaji Date: Wed, 18 May 2016 16:07:15 +0100 Subject: [PATCH] More Slides actions - Insert photo, shape, text formatting - Helper functions --- wlauto/workloads/googleslides/__init__.py | 3 +- .../com.arm.wlauto.uiauto.googleslides.jar | Bin 12997 -> 13862 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 135 +++++++++++++++--- 3 files changed, 120 insertions(+), 18 deletions(-) diff --git a/wlauto/workloads/googleslides/__init__.py b/wlauto/workloads/googleslides/__init__.py index 183606bb..6b55bda5 100644 --- a/wlauto/workloads/googleslides/__init__.py +++ b/wlauto/workloads/googleslides/__init__.py @@ -62,7 +62,7 @@ class GoogleSlides(AndroidUiAutoBenchmark): def __init__(self, device, **kwargs): super(GoogleSlides, self).__init__(device, **kwargs) self.output_file = path.join(self.device.working_directory, self.instrumentation_log) - self.run_timeout = 120 + self.run_timeout = 300 def validate(self): log_method(self, 'validate') @@ -104,6 +104,7 @@ class GoogleSlides(AndroidUiAutoBenchmark): log_method(self, 'teardown') super(GoogleSlides, self).teardown(context) not_implemented(self, 'pull_logs(context)') + self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard') def finalize(self, context): log_method(self, 'finalize') diff --git a/wlauto/workloads/googleslides/com.arm.wlauto.uiauto.googleslides.jar b/wlauto/workloads/googleslides/com.arm.wlauto.uiauto.googleslides.jar index 0bd0e88b197e680287d83a386af9001bd3e913b0..2e83b06c088aa7e944503789f72d72c1dbb5a720 100644 GIT binary patch delta 13652 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≀RJb=s#JCZq7ohZ3gG)~@+kclT`*uV86*J=LYw0?}_^Sai4&TG! z+n9gIq(2*_*E)%AGE7b%#r?9dr>02<%#v!u|3I}7o7jy1jQ9ogBjI?(WC1x(mB{{+ zs>ki8L%f9lS=J-R&AQJp=oZ6~cfeeEK2-8u)A=W3iYUl+IKFJ0bgqb)nNOM}umxW; z9e-HSw;PTo)40-bh*>_2sRLu}ab{N2OiXCQUq$A=>)kDT<6GdUJ>3rC1S&qs~$3v#K1;sh5hlZ-R3=Kt0*DF}pM*ju$ zk`R|DgL*Lv#E_k9c$Z&X-DsRKaT3qMY=7!T;0v+!0AHPW-f_=WkXG(^N@ zZK-DNAA~p`rTvGt=i_|zo)AAC$$4E!W0S`Dh7dQiaaScZ@+|tIA?ME@xJ}C=rns6b zUyd4T)g0Kr|C9X_=te_)q$b*V=0Y(cx0)K+5TGrMmu@$9PoxJ`?;@sg1qz5%qkoFq zP$Y`_#1!wL`pEJ|I*nuzU*WoWz&>AYG{hYk zgHqG@nqfAY=AGDsigV|RK%q&$5iMIxG-^qMvAYUWUcf-)RJqJ*`cUmJ808;vF8AxE z`3@NY@se4RXN)&~C8l|NuN#w8aDUv&*Nx&^jfqH|;3$q1XBW2=`&3jEyNn4kP~tNt zsesoG%vJ@Kq?Ix|y_Azt3MV-PQp(e$D$=Few3JHva(YsGdI9&UhB!+KN{UO0N(xKz zm8i4WS^Rkj?=H?$40np*D?Y8*t(YD#_ethPuy@<+G^V%s_2M^*-z@%Z@qh0ehQoA- z;zPxMFaBUjqu}3#5(lmM7w&W1Q6WF4yxtPm?GrXCk?_QPan3%+eU(PW;YyM5b|sA4 zc$Zjm_CCku3zmvU7YOkhaKl0&9tBKX(`q(VQo4`X`9OA%Mhd8)RhvI0I3g iv6G}VKMqlyu}Dfl-&Gkg002N}lkqh#2Kg}n0001|Xc;B| diff --git a/wlauto/workloads/googleslides/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java b/wlauto/workloads/googleslides/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java index 982a5147..ebd0737f 100644 --- a/wlauto/workloads/googleslides/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java +++ b/wlauto/workloads/googleslides/uiauto/src/com/arm/wlauto/uiauto/UiAutomation.java @@ -54,6 +54,26 @@ public class UiAutomation extends UxPerfUiAutomation { public static final String DOC_FILENAME = "UX Perf Slides"; // public static final String DOC_FILENAME = "Untitled Presentation"; + public static final int BY_ID = 1; + public static final int BY_TEXT = 2; + public static final int BY_DESC = 3; + + public static final String DOCUMENTATION_WORKLOADS = + "class Workload(Extension):\n\tname = None\n\tdef init_resources(self, context):\n\t\tpass\n" + + "\tdef validate(self):\n\t\tpass\n\tdef initialize(self, context):\n\t\tpass\n" + + "\tdef setup(self, context):\n\t\tpass\n\tdef setup(self, context):\n\t\tpass\n" + + "\tdef run(self, context):\n\t\tpass\n\tdef update_result(self, context):\n\t\tpass\n" + + "\tdef teardown(self, context):\n\t\tpass\n\tdef finalize(self, context):\n\t\tpass\n"; + + public static final String DOCUMENTATION_AGENDAS_1 = "An agenda specifies what is to be done during a Workload Automation run, " + + "including which workloads will be run, with what configuration, which instruments and result processors will be enabled, etc. " + + "Agenda syntax is designed to be both succinct and expressive. Agendas are specified using YAML notation."; + + public static final String DOCUMENTATION_AGENDAS_2 = + "Use agendas for:\n\tSpecifying which workloads to run\n\t\t- Multiple iterations\n\t\t- Configuring workloads\n\t" + + "\t- IDs and Labels\n\tResult Processors and Instrumentation\n\t\t- Result Processors\n\t\t- Instrumentation\n\t" + + "\t- Disabling result processors and instrumentation\n\tOther Configuration (via config.py)\n"; + protected Map results = new LinkedHashMap(); protected Bundle parameters; @@ -127,17 +147,11 @@ public class UiAutomation extends UxPerfUiAutomation { protected void createNewDoc(int docType, String docName) throws Exception { UiObject newButton = getUiObjectByDescription("New presentation", CLASS_IMAGE_BUTTON); newButton.click(); - UiObject fromTemplate = getUiObjectByText("Choose template", CLASS_TEXT_VIEW); - - // UiObject newPowerpoint = getUiObjectByDescription("New PowerPoint", CLASS_IMAGE_BUTTON); - // UiObject newSlidesFile = getUiObjectByDescription("New Slides", CLASS_IMAGE_BUTTON); - UiObject newPowerpoint = getUiObjectByText("New PowerPoint", CLASS_TEXT_VIEW); - UiObject newSlidesFile = getUiObjectByText("New Slides", CLASS_TEXT_VIEW); UiObject view; - switch (docType) { case DOCTYPE_TEMPLATE: String[] templateNames = { "Lesson plan", "Book report", " Field trip", "Science project" }; + UiObject fromTemplate = getUiObjectByText("Choose template", CLASS_TEXT_VIEW); fromTemplate.clickAndWaitForNewWindow(); // UiObject template = getUiObjectByText(templateNames[1], CLASS_TEXT_VIEW); UiObject template = new UiObject(new UiSelector().resourceId(PACKAGE_ID + "template_item").instance(2)); @@ -145,18 +159,63 @@ public class UiAutomation extends UxPerfUiAutomation { break; case DOCTYPE_PPT: + // UiObject newPowerpoint = getUiObjectByDescription("New PowerPoint", CLASS_IMAGE_BUTTON); + UiObject newPowerpoint = getUiObjectByText("New PowerPoint", CLASS_TEXT_VIEW); newPowerpoint.clickAndWaitForNewWindow(); enterTextInSlide("Title", "WORKLOAD AUTOMATION"); enterTextInSlide("Subtitle", "Measuring perfomance of different productivity apps on Android OS"); saveDocument(docName); +/* insertSlide("Title and Content"); - enterTextInSlide("title", "INTRODUCTION"); + enterTextInSlide("title", "Introduction"); enterTextInSlide("Text placeholder", "Welcome to Documentation for Workload Automation"); view = getViewByDesc("Undo"); view.click(); enterTextInSlide("Text placeholder", "Workload Automation (WA) is a framework for running workloads on real hardware devices. " + "WA supports a number of output formats as well as additional instrumentation " + "(such as Streamline traces). A number of workloads are included with the framework."); + + insertSlide("Title and Content"); + enterTextInSlide("title", "Extensions - Workloads"); + enterTextInSlide("Text placeholder", DOCUMENTATION_WORKLOADS); + clickView(BY_DESC, "Text placeholder"); + clickView(BY_DESC, "Format"); + clickView(BY_TEXT, "Droid Sans"); + clickView(BY_TEXT, "Droid Sans Mono"); + clickView(BY_ID, PACKAGE_ID + "palette_back_button"); + view = getViewByDesc("Decrease text"); + repeatClickView(view, 20); + getUiDevice().pressBack(); + + insertSlide("Title and Content"); + enterTextInSlide("title", "Agendas - 1"); + enterTextInSlide("Text placeholder", DOCUMENTATION_AGENDAS_1); + + insertSlide("Title and Content"); + enterTextInSlide("title", "Agendas - 2"); + enterTextInSlide("Text placeholder", DOCUMENTATION_AGENDAS_2); +*/ + + // get first image in gallery and insert + insertSlide("Title Only"); + clickView(BY_DESC, "Insert"); + clickView(BY_TEXT, "Image", true); + clickView(BY_TEXT, "Recent"); + clickView(BY_ID, "com.android.documentsui:id/date", true); + + // last slide + insertSlide("Title Slide"); + // insert "?" shape + clickView(BY_DESC, "Insert"); + clickView(BY_TEXT, "Shape"); + clickView(BY_TEXT, "Buttons"); + clickView(BY_DESC, "actionButtonHelp"); + UiObject resize = getViewByDesc("Bottom-left resize"); + UiObject shape = getViewByDesc("actionButtonHelp"); + UiObject subtitle = getViewByDesc("subTitle"); + resize.dragTo(subtitle, 40); + shape.dragTo(subtitle, 40); + enterTextInSlide("title", "THE END. QUESTIONS?"); // view = getViewByDesc("Done"); // view = getViewByDesc("Navigate up"); // view.clickAndWaitForNewWindow(); @@ -164,6 +223,8 @@ public class UiAutomation extends UxPerfUiAutomation { case DOCTYPE_SLIDES: default: + // UiObject newSlidesFile = getUiObjectByDescription("New Slides", CLASS_IMAGE_BUTTON); + UiObject newSlidesFile = getUiObjectByText("New Slides", CLASS_TEXT_VIEW); newSlidesFile.clickAndWaitForNewWindow(); break; } @@ -179,20 +240,22 @@ public class UiAutomation extends UxPerfUiAutomation { } public void saveDocument(String docName) throws Exception { - UiObject saveButton = getViewByText("SAVE"); - saveButton.click(); - saveButton = getViewByText("Save on Device"); - saveButton.click(); + clickView(BY_TEXT, "SAVE"); + clickView(BY_TEXT, "Device"); + // Allow SD card access if requested + UiObject permissionView = new UiObject(new UiSelector().textContains("Allow Slides")); + if (permissionView.waitForExists(1000)) { + clickView(BY_TEXT, "Allow"); + } UiObject filename = getViewById(PACKAGE_ID + "file_name_edit_text"); filename.clearTextField(); filename.setText(docName); - saveButton = getUiObjectByText("Save", CLASS_BUTTON); + UiObject saveButton = getUiObjectByText("Save", CLASS_BUTTON); saveButton.click(); // Overwrite if prompted UiObject overwriteView = new UiObject(new UiSelector().textContains("already exists")); if (overwriteView.waitForExists(1000)) { - saveButton = getViewByText("Overwrite"); - saveButton.click(); + clickView(BY_TEXT, "Overwrite"); } sleep(1); } @@ -200,11 +263,11 @@ public class UiAutomation extends UxPerfUiAutomation { public UiObject enterTextInSlide(String viewName, String textToEnter) throws Exception { UiObject view = getViewByDesc(viewName); view.click(); - SystemClock.sleep(100); + sleepMicro(100); view.click(); // double click view.setText(textToEnter); getUiDevice().pressBack(); - sleep(1); + sleepMicro(200); return view; } @@ -222,6 +285,44 @@ public class UiAutomation extends UxPerfUiAutomation { sleep(1); } + public void sleepMicro(int microseconds) { + SystemClock.sleep(microseconds); + } + + public void repeatClickView(UiObject view, int repeat) throws Exception { + if (repeat < 1 || !view.isClickable()) return; + while (repeat-- > 0) { + view.click(); + sleepMicro(10); // in order to register as separate + } + } + + public UiObject clickView(int criteria, String matching) throws Exception { + return clickView(criteria, matching, false); + } + + public UiObject clickView(int criteria, String matching, boolean wait) throws Exception { + UiObject view; + switch (criteria) { + case BY_ID: + view = getViewById(matching); + break; + case BY_DESC: + view = getViewByDesc(matching); + break; + case BY_TEXT: + default: + view = getViewByText(matching); + break; + } + if (wait) { + view.clickAndWaitForNewWindow(); + } else { + view.click(); + } + return view; + } + public UiObject getViewByText(String text) throws Exception { UiObject object = new UiObject(new UiSelector().textContains(text)); if (!object.waitForExists(waitTimeout)) {