Пример #1
0
class ModelInfo():
    '''
    classdocs
    '''
    
    def __init__(self, deviceserial):
        '''
        Constructor
        '''
    
    #sndLog = CLS("test", "test")
        self.osType = sys.platform
        
        self.mstrInfo = {}
        
        #self.devSerials = self.instAdb.device_serial()
        self.mstrDevice = Device(deviceserial)
        self.mstrInfo = self.mstrDevice.info
    
    '''
        DEVICE Infoamtions
        { u'displayRotation': 0,
          u'displaySizeDpY': 640,
          u'displaySizeDpX': 360,
          u'currentPackageName': u'com.android.launcher',
          u'productName': u'takju',
          u'displayWidth': 720,
          u'sdkInt': 18,
          u'displayHeight': 1184,
          u'naturalOrientation': True
        }
    '''        
    def getCurrntProductInfo(self):
        return self.mstrInfo
        
    def getProductNmae(self):
        return self.mstrInfo['productName']
        
    def getCurrntPkg(self):
        return self.mstrInfo['currentPackageName']
    
    def getSDKInt(self):
            return self.mstrInfo['sdkInt']
        
    def getRotation(self):
        return self.mstrInfo['displayRotation']
    
    
    def getNaturalOri(self):
        return self.mstrInfo['naturalOrientation']
    
    def getDisplayState(self):
        return self.mstrDevice.screen
                
    def setReflash(self):
        pass
    
    #define Key activity
    def setDevScrnOn(self):
        self.mstrDevice.screen.on()
    
    
    def setMstDevScrnOff(self):
        self.mstrDevice.screen.off()

            
    def setWakeup(self):
        self.mstrDevice.wakeup()
            
    def setSleep(self):
        self.mstrDevice.sleep()
            
     #Hard key Soft key       
    def pressHome(self):
        return self.mstrDevice.press.home()
    
    def pressBack(self):
        return self.mstrDevice.press.back()
        
    
    ######################################################################
    
    def pressLeft(self):
        return self.mstrDevice.press.left()
        
    def pressRight(self):
        return self.mstrDevice.press.right()
    
    def pressUp(self):
        return self.mstrDevice.press.up()
        
    def pressDown(self):
        return self.mstrDevice.press.down()
        
    def pressCenter(self):
        return self.mstrDevice.press.center()
    
    ######################################################################    
        
    def pressMenu(self):
        return self.mstrDevice.press.menu()
        
    def pressSearch(self):
        return self.mstrDevice.press.search()
           
    def pressEnter(self):
        return self.mstrDevice.press.enter()
            
    def pressDelete(self):
        return self.mstrDevice.press.delete() # or del
        
    def pressRecent(self):
        return self.mstrDevice.press.recent()
            
    def pressVol_Up(self):
        return self.mstrDevice.press.volume_up()
            
    def pressVol_Down(self):
        return self.mstrDevice.press.volume_down()
            
    def pressVol_Mute(self):
        return self.mstrDevice.press.volume_mute()
            
    def pressPower(self):
        return self.mstrDevice.press.power()
            
    def clik(self, x, y):
        return self.mstrDevice.click(x, y)
            
    def longClik(self,x, y):
        '''
            Description:
                
            param:
                x, y : start first point x, y
                
            return : Boolean
        '''
        return self.mstrDevice.long_click(x, y)
            
    def swipe(self, sx, sy, ex, ey, steps=10):
        '''
            Description:
                
            param:
                sx, xy : start first x, y
                ex, ey : move to x, y
            return : Boolean
        '''
        return self.mstrDevice.swipe(sx, sy, ex, ey, steps)
           
    def drage(self,sx, sy, ex, ey, steps=10):
        '''
            Description:
                
            param:
                sx, xy : start first x, y
                ex, ey : move to x, y
            return : Boolean
        '''
        return self.mstrDevice.drag(sx, sy, ex, ey, steps)
       
    #screen action of the device   
    def setOrientation(self,scrAct='natural', choiceDevice='mstr'):
        '''
            Description
                
            param
                d.orientation = 'l' or 'left'
                d.orientation = 'r' or 'right'
                d.orientation = 'n' or 'natural'
            return : None
        '''
        self.mstrDevice.orientation = scrAct
    
    def setFreezeRotation(self,condition=False,choiceDevice='mstr'):
        '''
            param:
                condition : False un-freeze rotation
            return : None
        '''
        self.mstrDevice.freeze_rotation(condition)
    
    
            
    def takeScreenShot(self, choiceDevice = 'mstr'):
        '''
            Description:
                take screenshot and save to local file 'home.png' can work until android 4.2
            param
                image name
        '''
        
    def dumpWindowHeirarchy(self,filename='./log/hierachy.xml'):
        return self.mstrDevice.dump(filename)
        
    def dumpWindowHeirarchyStream(self):
        return self.mstrDevice.dump()
        
    def notification(self):
        '''
            Open notification, can not work until android 4.3
            return : Boolean
        '''
        return self.mstrDevice.open.Notification()
    
    def quickSettings(self):
        '''
            open quick settins, can not work until android 4.3
            return : Boolean 
        '''
        return self.mstrDevice.open.quick_settings()
    def waitidle(self):
        '''
            wait for current window to idle
            return : None
        '''
        self.mstrDevice.wait.idle()
        
    def waitWindowUpdate(self):
        '''
            wait until window upate event occurs
            return : Boolean
        '''
        self.mstrDevice.wait.update()
        
    def getCurrentActivityInfo(self, text):
        '''
          INFOMATION:
              { u'contentDescription': u'',
              u'checked': False,
              u'scrollable': False,
              u'text': u'Settings',
              u'packageName': u'com.android.launcher',
              u'selected': False,
              u'enabled': True,
              u'bounds': {u'top': 385,
                          u'right': 360,
                          u'bottom': 585,
                          u'left': 200},
              u'className': u'android.widget.TextView',
              u'focused': False,
              u'focusable': True,
              u'clickable': True,
              u'chileCount': 0,
              u'longClickable': True,
              u'visibleBounds': {u'top': 385,
                                 u'right': 360,
                                 u'bottom': 585,
                                 u'left': 200},
              u'checkable': False
            }
        '''  
        return self.mstrDevice(text).info
    
    def uiObjExist(self,text):
        '''
            ture if exists, else False
        '''
        return self.mstrDevice.exists(text)
    
    def watcher(self):
        pass
    def handler(self):
        pass
    def selector(self):
        pass
        
    def __del__(self):
        pass    
Пример #2
0
class UiAutomator(object):
    def __init__(self, serial=None):
        self.device = Device(serial)
        self.selector_mapping = {'text': 'text',
                                 'id': 'resourceId',
                                 'desc': 'description',
                                 'class': 'className',
                                 'index': 'index'}

    def do_action(self, **kwargs):
        action_name = kwargs.get('name').lower()
        if not action_name:
            return False
        elif action_name == 'press':
            return self.__press(**kwargs)
        elif action_name == 'click':
            return self.__click(**kwargs)
        elif action_name == 'random_click':
            return self.__random_click(**kwargs)
        elif action_name == 'edit':
            return self.__edit(**kwargs)
        elif action_name == 'wait':
            return self.__wait(**kwargs)
        elif action_name == 'wakeup':
            return self.__wakeup()
        elif action_name == 'sleep':
            return self.__sleep()
        elif action_name == 'objectinfo':
            return self.__get_object_info(**kwargs)
        elif action_name == 'orientation':
            return self.__orientation(**kwargs)
        elif action_name == 'get_current_package_name':
            return self.__get_current_package_name()
        elif action_name == 'open':
            return self.__open(**kwargs)
        elif action_name == 'exists':
            return self.__exists(**kwargs)
        elif action_name == 'return_to':
            return self.__return_to(**kwargs)

    def __get_selector(self, **kwargs):
        tmp = dict()
        for key in self.selector_mapping.keys():
            parameter_value = kwargs.get(key)
            if parameter_value:
                tmp[self.selector_mapping.get(key)] = parameter_value
        return tmp

    def __click(self, **kwargs):
        selector = self.__get_selector(**kwargs)
        return self.device(**selector).click()

    def __exists(self, **kwargs):
        selector = self.__get_selector(**kwargs)
        return self.device(**selector).exists

    def __random_click(self, **kwargs):
        selector = self.__get_selector(**kwargs)
        count = self.device(**selector).count
        if count <= 0:
            return False
        selector['instance'] = randint(0, count-1)
        self.device(**selector).click()




    def __press(self, **kwargs):
        key = kwargs.get('key')
        if key in ["home", "back", "left", "right", "up", "down", "center", "menu", "search", "enter",
                   "delete", "del", "recent", "volume_up", "volume_down", "volume_mute", "camera", "power"]:
            return self.device.press.__getattr__(key)()
        else:
            try:
                key_code = int(key)
                return self.device.press(key_code)
            except ValueError:
                return False

    def __open(self,**kwargs):
        key = kwargs.get('key')
        if key in ["notification", "quick_settings"]:
            return self.device.open.__getattr__(key)()
        return False

    def __orientation(self, **kwargs):
        # left/l:       rotation=90 , displayRotation=1
        # right/r:      rotation=270, displayRotation=3
        # natural/n:    rotation=0  , displayRotation=0
        # upsidedown/u: rotation=180, displayRotation=2
        value = kwargs.get('value')
        if value in ['l', 'r', 'n', 'u', 'left', 'right', 'natural', 'upsidedown']:
            self.device.orientation = value
            return True
        return False

    def __freeze_rotation(self, **kwargs):
        value = kwargs.get('value', 'true')
        if value in ['False', 'false', 'f']:
            return self.device.freeze_rotation(freeze=False)
        return self.device.freeze_rotation(True)

    def __edit(self, **kwargs):
        selector = self.__get_selector(**kwargs)
        text_input = kwargs.get('input')
        return self.device(**selector).set_text(text=text_input)

    def __get_object_info(self, **kwargs):
        selector = self.__get_selector(**kwargs)
        key = kwargs.get('key')
        if key:
            return self.device(**selector).info.get(key)
        return self.device(**selector).info

    def __wait(self, **kwargs):
        try:
            wait_time = int(kwargs.get('time'))
            sleep(wait_time/1000.0)
        except ValueError:
            sleep(1)
        return True

    def __wakeup(self):
        return self.device.wakeup()

    def __sleep(self):
        return self.device.sleep()


    # def info(self):
    #     return self.device.info
    #
    # def dump(self, filename=None, compressed=True, pretty=True):
    #     Utility.output_msg('Dump device window and pull to \"%s\".' % filename)
    #     return self.device.dump(filename=filename, compressed=compressed, pretty=pretty)
    #
    # def screenshot(self, filename, scale=1.0, quality=100):
    #     Utility.output_msg('Take screenshot and save to \"%s\".' % filename)
    #     return self.device.screenshot(filename=filename, scale=scale, quality=quality)
    #

    #
    # def long_click(self, **kwargs):
    #     try:
    #         return self.device(**kwargs).long_click()
    #     except JsonRPCError, e:
    #         return 'Error'
    #
    # def scroll(self, **kwargs):
    #     return self.device(**kwargs).scroll(steps=steps)
    #
    def __get_current_package_name(self):
        return self.device.info.get('currentPackageName')

    def get_device_info(self):
        return self.device.info

    def __return_to(self, **kwargs):
        selector = self.__get_selector(**kwargs)
        for x in range(10):
            if self.device(**selector).exists:
                break
            self.device.press.back()
Пример #3
0
class Cases(unittest.TestCase):
    def setUp(self):
        self._driver = atx.connect()
        self._device = Device()

    def test_click(self):
        self._driver.click(540, 1650)
        self._driver.delay(2)
        self._driver.press.home()
        # self._driver.press("home")
        self._driver.delay(1)
        self._driver(description="Apps").click()
        self._driver.delay(1)
        self._driver.press.back()
        # self._driver.press("back")
        self._driver(text="Settings").long_click()

    def test_press(self):
        """press:

            home, back, left, right, up, down, 
            center, menu, search, enter, delete(or del), 
            recent, volume_up, volume_down, camera, power
        """

        self._driver.press.volume_down()
        self._driver.delay(1)
        self._driver.press.volume_down()
        self._driver.delay(1)
        self._driver.press.volume_up()
        self._driver.delay(1)

    def test_screen(self):
        self._device.screen.off()
        self._driver.delay(2)
        self._device.screen.on()
        self._driver.delay(2)
        self._device.sleep()
        self._driver.delay(2)
        self._device.wakeup()

    def test_image(self):
        self._driver.start_app("com.android.calculator2")
        self._driver.delay(2)
        if self._driver.exists("1.jpg"):
            self._driver.click_image("1.jpg")
            self._driver.delay(1)
        else:
            print "Not find image"

        self._driver.screenshot("ttt.png")

        self._driver.stop_app("com.android.calculator2")

    def test_wait(self):
        if self._driver(text="1").wait.exists(timeout=10000):
            print "find it"

        if self._driver(text="1").wait.gone(timeout=10000):
            print "it gone"

    def test_child(self):
        self._driver(className="android.view.ViewGroup").child(
            text="Phone").click()
        self._driver.delay(1)
        self._driver.press("home")
        self._driver.delay(1)

        self._driver(text="Phone").click()
        self._driver.delay(1)
        self._driver.press("back")

    def test_instance(self):
        # count, instance
        # count = self._driver(className="android.widget.TextView").count
        # print count
        # self._driver(className="android.widget.TextView", instance=7).click()
        # self._driver.press.home()
        # self._driver.delay(1)
        # self._driver(className="android.widget.TextView")[7].click()

        # 计算器遍历
        objs = self._driver(className="android.widget.Button")
        for obj in objs:
            obj.click()

    def test_set_text(self):
        # self._driver(resourceId="com.android.messaging:id/recipient_text_view").set_text("10086")
        # self._driver.delay(1)
        # self._driver.press.enter()
        # self._driver(resourceId="com.android.messaging:id/recipient_text_view").clear_text()
        # self._driver.delay(1)
        # self._driver.type("10086", enter=False)

        self._driver(resourceId="com.android.messaging:id/compose_message_text"
                     ).long_click()

    def test_drag(self):
        self._driver(text="Settings").drag.to(950, 1000)
        self._driver.delay(1)
        self._driver(text="Settings").swipe.left(steps=100)

    def test_swipe(self):
        self._driver.swipe(1000, 1000, 500, 1000, steps=50)
        self._driver.delay(1)
        self._driver.swipe(500, 1000, 1000, 1000, steps=10)

    def test_scroll(self):
        self._driver(scrollable=True).scroll.to(text="Google")
        print "find it"

    def test_pinch(self):
        # com.google.android.apps.photos:id/list_photo_tile_view
        self._driver(
            resourceId="com.google.android.apps.photos:id/list_photo_tile_view"
        ).pinch.Out()
        self._driver.delay(1)
        self._driver(
            resourceId=
            "com.google.android.apps.photos:id/photo_hashtag_fragment_container"
        ).pinch.In()

    def test_cmd(self):
        dev = self._driver.adb_cmd("devices")
        mem = self._driver.adb_shell("dumpsys meminfo")
        print dev
        print mem

    def test_relative(self):
        self._driver(text="Cellular data").right(
            className="android.widget.Switch").click()
Пример #4
0
class ModelInfo():
    '''
    classdocs
    '''
    def __init__(self, deviceserial):
        '''
        Constructor
        '''

        #sndLog = CLS("test", "test")
        self.osType = sys.platform

        self.mstrInfo = {}

        #self.devSerials = self.instAdb.device_serial()
        self.mstrDevice = Device(deviceserial)
        self.mstrInfo = self.mstrDevice.info

    '''
        DEVICE Infoamtions
        { u'displayRotation': 0,
          u'displaySizeDpY': 640,
          u'displaySizeDpX': 360,
          u'currentPackageName': u'com.android.launcher',
          u'productName': u'takju',
          u'displayWidth': 720,
          u'sdkInt': 18,
          u'displayHeight': 1184,
          u'naturalOrientation': True
        }
    '''

    def getCurrntProductInfo(self):
        return self.mstrInfo

    def getProductNmae(self):
        return self.mstrInfo['productName']

    def getCurrntPkg(self):
        return self.mstrInfo['currentPackageName']

    def getSDKInt(self):
        return self.mstrInfo['sdkInt']

    def getRotation(self):
        return self.mstrInfo['displayRotation']

    def getNaturalOri(self):
        return self.mstrInfo['naturalOrientation']

    def getDisplayState(self):
        return self.mstrDevice.screen

    def setReflash(self):
        pass

    #define Key activity
    def setDevScrnOn(self):
        self.mstrDevice.screen.on()

    def setMstDevScrnOff(self):
        self.mstrDevice.screen.off()

    def setWakeup(self):
        self.mstrDevice.wakeup()

    def setSleep(self):
        self.mstrDevice.sleep()

    #Hard key Soft key
    def pressHome(self):
        return self.mstrDevice.press.home()

    def pressBack(self):
        return self.mstrDevice.press.back()

    ######################################################################

    def pressLeft(self):
        return self.mstrDevice.press.left()

    def pressRight(self):
        return self.mstrDevice.press.right()

    def pressUp(self):
        return self.mstrDevice.press.up()

    def pressDown(self):
        return self.mstrDevice.press.down()

    def pressCenter(self):
        return self.mstrDevice.press.center()

    ######################################################################

    def pressMenu(self):
        return self.mstrDevice.press.menu()

    def pressSearch(self):
        return self.mstrDevice.press.search()

    def pressEnter(self):
        return self.mstrDevice.press.enter()

    def pressDelete(self):
        return self.mstrDevice.press.delete()  # or del

    def pressRecent(self):
        return self.mstrDevice.press.recent()

    def pressVol_Up(self):
        return self.mstrDevice.press.volume_up()

    def pressVol_Down(self):
        return self.mstrDevice.press.volume_down()

    def pressVol_Mute(self):
        return self.mstrDevice.press.volume_mute()

    def pressPower(self):
        return self.mstrDevice.press.power()

    def clik(self, x, y):
        return self.mstrDevice.click(x, y)

    def longClik(self, x, y):
        '''
            Description:
                
            param:
                x, y : start first point x, y
                
            return : Boolean
        '''
        return self.mstrDevice.long_click(x, y)

    def swipe(self, sx, sy, ex, ey, steps=10):
        '''
            Description:
                
            param:
                sx, xy : start first x, y
                ex, ey : move to x, y
            return : Boolean
        '''
        return self.mstrDevice.swipe(sx, sy, ex, ey, steps)

    def drage(self, sx, sy, ex, ey, steps=10):
        '''
            Description:
                
            param:
                sx, xy : start first x, y
                ex, ey : move to x, y
            return : Boolean
        '''
        return self.mstrDevice.drag(sx, sy, ex, ey, steps)

    #screen action of the device
    def setOrientation(self, scrAct='natural', choiceDevice='mstr'):
        '''
            Description
                
            param
                d.orientation = 'l' or 'left'
                d.orientation = 'r' or 'right'
                d.orientation = 'n' or 'natural'
            return : None
        '''
        self.mstrDevice.orientation = scrAct

    def setFreezeRotation(self, condition=False, choiceDevice='mstr'):
        '''
            param:
                condition : False un-freeze rotation
            return : None
        '''
        self.mstrDevice.freeze_rotation(condition)

    def takeScreenShot(self, choiceDevice='mstr'):
        '''
            Description:
                take screenshot and save to local file 'home.png' can work until android 4.2
            param
                image name
        '''

    def dumpWindowHeirarchy(self, filename='./log/hierachy.xml'):
        return self.mstrDevice.dump(filename)

    def dumpWindowHeirarchyStream(self):
        return self.mstrDevice.dump()

    def notification(self):
        '''
            Open notification, can not work until android 4.3
            return : Boolean
        '''
        return self.mstrDevice.open.Notification()

    def quickSettings(self):
        '''
            open quick settins, can not work until android 4.3
            return : Boolean 
        '''
        return self.mstrDevice.open.quick_settings()

    def waitidle(self):
        '''
            wait for current window to idle
            return : None
        '''
        self.mstrDevice.wait.idle()

    def waitWindowUpdate(self):
        '''
            wait until window upate event occurs
            return : Boolean
        '''
        self.mstrDevice.wait.update()

    def getCurrentActivityInfo(self, text):
        '''
          INFOMATION:
              { u'contentDescription': u'',
              u'checked': False,
              u'scrollable': False,
              u'text': u'Settings',
              u'packageName': u'com.android.launcher',
              u'selected': False,
              u'enabled': True,
              u'bounds': {u'top': 385,
                          u'right': 360,
                          u'bottom': 585,
                          u'left': 200},
              u'className': u'android.widget.TextView',
              u'focused': False,
              u'focusable': True,
              u'clickable': True,
              u'chileCount': 0,
              u'longClickable': True,
              u'visibleBounds': {u'top': 385,
                                 u'right': 360,
                                 u'bottom': 585,
                                 u'left': 200},
              u'checkable': False
            }
        '''
        return self.mstrDevice(text).info

    def uiObjExist(self, text):
        '''
            ture if exists, else False
        '''
        return self.mstrDevice.exists(text)

    def watcher(self):
        pass

    def handler(self):
        pass

    def selector(self):
        pass

    def __del__(self):
        pass