From ac07c359fc7d24ab3febc75f1058097cc9e1f688 Mon Sep 17 00:00:00 2001 From: muendelezaji Date: Thu, 19 May 2016 16:55:21 +0100 Subject: [PATCH] Update test for file from storage - generalised clickView method - fix workload parameter names - delete file from previous run if they exist --- wlauto/workloads/googleslides/__init__.py | 20 ++--- .../com.arm.wlauto.uiauto.googleslides.jar | Bin 13877 -> 13993 bytes .../com/arm/wlauto/uiauto/UiAutomation.java | 76 ++++++++++-------- 3 files changed, 54 insertions(+), 42 deletions(-) diff --git a/wlauto/workloads/googleslides/__init__.py b/wlauto/workloads/googleslides/__init__.py index 6b55bda5..8e0116bd 100644 --- a/wlauto/workloads/googleslides/__init__.py +++ b/wlauto/workloads/googleslides/__init__.py @@ -35,6 +35,7 @@ class GoogleSlides(AndroidUiAutoBenchmark): # Views for FPS instrumentation view = [ + package + '/com.qo.android.quickpoint.Quickpoint', package + '/com.google.android.apps.docs.app.DocListActivity', package + '/com.google.android.apps.docs.welcome.warmwelcome.TrackingWelcomeActivity', package + '/com.google.android.apps.docs.app.NewMainProxyActivity', @@ -46,18 +47,17 @@ class GoogleSlides(AndroidUiAutoBenchmark): If ``True``, dumpsys captures will be carried out during the test run. The output is piped to log files which are then pulled from the phone. '''), - # Parameter('local_files', kind=list_of_strings, default=['Slides_Album.pptx', 'Slides_Pitch.pptx'], Parameter('local_files', kind=list_of_strings, description=''' - If ``True``, the workload will push PowerPoint files to be used for testing on - the device. Otherwise, the files will be created from template inside the app. + If specified, the workload will push the PowerPoint files to be used for + testing on the device. Otherwise, a file will be created inside the app. '''), ] instrumentation_log = '{}_instrumentation.log'.format(name) file_prefix = 'wa_test_' + device_dir = '/sdcard/Download' local_dir = '.' # self.dependencies_directory - device_dir = '/sdcard/Download' # self.device.working_directory def __init__(self, device, **kwargs): super(GoogleSlides, self).__init__(device, **kwargs) @@ -71,7 +71,8 @@ class GoogleSlides(AndroidUiAutoBenchmark): self.uiauto_params['output_dir'] = self.device.working_directory self.uiauto_params['results_file'] = self.output_file if self.local_files: - self.uiauto_params['local_files'] = '::'.join(self.local_files) + wa_files = [self.wa_filename(f) for f in self.local_files] + self.uiauto_params['local_files'] = '::'.join(wa_files) def initialize(self, context): log_method(self, 'initialize') @@ -79,10 +80,9 @@ class GoogleSlides(AndroidUiAutoBenchmark): if self.local_files: # push local PPT files for entry in os.listdir(self.local_dir): - wa_file = self.file_prefix + entry if entry.endswith('.pptx'): self.device.push_file(path.join(self.local_dir, entry), - path.join(self.device_dir, wa_file), + path.join(self.device_dir, self.wa_filename(entry)), timeout=60) # Force a re-index of the mediaserver cache to pick up new files # self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard') @@ -112,12 +112,14 @@ class GoogleSlides(AndroidUiAutoBenchmark): if self.local_files: # delete pushed PPT files for entry in os.listdir(self.local_dir): - wa_file = self.file_prefix + entry if entry.endswith('.pptx'): - self.device.delete_file(path.join(self.device_dir, wa_file)) + self.device.delete_file(path.join(self.device_dir, self.wa_filename(entry))) # Force a re-index of the mediaserver cache to pick up new files # self.device.execute('am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard') + def wa_filename(self, filename): + return self.file_prefix + filename + def get_metrics(self, context): self.device.pull_file(self.output_file, context.output_directory) metrics_file = path.join(context.output_directory, self.instrumentation_log) diff --git a/wlauto/workloads/googleslides/com.arm.wlauto.uiauto.googleslides.jar b/wlauto/workloads/googleslides/com.arm.wlauto.uiauto.googleslides.jar index acbb97e64890a22e57208d40af973ebda948d30f..93599f11d516eb83806649aeb327869280961f54 100644 GIT binary patch delta 13780 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 Hv>^Tug#t75 delta 13664 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 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 a8b67e6b..47937f2c 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 @@ -52,6 +52,8 @@ public class UiAutomation extends UxPerfUiAutomation { public static final int BY_TEXT = 2; public static final int BY_DESC = 3; + public static final int ONE_SECOND_IN_MS = 1000; + public static final String DOC_FILENAME = "UX Perf Slides"; public static final String DOCUMENTATION_WORKLOADS = @@ -93,9 +95,9 @@ public class UiAutomation extends UxPerfUiAutomation { skipWelcomeScreen(); enablePowerpointCompat(); if (useLocalFiles) { - testEditFileFromStorage(documents[0]); + testSlideshowFromStorage(documents[0]); } else { - testEditNewSlidesDoc(DOC_FILENAME); + testEditNewSlidesDocument(DOC_FILENAME); } if (false) { // TODO currently unused @@ -104,38 +106,39 @@ public class UiAutomation extends UxPerfUiAutomation { } protected void skipWelcomeScreen() throws Exception { - UiObject skipButton = getUiObjectByText("Skip", CLASS_BUTTON); - skipButton.clickAndWaitForNewWindow(); + clickView(BY_TEXT, "Skip", true); sleep(1); } protected void enablePowerpointCompat() throws Exception { uiDeviceEdgeSwipeFromLeft(10); - UiObject settings = getUiObjectByText("Settings", CLASS_TEXT_VIEW); - settings.clickAndWaitForNewWindow(); - UiObject checkboxRow = getUiObjectByText("Create PowerPoint", CLASS_TEXT_VIEW); - checkboxRow.click(); + clickView(BY_TEXT, "Settings", true); + clickView(BY_TEXT, "Create PowerPoint"); getUiDevice().pressBack(); sleep(1); } - protected void testEditFileFromStorage(String document) throws Exception { - UiObject openButton = getUiObjectByDescription("Open presentation", CLASS_TEXT_VIEW); - openButton.click(); - openButton = getUiObjectByText("Device storage", CLASS_TEXT_VIEW); - openButton.clickAndWaitForNewWindow(); - - UiObject selectDoc = getUiObjectByText(document, CLASS_TEXT_VIEW); - selectDoc.click(); - openButton = getUiObjectByText("Open", CLASS_BUTTON); - openButton.clickAndWaitForNewWindow(); - - sleep(1); + protected void testSlideshowFromStorage(String document) throws Exception { + // Sometimes docs deleted in __init__.py falsely appear on the app's home + // For robustness, it's nice to remove these placeholders + // However, the test should not crash because of it, so a silent catch is used + UiObject docView = new UiObject(new UiSelector().textContains(document)); + if (docView.waitForExists(ONE_SECOND_IN_MS)) { + try { + deleteDocument(document); + } catch (Exception e) { + // do nothing + } + } + clickView(BY_DESC, "Open presentation"); + clickView(BY_TEXT, "Device storage", true); + clickView(BY_TEXT, document); + clickView(BY_TEXT, "Open", CLASS_BUTTON, true); + sleep(5); getUiDevice().pressBack(); - deleteDocument(document); } - protected void testEditNewSlidesDoc(String docName) throws Exception { + protected void testEditNewSlidesDocument(String docName) throws Exception { // create new file clickView(BY_DESC, "New presentation"); clickView(BY_TEXT, "New PowerPoint", true); @@ -210,17 +213,16 @@ public class UiAutomation extends UxPerfUiAutomation { clickView(BY_TEXT, "Device"); // Allow SD card access if requested UiObject permissionView = new UiObject(new UiSelector().textContains("Allow Slides")); - if (permissionView.waitForExists(1000)) { + if (permissionView.waitForExists(ONE_SECOND_IN_MS)) { clickView(BY_TEXT, "Allow"); } UiObject filename = getViewById(PACKAGE_ID + "file_name_edit_text"); filename.clearTextField(); filename.setText(docName); - UiObject saveButton = getUiObjectByText("Save", CLASS_BUTTON); - saveButton.click(); + clickView(BY_TEXT, "Save"); // Overwrite if prompted UiObject overwriteView = new UiObject(new UiSelector().textContains("already exists")); - if (overwriteView.waitForExists(1000)) { + if (overwriteView.waitForExists(ONE_SECOND_IN_MS)) { clickView(BY_TEXT, "Overwrite"); } sleep(1); @@ -240,8 +242,8 @@ public class UiAutomation extends UxPerfUiAutomation { public void deleteDocument(String docName) throws Exception { UiObject doc = getViewByText(docName); doc.longClick(); - UiObject deleteButton = getUiObjectByText("Remove", CLASS_TEXT_VIEW); - deleteButton.click(); + clickView(BY_TEXT, "Remove"); + UiObject deleteButton; try { deleteButton = getUiObjectByText("Remove", CLASS_BUTTON); } catch (UiObjectNotFoundException e) { @@ -259,26 +261,34 @@ public class UiAutomation extends UxPerfUiAutomation { if (repeat < 1 || !view.isClickable()) return; while (repeat-- > 0) { view.click(); - sleepMicro(10); // in order to register as separate + sleepMicro(100); // in order to register as separate click } } public UiObject clickView(int criteria, String matching) throws Exception { - return clickView(criteria, matching, false); + return clickView(criteria, matching, null, false); } public UiObject clickView(int criteria, String matching, boolean wait) throws Exception { + return clickView(criteria, matching, null, wait); + } + + public UiObject clickView(int criteria, String matching, String clazz) throws Exception { + return clickView(criteria, matching, clazz, false); + } + + public UiObject clickView(int criteria, String matching, String clazz, boolean wait) throws Exception { UiObject view; switch (criteria) { case BY_ID: - view = getViewById(matching); + view = clazz == null ? getViewById(matching) : getUiObjectByResourceId(matching, clazz); break; case BY_DESC: - view = getViewByDesc(matching); + view = clazz == null ? getViewByDesc(matching) : getUiObjectByDescription(matching, clazz); break; case BY_TEXT: default: - view = getViewByText(matching); + view = clazz == null ? getViewByText(matching) : getUiObjectByText(matching, clazz); break; } if (wait) {