blob: 6f970a7d521cdf100f6143361608befba190c33b [file] [log] [blame]
/*
* 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();
}
}