1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.test.uiautomator.demos; 17 18 import com.android.uiautomator.core.UiObject; 19 import com.android.uiautomator.core.UiObjectNotFoundException; 20 import com.android.uiautomator.core.UiScrollable; 21 import com.android.uiautomator.core.UiSelector; 22 import com.android.uiautomator.testrunner.UiAutomatorTestCase; 23 24 /** 25 * This demos how we read content-description to properly open the 26 * All Apps view and select and application to launch. Then we will 27 * use the package name to verify that the current window is actually 28 * from the expected package 29 */ 30 public class LaunchSettings extends UiAutomatorTestCase { 31 testDemo()32 public void testDemo() throws UiObjectNotFoundException { 33 // Good practice to start from a common place 34 getUiDevice().pressHome(); 35 36 // When we use the uiautomatorviewer in the DSK/tools we find that this 37 // button has the following content-description 38 UiObject allAppsButton = new UiObject(new UiSelector().description("Apps")); 39 40 // ** NOTE ** 41 // Any operation on a UiObject that is not currently present on the display 42 // will result in a UiObjectNotFoundException to be thrown. If we want to 43 // first check if the object exists we can use allAppsButton.exists() which 44 // return boolean. 45 // ** NOTE ** 46 47 //The operation below expects the click will result a new window. 48 allAppsButton.clickAndWaitForNewWindow(); 49 50 // On the this view, we expect two tabs, one for APPS and another for 51 // WIDGETS. We will want to click the APPS just so we're sure apps and 52 // not widgets is our current display 53 UiObject appsTab = new UiObject(new UiSelector().text("Apps")); 54 55 // ** NOTE ** 56 // The above operation assumes that there is only one text "Apps" in the 57 // current view. If not, then the first "Apps" is selected. But if we 58 // want to be certain that we click on the tab "Apps", we can use the 59 // uiautomatorview from the SDK/tools and see if we can further narrow the 60 // selector. Comment the line above and uncomment the one bellow to use 61 // the more specific selector. 62 // ** NOTE ** 63 64 // This creates a selector hierarchy where the first selector is for the 65 // TabWidget and the second will search only inside the layout of TabWidget 66 // To use this instead, uncomment the lines bellow and comment the above appsTab 67 //UiSelector appsTabSelector = 68 // new UiSelector().className(android.widget.TabWidget.class.getName()) 69 // .childSelector(new UiSelector().text("Apps")); 70 //UiObject appsTab = new UiObject(appsTabSelector); 71 72 73 // The operation below we only cause a content change so a click() is good 74 appsTab.click(); 75 76 // Since our device may have many apps on it spanning multiple views, we 77 // may need to scroll to find our app. Here we use UiScrollable to help. 78 // We declare the object with a selector to a scrollable view. Since in this 79 // case the firt scrollable view happens to be the one containing our apps 80 // list, we should be ok. 81 UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true)); 82 // swipe horizontally when searching (default is vertical) 83 appViews.setAsHorizontalList(); 84 85 // the appsViews will perform horizontal scrolls to find the Settings app 86 UiObject settingsApp = appViews.getChildByText( 87 new UiSelector().className(android.widget.TextView.class.getName()), "Settings"); 88 settingsApp.clickAndWaitForNewWindow(); 89 90 // create a selector for anything on the display and check if the package name 91 // is the expected one 92 UiObject settingsValidation = 93 new UiObject(new UiSelector().packageName("com.android.settings")); 94 95 assertTrue("Unable to detect Settings", settingsValidation.exists()); 96 } 97 } 98