/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.test.uiautomator.demos; import android.widget.TextView; import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; import com.android.uiautomator.core.UiScrollable; import com.android.uiautomator.core.UiSelector; import com.android.uiautomator.testrunner.UiAutomatorTestCase; /** * Test demonstrates using the UiAutomator APIs to set an alarm to * go off in 2 minutes */ public class SetTwoMinuteAlarm extends UiAutomatorTestCase { /** * For the purpose of this demo, we're declaring the Launcher signatures here. * It may be more appropriate to declare signatures and methods related * to Launcher in their own reusable Launcher helper file. */ public static class LauncherHelper { public static final UiSelector ALL_APPS_BUTTON = new UiSelector().description("Apps"); public static final UiSelector LAUNCHER_CONTAINER = new UiSelector().scrollable(true); public static final UiSelector LAUNCHER_ITEM = new UiSelector().className(android.widget.TextView.class.getName()); } /** * Set an alarm 2 minutes from now and verify it goes off. Also check the notification * shades for an alarm. (Crude test but it demos the use of Android resources) * @throws UiObjectNotFoundException */ public void testDemo() throws UiObjectNotFoundException { // The following code is documented in the LaunchSettings demo. For detailed description // of how this code works, look at the demo LaunchSettings // Good to start from here getUiDevice().pressHome(); // open the All Apps view UiObject allAppsButton = new UiObject(LauncherHelper.ALL_APPS_BUTTON); allAppsButton.click(); // clicking the APPS tab UiSelector appsTabSelector = new UiSelector().className(android.widget.TabWidget.class.getName()) .childSelector(new UiSelector().text("Apps")); UiObject appsTab = new UiObject(appsTabSelector); appsTab.click(); // Clicking the Settings UiScrollable allAppsScreen = new UiScrollable(LauncherHelper.LAUNCHER_CONTAINER); allAppsScreen.setAsHorizontalList(); UiObject clockApp = allAppsScreen.getChildByText(LauncherHelper.LAUNCHER_ITEM, "Clock"); clockApp.click(); // Set an alarm to go off in about 2 minutes setAlarm(2); // wait for the alarm alert dialog UiObject alarmAlert = new UiObject(new UiSelector().packageName("com.google.android.deskclock") .className(TextView.class.getName()).text("Alarm")); assertTrue("Timeout while waiting for alarm to go off", alarmAlert.waitForExists(2 * 60 * 1000)); clickByText("Dismiss"); } /** * Helper function to set an alarm * @param minutesFromNow * @throws UiObjectNotFoundException */ private void setAlarm(int minutesFromNow) throws UiObjectNotFoundException { UiObject setAlarm = new UiObject(new UiSelector().textStartsWith("Alarm set")); if (!setAlarm.exists()) setAlarm = new UiObject(new UiSelector().textStartsWith("Set alarm")); setAlarm.click(); // let's add an alarm clickByDescription("Add alarm"); // let's set the time clickByText("Time"); // we want the minutes only UiSelector minuteAreaSelector = new UiSelector().className( android.widget.NumberPicker.class.getName()).instance(1); UiSelector minuteIncreaseButtonSelector = minuteAreaSelector.childSelector( new UiSelector().className(android.widget.Button.class.getName()).instance(1)); // increment minutes a couple of times for (int x = 0; x < minutesFromNow; x++) new UiObject(minuteIncreaseButtonSelector).click(); clickByText("Done"); // few confirmations to click thru UiObject doneButton = new UiObject(new UiSelector().text("Done")); UiObject okButton = new UiObject(new UiSelector().text("OK")); // working around some inconsistencies in phone vs tablet UI if (doneButton.exists()) { doneButton.click(); } else { okButton.click(); // let it fail if neither exists } // we're done. Let's return to home screen clickByText("Done"); getUiDevice().pressHome(); } /** * Helper to click on objects that match the content-description text * @param text * @throws UiObjectNotFoundException */ private void clickByDescription(String text) throws UiObjectNotFoundException { UiObject obj = new UiObject(new UiSelector().description(text)); obj.clickAndWaitForNewWindow(); } /** * Helper to click on object that match the text value * @param text * @throws UiObjectNotFoundException */ private void clickByText(String text) throws UiObjectNotFoundException { UiObject obj = new UiObject(new UiSelector().text(text)); obj.clickAndWaitForNewWindow(); } }