In this post, I want to explain the following things
Here is the implementation:
Step 1: Open "Notes" application from the AppTray
Open UiAutomatorViewer, get the properties on Notes app
From the above screenshot, we can see the Notes application properties as
Uidevice class provides 'pressmenu' method to click on the menu button
Step 3: Click on "Add Note" from the menu
To click on "Add Note" button, get the properties of the button
using UiAutomatorViewer. From the above screenshot we can get the
properties of 'Add Note' button as follows
Step 4: Enter "Note 1" in the text field
Pressing on "Add Note" button opens a text box to enter the new note. Select the text box and enter the text "Note 1"
With UiAutomatorViewer get the properties of edit text field and
create an UiObject. After getting the properties of the text field,
enter the text using "setText()" method. Code snippet is below
Step 5: Read and validate the text entered
Step 6: Click on "Save" button
From the above screenshot, we can get the properties of save button. "Save" button can be accessed by it's text property.
Step 8: Long press on 'Note 1' and delete the note
To Long press on Note 1, we have get the properties of "Note 1" from the list of available notes. Get the properties of Notes from the UiAutomatorViewer
To access the Note 1 from the list, access it as a child object. To get the child object, we have to first get the property of entire list (list view) as a parent object and then the individual list items as child objects
Long press on the Note1 and select "Delete" button
To get the 'Delete' button property get the long press menu list view as parent object and then get the individual menu items as child objects. Code snippet is below
Here is the complete code,
- How to work with Menu buttons in UiAutomator?
- Working with Text fields in UiAutomator?
- How to Read text from Text filed
- Validating the text
- Validate long press menus
- Open "Notes" Application from AppTray
- Click on Menu button
- Click on "Add Note" button from the menu
- Enter Text "Note 1" in the Text field
- Read the text entered in the text box and validate it
- Click on "Save" button from the menu
- Add another note "Note 2"
- long press on "Note 1" and delete the note
Here is the implementation:
Step 1: Open "Notes" application from the AppTray
Open UiAutomatorViewer, get the properties on Notes app
From the above screenshot, we can see the Notes application properties as
- class = android.widget.TextView
- package = com.android.launcher
- text = Notes
- index = 34
// Look for the Notes application
UiObject notesApp = appView.getChildByText(new UiSelector()
.className(android.widget.TextView.class.getName()),
"Notes", true);
// Open Notes application
if (notesApp.exists()) {
notesApp.clickAndWaitForNewWindow();
// Validate Notebook App by it's package name
UiObject notesValidation = new UiObject(new UiSelector()
.packageName("com.example.android.notepad"));
assertTrue("Notes App not launched", notesValidation.exists());
Step 2: Click on Menu button
// Click on Menu button
UiDevice myDevice = getUiDevice();
myDevice.pressMenu();
Uidevice class provides 'pressmenu' method to click on the menu button
Step 3: Click on "Add Note" from the menu
- index = 0
- text = Add note
- class = android.widget.TextView
- package = com.example.android.notepad
// click on 'Add Note' button
UiObject addNoteButton = new UiObject(new UiSelector()
.className(android.widget.TextView.class.getName())
.text("Add note").index(0));
if (addNoteButton.exists())
addNoteButton.click();
Step 4: Enter "Note 1" in the text field
Pressing on "Add Note" button opens a text box to enter the new note. Select the text box and enter the text "Note 1"
// Edit field to enter new Text
UiObject addNoteText = new UiObject(new UiSelector()
.className(android.widget.EditText.class.getName()).index(0));
// Add note button in menu
if (addNoteText.exists())
addNoteText.setText("Note 1");
Step 5: Read and validate the text entered
<br/>assertEquals("Note 1", addNoteText.getText());<br/>
Step 6: Click on "Save" button
From the above screenshot, we can get the properties of save button. "Save" button can be accessed by it's text property.
// Save button in the menu
UiObject saveNoteButton = new UiObject(
new UiSelector().className(
android.widget.TextView.class.getName()).text("Save"));
if (saveNoteButton.exists())
saveNoteButton.clickAndWaitForNewWindow();
Step 7: Add new note "Note 2" //------Add Note 2--------
// Click on Menu button
myDevice.pressMenu();
// Add note button in menu
if (addNoteButton.exists()) {
addNoteButton.click();
// Add new Note 2
if (addNoteText.exists())
addNoteText.setText("Note 2");
assertEquals("Note 2", addNoteText.getText());
//Click on Save button
myDevice.pressMenu();
if (saveNoteButton.exists())
saveNoteButton.clickAndWaitForNewWindow();
}
Step 8: Long press on 'Note 1' and delete the note
To Long press on Note 1, we have get the properties of "Note 1" from the list of available notes. Get the properties of Notes from the UiAutomatorViewer
To access the Note 1 from the list, access it as a child object. To get the child object, we have to first get the property of entire list (list view) as a parent object and then the individual list items as child objects
//Get the list of added Notes
UiObject notesList = new UiObject(new UiSelector().className(
android.widget.ListView.class.getName()).index(0));
// Select Note 2 and long press on it
UiObject noteListItem = notesList.getChild(new UiSelector()
.className(android.widget.TextView.class.getName())
.text("Note 1").longClickable(true));
//Check if Note 1 exists in the list
assertEquals("Note 1", noteListItem.getText());
Long press on the Note1 and select "Delete" button
To get the 'Delete' button property get the long press menu list view as parent object and then get the individual menu items as child objects. Code snippet is below
// Long press the menu item
noteListItem.longClick();
//Long press menu
UiObject longPressNoteMenu = new UiObject(new UiSelector().className(
android.widget.LinearLayout.class.getName()).index(0));
UiObject note1Text = longPressNoteMenu.getChild(new UiSelector()
.className(android.widget.TextView.class.getName()).index(0));
//Check if Note 1 menu is opened
assertEquals("Note 1", note1Text.getText());
//Delete button in LongPress menu
UiObject deleteButton = new UiObject(new UiSelector().className(
android.widget.TextView.class.getName()).text("Delete"));
//Check if delete button exists
assertTrue("Delete Button not found", deleteButton.exists());
//Delete the note
deleteButton.clickAndWaitForNewWindow();
Here is the complete code,
package Notes;
import org.junit.After;
import org.junit.Before;
import android.os.RemoteException;
import com.android.uiautomator.core.UiDevice;
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;
public class CreateNewNote extends UiAutomatorTestCase {
// ----------------Global variables------------------------------
// Get the device properties
UiDevice myDevice = getUiDevice();
// All App Tray Button
UiObject AppTrayButton = new UiObject(new UiSelector().description("Apps"));
// Get AppTray container
UiScrollable appView = new UiScrollable(new UiSelector().className(
"android.view.View").scrollable(true));
// Apps Tab
UiObject AppsTab = new UiObject(new UiSelector().className(
"android.widget.TextView").description("Apps"));
// Verify the launched application by it's Package name
UiObject notesValidation = new UiObject(
new UiSelector().packageName("com.example.android.notepad"));
// Add Note menu button
UiObject addNoteButton = new UiObject(new UiSelector()
.className(android.widget.TextView.class.getName())
.text("Add note").index(0));
// Edit field to enter new Text
UiObject addNoteText = new UiObject(new UiSelector().className(
android.widget.EditText.class.getName()).index(0));
// Get the list of added Notes
UiObject notesList = new UiObject(new UiSelector().className(
android.widget.ListView.class.getName()).index(0));
// Save menu button
UiObject saveNoteButton = new UiObject(new UiSelector().className(
android.widget.TextView.class.getName()).text("Save"));
// Long press menu
UiObject longPressNoteMenu = new UiObject(new UiSelector().className(
android.widget.LinearLayout.class.getName()).index(0));
// Delete button in LongPress menu
UiObject deleteButton = new UiObject(new UiSelector().className(
android.widget.TextView.class.getName()).text("Delete"));
// Actual Tests starts here
@Before
public void verifyNotesApp() {
assertTrue("Notes App not launched", notesValidation.exists());
}
// Launch Notes Application
public void testLaunchTestApp() throws RemoteException,
UiObjectNotFoundException {
// wakeup the device if the screen is Off
if (!myDevice.isScreenOn())
myDevice.wakeUp();
// Press Home button
myDevice.pressHome();
// Launch Notes Application
assertTrue("AppTray Button not found", AppTrayButton.exists());
AppTrayButton.clickAndWaitForNewWindow();
assertTrue("All Apps Tab not found", AppsTab.exists());
// Set the swiping mode to horizontal (the default is vertical)
appView.setAsHorizontalList();
// Look for the Notes application
UiObject notesApp = appView.getChildByText(new UiSelector()
.className(android.widget.TextView.class.getName()), "Notes",
true);
// Validate Notebook App by it's package name
assertTrue("Notes App not launched", notesValidation.exists());
notesApp.clickAndWaitForNewWindow();
}
// Add Note1
public void testAddNote1() throws RemoteException,
UiObjectNotFoundException {
// Click on Menu button
myDevice.pressMenu();
assertTrue("Add Note Button not found", addNoteButton.exists());
// click on 'Add Note' button
addNoteButton.click();
// Add note button in menu
assertTrue("Add note Text field is not found", addNoteText.exists());
addNoteText.setText("Note 1");
// Read the text enetered in Text box
assertEquals("Note 1", addNoteText.getText());
// Click on Menu button
myDevice.pressMenu();
// Save button in the menu
assertTrue("Save Button not found", saveNoteButton.exists());
saveNoteButton.clickAndWaitForNewWindow();
}
// Add Note2
public void testAddNote2() throws UiObjectNotFoundException {
// ------Add Note 2--------
// Click on Menu button
myDevice.pressMenu();
assertTrue("Add note Button not found", addNoteButton.exists());
addNoteButton.click();
// Add note button in menu
assertTrue("Add note Text field not found", addNoteText.exists());
addNoteText.setText("Note 2");
// Read the Text entered
assertEquals("Note 2", addNoteText.getText());
// Save button in the menu
myDevice.pressMenu();
assertTrue("Save Button not found", saveNoteButton.exists());
saveNoteButton.clickAndWaitForNewWindow();
}
// Delete Note 1
public void testDeleteNote1() throws UiObjectNotFoundException {
// Select Note 2 and long press on it
UiObject noteListItem = notesList.getChild(new UiSelector()
.className(android.widget.TextView.class.getName())
.text("Note 1").longClickable(true));
// Check if Note 1 exists in the list
assertEquals("Note 1", noteListItem.getText());
// Long press the menu item
noteListItem.longClick();
UiObject note1Text = longPressNoteMenu.getChild(new UiSelector()
.className(android.widget.TextView.class.getName()).index(0));
// Check if Note 1 menu is opened
assertEquals("Note 1", note1Text.getText());
assertTrue("Delete Button not found", deleteButton.exists());
deleteButton.clickAndWaitForNewWindow();
}
@After
public void closeNotesApp() {
getUiDevice().pressBack();
}
}





