mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-03-21 01:59:13 +00:00
More Slides actions
- Insert photo, shape, text formatting - Helper functions
This commit is contained in:
parent
9c2b83881f
commit
7f9a16ba75
@ -62,7 +62,7 @@ class GoogleSlides(AndroidUiAutoBenchmark):
|
|||||||
def __init__(self, device, **kwargs):
|
def __init__(self, device, **kwargs):
|
||||||
super(GoogleSlides, self).__init__(device, **kwargs)
|
super(GoogleSlides, self).__init__(device, **kwargs)
|
||||||
self.output_file = path.join(self.device.working_directory, self.instrumentation_log)
|
self.output_file = path.join(self.device.working_directory, self.instrumentation_log)
|
||||||
self.run_timeout = 120
|
self.run_timeout = 300
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
log_method(self, 'validate')
|
log_method(self, 'validate')
|
||||||
@ -104,6 +104,7 @@ class GoogleSlides(AndroidUiAutoBenchmark):
|
|||||||
log_method(self, 'teardown')
|
log_method(self, 'teardown')
|
||||||
super(GoogleSlides, self).teardown(context)
|
super(GoogleSlides, self).teardown(context)
|
||||||
not_implemented(self, 'pull_logs(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):
|
def finalize(self, context):
|
||||||
log_method(self, 'finalize')
|
log_method(self, 'finalize')
|
||||||
|
Binary file not shown.
@ -54,6 +54,26 @@ public class UiAutomation extends UxPerfUiAutomation {
|
|||||||
public static final String DOC_FILENAME = "UX Perf Slides";
|
public static final String DOC_FILENAME = "UX Perf Slides";
|
||||||
// public static final String DOC_FILENAME = "Untitled Presentation";
|
// 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<String, Timer> results = new LinkedHashMap<String, Timer>();
|
protected Map<String, Timer> results = new LinkedHashMap<String, Timer>();
|
||||||
|
|
||||||
protected Bundle parameters;
|
protected Bundle parameters;
|
||||||
@ -127,17 +147,11 @@ public class UiAutomation extends UxPerfUiAutomation {
|
|||||||
protected void createNewDoc(int docType, String docName) throws Exception {
|
protected void createNewDoc(int docType, String docName) throws Exception {
|
||||||
UiObject newButton = getUiObjectByDescription("New presentation", CLASS_IMAGE_BUTTON);
|
UiObject newButton = getUiObjectByDescription("New presentation", CLASS_IMAGE_BUTTON);
|
||||||
newButton.click();
|
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;
|
UiObject view;
|
||||||
|
|
||||||
switch (docType) {
|
switch (docType) {
|
||||||
case DOCTYPE_TEMPLATE:
|
case DOCTYPE_TEMPLATE:
|
||||||
String[] templateNames = { "Lesson plan", "Book report", " Field trip", "Science project" };
|
String[] templateNames = { "Lesson plan", "Book report", " Field trip", "Science project" };
|
||||||
|
UiObject fromTemplate = getUiObjectByText("Choose template", CLASS_TEXT_VIEW);
|
||||||
fromTemplate.clickAndWaitForNewWindow();
|
fromTemplate.clickAndWaitForNewWindow();
|
||||||
// UiObject template = getUiObjectByText(templateNames[1], CLASS_TEXT_VIEW);
|
// UiObject template = getUiObjectByText(templateNames[1], CLASS_TEXT_VIEW);
|
||||||
UiObject template = new UiObject(new UiSelector().resourceId(PACKAGE_ID + "template_item").instance(2));
|
UiObject template = new UiObject(new UiSelector().resourceId(PACKAGE_ID + "template_item").instance(2));
|
||||||
@ -145,18 +159,63 @@ public class UiAutomation extends UxPerfUiAutomation {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DOCTYPE_PPT:
|
case DOCTYPE_PPT:
|
||||||
|
// UiObject newPowerpoint = getUiObjectByDescription("New PowerPoint", CLASS_IMAGE_BUTTON);
|
||||||
|
UiObject newPowerpoint = getUiObjectByText("New PowerPoint", CLASS_TEXT_VIEW);
|
||||||
newPowerpoint.clickAndWaitForNewWindow();
|
newPowerpoint.clickAndWaitForNewWindow();
|
||||||
enterTextInSlide("Title", "WORKLOAD AUTOMATION");
|
enterTextInSlide("Title", "WORKLOAD AUTOMATION");
|
||||||
enterTextInSlide("Subtitle", "Measuring perfomance of different productivity apps on Android OS");
|
enterTextInSlide("Subtitle", "Measuring perfomance of different productivity apps on Android OS");
|
||||||
saveDocument(docName);
|
saveDocument(docName);
|
||||||
|
/*
|
||||||
insertSlide("Title and Content");
|
insertSlide("Title and Content");
|
||||||
enterTextInSlide("title", "INTRODUCTION");
|
enterTextInSlide("title", "Introduction");
|
||||||
enterTextInSlide("Text placeholder", "Welcome to Documentation for Workload Automation");
|
enterTextInSlide("Text placeholder", "Welcome to Documentation for Workload Automation");
|
||||||
view = getViewByDesc("Undo");
|
view = getViewByDesc("Undo");
|
||||||
view.click();
|
view.click();
|
||||||
enterTextInSlide("Text placeholder", "Workload Automation (WA) is a framework for running workloads on real hardware devices. "
|
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 "
|
+ "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.");
|
+ "(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("Done");
|
||||||
// view = getViewByDesc("Navigate up");
|
// view = getViewByDesc("Navigate up");
|
||||||
// view.clickAndWaitForNewWindow();
|
// view.clickAndWaitForNewWindow();
|
||||||
@ -164,6 +223,8 @@ public class UiAutomation extends UxPerfUiAutomation {
|
|||||||
|
|
||||||
case DOCTYPE_SLIDES:
|
case DOCTYPE_SLIDES:
|
||||||
default:
|
default:
|
||||||
|
// UiObject newSlidesFile = getUiObjectByDescription("New Slides", CLASS_IMAGE_BUTTON);
|
||||||
|
UiObject newSlidesFile = getUiObjectByText("New Slides", CLASS_TEXT_VIEW);
|
||||||
newSlidesFile.clickAndWaitForNewWindow();
|
newSlidesFile.clickAndWaitForNewWindow();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -179,20 +240,22 @@ public class UiAutomation extends UxPerfUiAutomation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void saveDocument(String docName) throws Exception {
|
public void saveDocument(String docName) throws Exception {
|
||||||
UiObject saveButton = getViewByText("SAVE");
|
clickView(BY_TEXT, "SAVE");
|
||||||
saveButton.click();
|
clickView(BY_TEXT, "Device");
|
||||||
saveButton = getViewByText("Save on Device");
|
// Allow SD card access if requested
|
||||||
saveButton.click();
|
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");
|
UiObject filename = getViewById(PACKAGE_ID + "file_name_edit_text");
|
||||||
filename.clearTextField();
|
filename.clearTextField();
|
||||||
filename.setText(docName);
|
filename.setText(docName);
|
||||||
saveButton = getUiObjectByText("Save", CLASS_BUTTON);
|
UiObject saveButton = getUiObjectByText("Save", CLASS_BUTTON);
|
||||||
saveButton.click();
|
saveButton.click();
|
||||||
// Overwrite if prompted
|
// Overwrite if prompted
|
||||||
UiObject overwriteView = new UiObject(new UiSelector().textContains("already exists"));
|
UiObject overwriteView = new UiObject(new UiSelector().textContains("already exists"));
|
||||||
if (overwriteView.waitForExists(1000)) {
|
if (overwriteView.waitForExists(1000)) {
|
||||||
saveButton = getViewByText("Overwrite");
|
clickView(BY_TEXT, "Overwrite");
|
||||||
saveButton.click();
|
|
||||||
}
|
}
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
@ -200,11 +263,11 @@ public class UiAutomation extends UxPerfUiAutomation {
|
|||||||
public UiObject enterTextInSlide(String viewName, String textToEnter) throws Exception {
|
public UiObject enterTextInSlide(String viewName, String textToEnter) throws Exception {
|
||||||
UiObject view = getViewByDesc(viewName);
|
UiObject view = getViewByDesc(viewName);
|
||||||
view.click();
|
view.click();
|
||||||
SystemClock.sleep(100);
|
sleepMicro(100);
|
||||||
view.click(); // double click
|
view.click(); // double click
|
||||||
view.setText(textToEnter);
|
view.setText(textToEnter);
|
||||||
getUiDevice().pressBack();
|
getUiDevice().pressBack();
|
||||||
sleep(1);
|
sleepMicro(200);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,6 +285,44 @@ public class UiAutomation extends UxPerfUiAutomation {
|
|||||||
sleep(1);
|
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 {
|
public UiObject getViewByText(String text) throws Exception {
|
||||||
UiObject object = new UiObject(new UiSelector().textContains(text));
|
UiObject object = new UiObject(new UiSelector().textContains(text));
|
||||||
if (!object.waitForExists(waitTimeout)) {
|
if (!object.waitForExists(waitTimeout)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user