mirror of
				https://github.com/ARM-software/workload-automation.git
				synced 2025-11-04 00:52:08 +00:00 
			
		
		
		
	Update gmail workload to work against most recent version
* Updated gmail to work against 2019.05.26.252424914.release.
This commit is contained in:
		
				
					committed by
					
						
						Marc Bonnici
					
				
			
			
				
	
			
			
			
						parent
						
							ab5d12be72
						
					
				
				
					commit
					13166f66d1
				
			@@ -44,7 +44,7 @@ class Gmail(ApkUiautoWorkload):
 | 
			
		||||
    The result should then be placed in the '~/.workload_automation/dependencies/gmail/' directory
 | 
			
		||||
    on your local machine, creating this if it does not already exist.
 | 
			
		||||
 | 
			
		||||
    Known working APK version: 7.11.5.176133587
 | 
			
		||||
    Known working APK version: 2019.05.26.252424914.release
 | 
			
		||||
    '''
 | 
			
		||||
 | 
			
		||||
    parameters = [
 | 
			
		||||
@@ -90,14 +90,13 @@ class Gmail(ApkUiautoWorkload):
 | 
			
		||||
 | 
			
		||||
    def init_resources(self, context):
 | 
			
		||||
        super(Gmail, self).init_resources(context)
 | 
			
		||||
        if self.target.get_sdk_version() >= 24 and 'com.google.android.apps.photos' not in self.target.list_packages():
 | 
			
		||||
            raise WorkloadError('gmail workload requires Google Photos to be installed for Android N onwards')
 | 
			
		||||
        # Allows for getting working directory regardless if path ends with a '/'
 | 
			
		||||
        work_dir = self.target.working_directory
 | 
			
		||||
        work_dir = work_dir if work_dir[-1] != os.sep else work_dir[:-1]
 | 
			
		||||
        self.gui.uiauto_params['workdir_name'] = self.target.path.basename(work_dir)
 | 
			
		||||
        self.gui.uiauto_params['recipient'] = self.recipient
 | 
			
		||||
        self.gui.uiauto_params['offline_mode'] = self.offline_mode
 | 
			
		||||
        self.gui.uiauto_params['test_image'] = self.test_image
 | 
			
		||||
        # Only accept certain image formats
 | 
			
		||||
        if os.path.splitext(self.test_image.lower())[1] not in ['.jpg', '.jpeg', '.png']:
 | 
			
		||||
            raise ValidationError('{} must be a JPEG or PNG file'.format(self.test_image))
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -20,6 +20,7 @@ import android.support.test.runner.AndroidJUnit4;
 | 
			
		||||
import android.support.test.uiautomator.UiObject;
 | 
			
		||||
import android.support.test.uiautomator.UiObjectNotFoundException;
 | 
			
		||||
import android.support.test.uiautomator.UiSelector;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import com.arm.wa.uiauto.ApplaunchInterface;
 | 
			
		||||
import com.arm.wa.uiauto.BaseUiAutomation;
 | 
			
		||||
@@ -40,6 +41,7 @@ public class UiAutomation extends BaseUiAutomation implements ApplaunchInterface
 | 
			
		||||
    protected String recipient;
 | 
			
		||||
    protected String workdir_name;
 | 
			
		||||
    protected boolean offlineMode;
 | 
			
		||||
    protected String test_image;
 | 
			
		||||
 | 
			
		||||
    private int networkTimeoutSecs = 30;
 | 
			
		||||
    private long networkTimeout =  TimeUnit.SECONDS.toMillis(networkTimeoutSecs);
 | 
			
		||||
@@ -51,6 +53,7 @@ public class UiAutomation extends BaseUiAutomation implements ApplaunchInterface
 | 
			
		||||
        recipient = parameters.getString("recipient");
 | 
			
		||||
        workdir_name = parameters.getString("workdir_name");
 | 
			
		||||
        offlineMode = parameters.getBoolean("offline_mode");
 | 
			
		||||
        test_image = parameters.getString("test_image");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
@@ -112,6 +115,26 @@ public class UiAutomation extends BaseUiAutomation implements ApplaunchInterface
 | 
			
		||||
                                         .className("android.widget.TextView"));
 | 
			
		||||
        if (takeMeToBox.exists()) {
 | 
			
		||||
            takeMeToBox.clickAndWaitForNewWindow(uiAutoTimeout);
 | 
			
		||||
 | 
			
		||||
            UiObject noEmailAddressMessage = mDevice.findObject(new UiSelector()
 | 
			
		||||
                .textContains("Please add at least one email address.")
 | 
			
		||||
                .className("android.widget.TextView"));
 | 
			
		||||
 | 
			
		||||
            if (noEmailAddressMessage.exists()) {
 | 
			
		||||
                throw new UiObjectNotFoundException("No email account setup on device. Set up at least one email address");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Dismiss fresh new look pop up messages
 | 
			
		||||
        UiObject newLookMessageDismissButton =
 | 
			
		||||
            mDevice.findObject(new UiSelector().resourceId(packageID + "gm_dismiss_button")
 | 
			
		||||
                                         .className("android.widget.Button"));
 | 
			
		||||
        if(newLookMessageDismissButton.exists()) {
 | 
			
		||||
            newLookMessageDismissButton.click();
 | 
			
		||||
        }
 | 
			
		||||
        //Dismiss secondary message also with same button
 | 
			
		||||
        if(newLookMessageDismissButton.exists()) {
 | 
			
		||||
            newLookMessageDismissButton.click();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // If we're in offline mode we don't need to worry about syncing, so we're done
 | 
			
		||||
@@ -142,11 +165,6 @@ public class UiAutomation extends BaseUiAutomation implements ApplaunchInterface
 | 
			
		||||
            !waitUntilNoObject(waitingSync, networkTimeoutSecs*4)) {
 | 
			
		||||
            throw new UiObjectNotFoundException("Device cannot sync! Try rebooting or clearing app data");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void clickNewMail() throws Exception {
 | 
			
		||||
        String testTag = "click_new";
 | 
			
		||||
        ActionLogger logger = new ActionLogger(testTag, parameters);
 | 
			
		||||
 | 
			
		||||
        UiObject conversationView =
 | 
			
		||||
            mDevice.findObject(new UiSelector().resourceIdMatches(packageID + "conversation_list.*"));
 | 
			
		||||
@@ -154,8 +172,34 @@ public class UiAutomation extends BaseUiAutomation implements ApplaunchInterface
 | 
			
		||||
            throw new UiObjectNotFoundException("Could not find \"conversationView\".");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Get rid of smart compose message on newer versions and return to home screen before ckickNewMail test
 | 
			
		||||
        UiObject newMailButton =
 | 
			
		||||
            getUiObjectByDescription("Compose", "android.widget.ImageButton");
 | 
			
		||||
        newMailButton.click();
 | 
			
		||||
 | 
			
		||||
        UiObject smartComposeDismissButton = mDevice.findObject(new UiSelector().textContains("Got it")
 | 
			
		||||
                                                                                .className("android.widget.Button"));
 | 
			
		||||
        if(smartComposeDismissButton.exists()) {
 | 
			
		||||
            smartComposeDismissButton.click();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Return to conversation/home screen
 | 
			
		||||
        mDevice.pressBack();
 | 
			
		||||
        if(!conversationView.exists()) {
 | 
			
		||||
           mDevice.pressBack(); 
 | 
			
		||||
        }
 | 
			
		||||
        if(!conversationView.exists()) {
 | 
			
		||||
           mDevice.pressBack(); 
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void clickNewMail() throws Exception {
 | 
			
		||||
        String testTag = "click_new";
 | 
			
		||||
        ActionLogger logger = new ActionLogger(testTag, parameters);
 | 
			
		||||
 | 
			
		||||
        UiObject newMailButton =
 | 
			
		||||
            getUiObjectByDescription("Compose", "android.widget.ImageButton");
 | 
			
		||||
 | 
			
		||||
        logger.start();
 | 
			
		||||
        newMailButton.clickAndWaitForNewWindow(uiAutoTimeout);
 | 
			
		||||
        logger.stop();
 | 
			
		||||
@@ -189,58 +233,55 @@ public class UiAutomation extends BaseUiAutomation implements ApplaunchInterface
 | 
			
		||||
        if (rootMenu.exists()){
 | 
			
		||||
            rootMenu.click();
 | 
			
		||||
        }
 | 
			
		||||
        // Check for Photos
 | 
			
		||||
        UiObject photos =
 | 
			
		||||
            mDevice.findObject(new UiSelector().text("Photos")
 | 
			
		||||
 | 
			
		||||
        UiObject imagesEntry =
 | 
			
		||||
            mDevice.findObject(new UiSelector().textContains("Images")
 | 
			
		||||
                                               .className("android.widget.TextView"));
 | 
			
		||||
        // If Photos does not exist use the images folder
 | 
			
		||||
        if (!photos.waitForExists (uiAutoTimeout)) {
 | 
			
		||||
            UiObject imagesEntry =
 | 
			
		||||
                mDevice.findObject(new UiSelector().textContains("Images")
 | 
			
		||||
                                                   .className("android.widget.TextView"));
 | 
			
		||||
            if (imagesEntry.waitForExists(uiAutoTimeout)) {
 | 
			
		||||
                imagesEntry.click();
 | 
			
		||||
            }
 | 
			
		||||
        if (imagesEntry.waitForExists(uiAutoTimeout)) {
 | 
			
		||||
            imagesEntry.click();
 | 
			
		||||
 | 
			
		||||
            selectGalleryFolder(workdir_name);
 | 
			
		||||
 | 
			
		||||
            UiObject imageButton =
 | 
			
		||||
            mDevice.findObject(new UiSelector().resourceId("com.android.documentsui:id/grid")
 | 
			
		||||
                                               .className("android.widget.Gridview")
 | 
			
		||||
                                               .childSelector(new UiSelector().index(0)
 | 
			
		||||
                                               .className("android.widget.FrameLayout")));
 | 
			
		||||
            if (!imageButton.exists()){
 | 
			
		||||
                imageButton =
 | 
			
		||||
                    mDevice.findObject(new UiSelector().resourceId("com.android.documentsui:id/dir_list")
 | 
			
		||||
                                                       .childSelector(new UiSelector().index(0)
 | 
			
		||||
                                                       .classNameMatches("android.widget..*Layout")));
 | 
			
		||||
                }
 | 
			
		||||
            //Switch from grid view to menu view to display filename on larger screens
 | 
			
		||||
            UiObject menuListButton = mDevice.findObject(new UiSelector().resourceId("com.android.documentsui:id/menu_list") 
 | 
			
		||||
                                                                         .className("android.widget.TextView"));
 | 
			
		||||
            if (menuListButton.exists()) {
 | 
			
		||||
                menuListButton.click();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            UiObject imageButton = mDevice.findObject(new UiSelector().textContains(test_image)
 | 
			
		||||
                                                                      .className("android.widget.TextView"));
 | 
			
		||||
 | 
			
		||||
            imageButton.click();
 | 
			
		||||
            imageButton.waitUntilGone(uiAutoTimeout);
 | 
			
		||||
        } else {
 | 
			
		||||
        } else { // Use google photos as fallback
 | 
			
		||||
            UiObject photos =
 | 
			
		||||
                mDevice.findObject(new UiSelector().text("Photos")
 | 
			
		||||
                                                   .className("android.widget.TextView"));
 | 
			
		||||
                
 | 
			
		||||
            photos.click();
 | 
			
		||||
            //Click wa folder image
 | 
			
		||||
 | 
			
		||||
            UiObject working_directory =
 | 
			
		||||
            mDevice.findObject(new UiSelector().textContains(workdir_name)
 | 
			
		||||
                                               .className("android.widget.TextView"));
 | 
			
		||||
            if (!working_directory.waitForExists (uiAutoTimeout)) {
 | 
			
		||||
                UiObject refresh =
 | 
			
		||||
                    getUiObjectByResourceId("com.google.android.apps.photos:id/image");
 | 
			
		||||
                    refresh.clickAndWaitForNewWindow();
 | 
			
		||||
                UiObject back =
 | 
			
		||||
                    getUiObjectByResourceId("com.google.android.apps.photos:id/action_mode_close_button");
 | 
			
		||||
                    back.clickAndWaitForNewWindow();
 | 
			
		||||
            }
 | 
			
		||||
                mDevice.findObject(new UiSelector().textContains(workdir_name)
 | 
			
		||||
                                                   .className("android.widget.TextView"));
 | 
			
		||||
 | 
			
		||||
            working_directory.waitForExists (uiAutoTimeout);
 | 
			
		||||
            working_directory.click();
 | 
			
		||||
            
 | 
			
		||||
            //Click test image
 | 
			
		||||
            UiObject imageFileButton =
 | 
			
		||||
                mDevice.findObject(new UiSelector().descriptionContains("Photo"));
 | 
			
		||||
            
 | 
			
		||||
            imageFileButton.click();
 | 
			
		||||
            
 | 
			
		||||
            UiObject accept = getUiObjectByText("DONE");
 | 
			
		||||
            
 | 
			
		||||
            if (accept.waitForExists (uiAutoTimeout)) {
 | 
			
		||||
                accept.click();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        logger.stop();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -272,7 +313,7 @@ public class UiAutomation extends BaseUiAutomation implements ApplaunchInterface
 | 
			
		||||
        String testTag = "text_body";
 | 
			
		||||
        ActionLogger logger = new ActionLogger(testTag, parameters);
 | 
			
		||||
 | 
			
		||||
        UiObject composeField = mDevice.findObject(new UiSelector().textContains("Compose email")                                                   );
 | 
			
		||||
        UiObject composeField = mDevice.findObject(new UiSelector().textContains("Compose email"));
 | 
			
		||||
        if (!composeField.exists()){
 | 
			
		||||
            composeField = mDevice.findObject(new UiSelector().descriptionContains("Compose email"));
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user