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)
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)
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