示例#1
0
 def instrumentAndroidManifestFile(self, pathToUnmodifiedFile, pathToModifiedFile=None, addSdCardPermission=True):
     '''
     Adds instrumentation tag with predefined attributes corresponding to our
     instrumentation classes to the provided manifest file. If 
     instrumentation tag exists, this method substitutes it with appropriate
     one. Adds (if necessary) to the provided AndroidManifest file permission
     to write to the external storage.
     
     Args:
         :param pathToUnmodifiedFile: path to the unmodified 
             AndroidManifest.xml file
         :param pathToModifiedFile: path where to store modified
             AndroidManifest.xml file. If pathToModifiedFile==None, the 
             initial pathToUnmodifiedFile will be overridden.
     '''
     if not os.path.isfile(pathToUnmodifiedFile):
         raise IllegalArgumentException("File [%s] does not exist!" % pathToUnmodifiedFile) 
     androidManifest = AndroidManifest(pathAndroidManifest=pathToUnmodifiedFile)
     packageName = androidManifest.getPackageName()
     #TODO: think how to substitute these constants later
     try:
         androidManifest.addInstrumentation("com.zhauniarovich.bbtester.EmmaInstrumentation", packageName)
     except ManifestAlreadyInstrumentedException:
         #removing all existing instrumentation tags and creating our new
         androidManifest.removeExistingInstrumentation() #TODO: this can throw an exception
         androidManifest.addInstrumentation("com.zhauniarovich.bbtester.EmmaInstrumentation", packageName)
     
     if addSdCardPermission:
         androidManifest.addUsesPermission("android.permission.WRITE_EXTERNAL_STORAGE")
     
     if not pathToModifiedFile or (pathToUnmodifiedFile == pathToModifiedFile):
         androidManifest.exportManifest(path=None)
     else: 
         androidManifest.exportManifest(path=pathToModifiedFile)
class MainActivityInvocationStrategy(RunningStrategy):
    def __init__(self, adbDevice, pathToAndroidManifest):
        self.adbDevice = adbDevice
        self.androidManifest=AndroidManifest(pathToAndroidManifest)
    
    def run(self, delay=10):
        mainActivity = self.androidManifest.getMainActivity()
        if mainActivity:
            self.adbDevice.startActivityExplicitly(package_name=self.androidManifest.getPackageName(),
                                                       activity_name=mainActivity)
            time.sleep(delay)
示例#3
0
class MainActivityInvocationStrategy(RunningStrategy):
    def __init__(self, adbDevice, pathToAndroidManifest):
        self.adbDevice = adbDevice
        self.androidManifest = AndroidManifest(pathToAndroidManifest)

    def run(self, delay=10):
        mainActivity = self.androidManifest.getMainActivity()
        if mainActivity:
            self.adbDevice.startActivityExplicitly(
                package_name=self.androidManifest.getPackageName(),
                activity_name=mainActivity)
            time.sleep(delay)
示例#4
0
class IntentInvocationStrategy(RunningStrategy):
    def __init__(self, adbDevice, pathToAndroidManifest):
        self.adbDevice = adbDevice
        self.androidManifest = AndroidManifest(pathToAndroidManifest)

    def run(self, delay=10):
        print "Activities:"
        activities = self.androidManifest.getActivities()
        for activity in activities:
            self._invokeActivityExplicitely(activity)
            time.sleep(delay)

        print "Services:"
        services = self.androidManifest.getServices()
        for service in services:
            self._invokeServiceExplicitely(service)
            time.sleep(delay)

        print "Receivers:"
        receivers = self.androidManifest.getReceivers()
        for receiver in receivers:
            self._invokeReceiver(receiver)
            time.sleep(delay)

    def _invokeActivityExplicitely(self, activity):
        self.adbDevice.startActivityExplicitly(
            package_name=self.androidManifest.getPackageName(),
            activity_name=activity)

    def _invokeActivity(self, activity):
        intentFilters = self.androidManifest.getActivityIntentFilters(activity)
        if not intentFilters:
            self.adbDevice.startActivityExplicitly(
                package_name=self.androidManifest.getPackageName(),
                activity_name=activity)
            return
        for filt in intentFilters:
            action = self._getAction(filt)
            category = self._getCategory(filt)
            mimeType = self._getMiMeType(filt)
            self.adbDevice.startActivityImplicitely(action=action,
                                                    mimeType=mimeType,
                                                    category=category)

    def _invokeServiceExplicitely(self, service):
        self.adbDevice.startServiceExplicitly(
            package_name=self.androidManifest.getPackageName(),
            service_name=service)

    def _invokeService(self, service):
        intentFilters = self.androidManifest.getServiceIntentFilters(service)
        if not intentFilters:
            self.adbDevice.startServiceExplicitly(
                package_name=self.androidManifest.getPackageName(),
                service_name=service)
            return

        for filt in intentFilters:
            action = self._getAction(filt)
            category = self._getCategory(filt)
            mimeType = self._getMiMeType(filt)
            self.adbDevice.startServiceImplicitely(action=action,
                                                   mimeType=mimeType,
                                                   category=category)

    def _invokeReceiver(self, receiver):
        intentFilters = self.androidManifest.getReceiverIntentFilters(receiver)
        if not intentFilters:
            return

        for filt in intentFilters:
            action = self._getAction(filt)
            category = self._getCategory(filt)
            mimeType = self._getMiMeType(filt)
            self.adbDevice.sendBroadcast(action=action,
                                         mimeType=mimeType,
                                         category=category)

    def _getAction(self, filt):
        action = None
        actions = filt.get("action")
        if actions:
            action = actions[0]
        return action

    def _getCategory(self, filt):
        category = None
        categories = filt.get("category")
        if categories:
            category = categories[0]
        else:
            category = CATEGORY_DEFAULT
        return category

    def _getMiMeType(self, filt):
        mimeType = None
        mimeTypes = filt.get("mimeType")
        if mimeTypes:
            mimeType = mimeTypes[0]
        return mimeType
class IntentInvocationStrategy(RunningStrategy):
    def __init__(self, adbDevice, pathToAndroidManifest):
        self.adbDevice = adbDevice
        self.androidManifest=AndroidManifest(pathToAndroidManifest)
    
    
    def run(self, delay=10):
        print "Activities:"
        activities = self.androidManifest.getActivities()
        for activity in activities:
            self._invokeActivityExplicitely(activity)
            time.sleep(delay)
        
        print "Services:"    
        services = self.androidManifest.getServices()
        for service in services:
            self._invokeServiceExplicitely(service)
            time.sleep(delay)
         
        print "Receivers:"        
        receivers = self.androidManifest.getReceivers()
        for receiver in receivers:
            self._invokeReceiver(receiver)
            time.sleep(delay)
             
    
    def _invokeActivityExplicitely(self, activity):
        self.adbDevice.startActivityExplicitly(package_name=self.androidManifest.getPackageName(),
                                                   activity_name=activity)
    
    def _invokeActivity(self, activity):
        intentFilters = self.androidManifest.getActivityIntentFilters(activity)
        if not intentFilters:
            self.adbDevice.startActivityExplicitly(package_name=self.androidManifest.getPackageName(),
                                                   activity_name=activity)
            return
        for filt in intentFilters:
            action = self._getAction(filt)
            category = self._getCategory(filt)
            mimeType = self._getMiMeType(filt)
            self.adbDevice.startActivityImplicitely(action=action, mimeType=mimeType, category=category)
    
    def _invokeServiceExplicitely(self, service):
        self.adbDevice.startServiceExplicitly(package_name=self.androidManifest.getPackageName(),
                                                   service_name=service)
            
    def _invokeService(self, service):
        intentFilters = self.androidManifest.getServiceIntentFilters(service)
        if not intentFilters:
            self.adbDevice.startServiceExplicitly(package_name=self.androidManifest.getPackageName(),
                                                   service_name=service)
            return
        
        for filt in intentFilters:
            action = self._getAction(filt)
            category = self._getCategory(filt)
            mimeType = self._getMiMeType(filt)
            self.adbDevice.startServiceImplicitely(action=action, mimeType=mimeType, category=category)
    
    def _invokeReceiver(self, receiver):
        intentFilters = self.androidManifest.getReceiverIntentFilters(receiver)
        if not intentFilters:
            return
        
        for filt in intentFilters:
            action = self._getAction(filt)
            category = self._getCategory(filt)
            mimeType = self._getMiMeType(filt)
            self.adbDevice.sendBroadcast(action=action, mimeType=mimeType, category=category)
    
    
    def _getAction(self, filt):
        action = None
        actions = filt.get("action")
        if actions:
            action = actions[0]
        return action    
        
    def _getCategory(self, filt):
        category = None
        categories = filt.get("category")
        if categories:
            category = categories[0]
        else:
            category = CATEGORY_DEFAULT
        return category
    
    def _getMiMeType(self, filt):
        mimeType = None
        mimeTypes = filt.get("mimeType")
        if mimeTypes:
            mimeType = mimeTypes[0]
        return mimeType