예제 #1
0
 def testUiViewServerDump_windowIntM1(self):
     try:
         device = MockDevice(version=15, startviewserver=True)
         vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
         vc.dump(window=-1)
         vc.findViewByIdOrRaise('id/home')
     finally:
         device.shutdownMockViewServer()
예제 #2
0
 def testFindViewsContainingPoint_filterApi15(self):
     try:
         device = MockDevice(version=15, startviewserver=True)
         vc = ViewClient(device, device.serialno, adb=TRUE)
         list = vc.findViewsContainingPoint((200, 200), filter=View.isClickable)
         self.assertNotEquals(None, list)
         self.assertNotEquals(0, len(list))
     finally:
         device.shutdownMockViewServer()
 def testUiViewServerDump_windowIntStr(self):
     device = None
     try:
         device = MockDevice(version=15, startviewserver=True)
         vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
         vc.dump(window='0xb52f7c88')
         vc.findViewByIdOrRaise('id/status_bar')
     finally:
         if device:
             device.shutdownMockViewServer()
 def testUiViewServerDump_windowIntStr(self):
     device = None
     try:
         device = MockDevice(version=15, startviewserver=True)
         vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
         vc.dump(window='0xb52f7c88')
         vc.findViewByIdOrRaise('id/status_bar')
     finally:
         if device:
             device.shutdownMockViewServer()
예제 #5
0
 def testFindViewWithContentDescriptionOrRaiseExceptionMessage_regexpRoot(
         self):
     device = None
     root = View({'text:mText': '0', 'content-desc': 'CD0'}, device)
     root.add(View({'text:mText': '1', 'content-desc': 'CD1'}, device))
     root.add(View({'text:mText': '2', 'content-desc': 'CD2'}, device))
     v3 = View({'text:mText': '3', 'content-desc': 'CD3'}, device)
     root.add(v3)
     v35 = View({'text:mText': '35', 'content-desc': 'CD35'}, device)
     v3.add(v35)
     v4 = View({'text:mText': '4', 'conent-desc': 'CD4'}, device)
     root.add(v4)
     v45 = View({'text:mText': '45', 'content-desc': 'CD45'}, device)
     v4.add(v45)
     device = MockDevice()
     vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     vc.root = root
     try:
         vc.findViewWithContentDescriptionOrRaise(
             re.compile('Non Existent'), root=v4)
         self.fail()
     except ViewNotFoundException, e:
         self.assertNotEquals(
             None, re.search("that matches 'Non Existent'", e.message))
예제 #6
0
 def testInit_adbNone(self):
     device = MockDevice()
     vc = ViewClient(device,
                     serialno=device.serialno,
                     adb=None,
                     autodump=False)
     self.assertNotEqual(None, vc)
예제 #7
0
 def testMapSerialNo_None(self):
     device = MockDevice()
     try:
         ViewClient(device, None, adb=TRUE, autodump=False)
         self.fail()
     except ValueError:
         pass
예제 #8
0
    def testCopyConstructor(self):
        device = MockDevice()
        mv = VIEW_MAP_API_17.copy()
        mv['class'] = u'android.widget.View'
        v = View(mv, device, 17)
        self.assertEqual(v.getClass(), u'android.widget.View')

        mt = VIEW_MAP_API_17.copy()
        mt['class'] = u'android.widget.TextView'
        t = TextView(mt, device, 17)
        self.assertEqual(t.getClass(), u'android.widget.TextView')

        me = VIEW_MAP_API_17.copy()
        me['class'] = u'android.widget.EditText'
        e = TextView(me, device, 17)
        self.assertEqual(e.getClass(), u'android.widget.EditText')

        v1 = View.clone(v)
        self.assertEqual(u'android.widget.View', v1.getClass())

        t1 = TextView.clone(t)
        self.assertEqual(u'android.widget.TextView', t1.getClass())

        e1 = EditText.clone(e)
        self.assertEqual(u'android.widget.EditText', e1.getClass())

        t2 = TextView.clone(v)
        self.assertEqual(u'android.widget.TextView', t2.getClass())

        e2 = EditText.clone(v)
        self.assertEqual(u'android.widget.EditText', e2.getClass())

        e2.setText("hello")
예제 #9
0
 def testFindViewWithText_root(self):
     device = None
     root = View({'text:mText':'0'}, device)
     root.add(View({'text:mText':'1'}, device))
     root.add(View({'text:mText':'2'}, device))
     v3 = View({'text:mText':'3'}, device)
     root.add(v3)
     v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
     v3.add(v35)
     v4 = View({'text:mText':'4'}, device)
     root.add(v4)
     v45 = View({'text:mText':'5', 'getTag()':'v45'}, device)
     v4.add(v45)
     device = MockDevice()
     vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     vc.root = root
     v5 = vc.findViewWithText('5')
     self.assertNotEqual(v5, None)
     self.assertEqual('v35', v5.getTag())
     v5 = vc.findViewWithText('5', root=v4)
     self.assertNotEqual(v5, None)
     self.assertEqual('v45', v5.getTag())
     v5 = vc.findViewWithText('5', root=v3)
     self.assertNotEqual(v5, None)
     self.assertEqual('v35', v5.getTag())
 def testFindViewWithContentDescription_regexRoot(self):
     device = None
     root = View({'text:mText':'0', 'content-desc':'CD0'}, device)
     root.add(View({'text:mText':'1', 'content-desc':'CD1'}, device))
     root.add(View({'text:mText':'2', 'content-desc':'CD2'}, device))
     v3 = View({'text:mText':'3', 'content-desc':'CD3'}, device)
     root.add(v3)
     v35 = View({'text:mText':'35', 'content-desc':'CD35'}, device)
     v3.add(v35)
     v4 = View({'text:mText':'4', 'conent-desc':'CD4'}, device)
     root.add(v4)
     v45 = View({'text:mText':'45', 'content-desc':'CD45'}, device)
     v4.add(v45)
     device = MockDevice()
     vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     vc.root = root
     v45 = vc.findViewWithContentDescription(re.compile('CD4\d'))
     self.assertNotEqual(v45, None)
     self.assertEqual('45', v45.getText())
     v45 = vc.findViewWithContentDescription(re.compile('CD4\d'), root=v4)
     self.assertNotEqual(v45, None)
     self.assertEqual('45', v45.getText())
     v35 = vc.findViewWithContentDescription(re.compile('CD3\d'), root=v3)
     self.assertNotEqual(v35, None)
     self.assertEqual('35', v35.getText())
예제 #11
0
 def testServiceStoppedAfterDestructor(self):
     device = MockDevice()
     self.assertTrue(device.service == STOPPED)
     if True:
         vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
         self.assertTrue(device.service == RUNNING)
         vc.__del__()
 def testFindViewWithTextOrRaise_root_disappearingView(self):
     device = None
     root = View({'text:mText':'0'}, device)
     root.add(View({'text:mText':'1'}, device))
     root.add(View({'text:mText':'2'}, device))
     v3 = View({'text:mText':'3'}, device)
     root.add(v3)
     v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
     v3.add(v35)
     v4 = View({'text:mText':'4'}, device)
     root.add(v4)
     v45 = View({'text:mText':'5', 'getTag()':'v45'}, device)
     v4.add(v45)
     device = MockDevice()
     vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     vc.root = root
     v5 = vc.findViewWithTextOrRaise('5')
     self.assertEqual('v35', v5.getTag())
     v5 = vc.findViewWithTextOrRaise('5', root=v4)
     self.assertEqual('v45', v5.getTag())
     v5 = vc.findViewWithTextOrRaise('5', root=v3)
     self.assertEqual('v35', v5.getTag())
     # Then remove v4 and its children
     root.children.remove(v4)
     #vc.dump()
     v4 = vc.findViewWithText('4')
     self.assertEqual(v4, None, "v4 has not disappeared")
예제 #13
0
 def testInit_adbNone(self):
     device = MockDevice()
     try:
         vc = ViewClient(device, device.serialno, adb=None, autodump=False)
         self.assertNotEqual(None, vc)
     except subprocess.CalledProcessError:
         # This is needed because the ports cannot be forwarded if there is no device connected
         pass
 def testContainsPoint_api17(self):
     v = View(VIEW_MAP_API_17, MockDevice(), 17)
     (X, Y, W, H) = v.getPositionAndSize()
     self.assertEqual(X, v.getX())
     self.assertEqual(Y, v.getY())
     self.assertEqual(W, v.getWidth())
     self.assertEqual(H, v.getHeight())
     self.assertTrue(v.containsPoint((v.getCenter())))
예제 #15
0
 def __mockWindows(self, windows=WINDOWS):
     device = MockDevice()
     vc = ViewClient(device,
                     serialno=device.serialno,
                     adb=TRUE,
                     autodump=False)
     self.assertNotEquals(None, vc)
     vc.windows = windows
     return vc
예제 #16
0
 def testMapSerialNo_regex(self):
     # This is an edge case. A regex should not be used as the serialno in ViewClient as it's
     # behavior is not well defined.
     # MonkeyRunner.waitForConnection() accepts a regexp as serialno but adb -s doesn't
     try:
         ViewClient(MockDevice(),  serialno='.*', adb=TRUE, autodump=False)
         self.fail()
     except ValueError:
         pass
 def __mockTree(self, dump=DUMP, version=15, language='en'):
     device = MockDevice(version=version, language=language)
     vc = ViewClient(device, serialno=device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     if version <= 15:
         # We don't want to invoke the ViewServer or MockViewServer for this
         vc.setViews(dump)
     else:
         vc.dump()
     return vc
예제 #18
0
 def testTraverseShowClassIdTextAndCenter(self):
     device = MockDevice()
     root = View(
         {
             'mID': '0',
             'text:mText': '0',
             'layout:mLeft': 0,
             'layout:mTop': 0
         }, device)
     root.add(
         View(
             {
                 'mID': '1',
                 'text:mText': '1',
                 'layout:mLeft': 1,
                 'layout:mTop': 1
             }, device))
     root.add(
         View(
             {
                 'mID': '2',
                 'text:mText': '2',
                 'layout:mLeft': 2,
                 'layout:mTop': 2
             }, device))
     v3 = View(
         {
             'mID': '3',
             'text:mText': '3',
             'layout:mLeft': 3,
             'layout:mTop': 3
         }, device)
     root.add(v3)
     v35 = View(
         {
             'mID': '5',
             'text:mText': '5',
             'getTag()': 'v35',
             'layout:mLeft': 5,
             'layout:mTop': 5
         }, device)
     v3.add(v35)
     vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     treeStr = StringIO.StringIO()
     vc.traverse(root=root,
                 transform=ViewClient.TRAVERSE_CITC,
                 stream=treeStr)
     self.assertNotEquals(None, treeStr.getvalue())
     lines = treeStr.getvalue().splitlines()
     self.assertEqual(5, len(lines))
     self.assertEqual('None 0 0 (0, 0)', lines[0])
     citRE = re.compile(' +None \d+ \d+ \(\d+, \d+\)')
     for l in lines[1:]:
         self.assertTrue(citRE.match(l))
예제 #19
0
 def testUiAutomatorKilled(self):
     device = MockDevice(version=16, uiautomatorkilled=True)
     try:
         vc = ViewClient(device,
                         device.serialno,
                         adb=TRUE,
                         autodump=True,
                         ignoreuiautomatorkilled=True)
     except Exception, e:
         self.assertIsNotNone(
             re.search(
                 '''ERROR: UiAutomator output contains no valid information. UiAutomator was killed, no reason given.''',
                 str(e)))
예제 #20
0
 def testTextPropertyForDifferentSdkVersions_device(self):
     VP = {
         -1: TEXT_PROPERTY,
         8: TEXT_PROPERTY_API_10,
         10: TEXT_PROPERTY_API_10,
         15: TEXT_PROPERTY,
         16: TEXT_PROPERTY_UI_AUTOMATOR,
         17: TEXT_PROPERTY_UI_AUTOMATOR
     }
     for version, textProperty in VP.items():
         device = MockDevice(version=version)
         view = View(None, device, -1)
         self.assertEqual(textProperty,
                          view.textProperty,
                          msg='version %d' % version)
예제 #21
0
 def testHeightPropertyForDifferentSdkVersions_device(self):
     VP = {
         -1: HEIGHT_PROPERTY,
         8: HEIGHT_PROPERTY_API_8,
         10: HEIGHT_PROPERTY,
         15: HEIGHT_PROPERTY,
         16: HEIGHT_PROPERTY,
         17: HEIGHT_PROPERTY
     }
     for version, heightProperty in VP.items():
         device = MockDevice(version=version)
         view = View(None, device, -1)
         self.assertEqual(heightProperty,
                          view.heightProperty,
                          msg='version %d' % version)
예제 #22
0
 def testWidthPropertyForDifferentSdkVersions_device(self):
     VP = {
         -1: WIDTH_PROPERTY,
         8: WIDTH_PROPERTY_API_8,
         10: WIDTH_PROPERTY,
         15: WIDTH_PROPERTY,
         16: WIDTH_PROPERTY,
         17: WIDTH_PROPERTY
     }
     for version, widthProperty in VP.items():
         device = MockDevice(version=version)
         view = View(None, device, -1)
         self.assertEqual(widthProperty,
                          view.widthProperty,
                          msg='version %d' % version)
예제 #23
0
 def testTopPropertyForDifferentSdkVersions_device(self):
     VP = {
         -1: TOP_PROPERTY,
         8: TOP_PROPERTY_API_8,
         10: TOP_PROPERTY,
         15: TOP_PROPERTY,
         16: TOP_PROPERTY,
         17: TOP_PROPERTY
     }
     for version, topProperty in VP.items():
         device = MockDevice(version=version)
         view = View(None, device, -1)
         self.assertEqual(topProperty,
                          view.topProperty,
                          msg='version %d' % version)
예제 #24
0
 def testLeftPropertyForDifferentSdkVersions_device(self):
     VP = {
         -1: LEFT_PROPERTY,
         8: LEFT_PROPERTY_API_8,
         10: LEFT_PROPERTY,
         15: LEFT_PROPERTY,
         16: LEFT_PROPERTY,
         17: LEFT_PROPERTY
     }
     for version, leftProperty in VP.items():
         device = MockDevice(version=version)
         view = View(None, device, -1)
         self.assertEqual(leftProperty,
                          view.leftProperty,
                          msg='version %d' % version)
 def testInit_adbNone(self):
     # FIXME: there's a problem here when the mock device is created,
     # it's intended to be API=15, mock ViewServer is started and then
     # adb tries (unsuccessfuly) to forward the ports (expected because
     # adb does not know anything about mock devices).
     # Then
     #    error: device not found
     # appears in the console
     device = MockDevice()
     try:
         vc = ViewClient(device, device.serialno, adb=None, autodump=False)
         self.assertIsNotNone(vc)
     except subprocess.CalledProcessError:
         # This is needed because the ports cannot be forwarded if there is no device connected
         pass
예제 #26
0
 def testTraverseShowClassIdAndText(self):
     device = MockDevice()
     root = View(
         {
             'text:mText': '0',
             'class': 'android.widget.View',
             'mID': 0
         }, device)
     root.add(
         View({
             'text:mText': '1',
             'class': 'android.widget.View',
             'mID': 1
         }, device))
     root.add(
         View({
             'text:mText': '2',
             'class': 'android.widget.View',
             'mID': 2
         }, device))
     v3 = View({
         'text:mText': '3',
         'class': 'android.widget.View',
         'mID': 3
     }, device)
     root.add(v3)
     v35 = View(
         {
             'text:mText': '5',
             'getTag()': 'v35',
             'class': 'android.widget.View',
             'mID': 35
         }, device)
     v3.add(v35)
     vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     treeStr = StringIO.StringIO()
     vc.traverse(root=root,
                 transform=ViewClient.TRAVERSE_CIT,
                 stream=treeStr)
     self.assertNotEquals(None, treeStr.getvalue())
     lines = treeStr.getvalue().splitlines()
     self.assertEqual(5, len(lines), "lines=%s" % lines)
     self.assertEqual('android.widget.View 0 0', lines[0])
     citRE = re.compile(' +android.widget.View \d+ \d+')
     for l in lines[1:]:
         self.assertTrue(citRE.match(l), 'l=%s' % l)
예제 #27
0
 def testTraverseShowClassIdAndText(self):
     device = MockDevice()
     root = View({'text:mText':'0'}, device)
     root.add(View({'text:mText':'1'}, device))
     root.add(View({'text:mText':'2'}, device))
     v3 = View({'text:mText':'3'}, device)
     root.add(v3)
     v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
     v3.add(v35)
     vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     treeStr = StringIO.StringIO()
     vc.traverse(root=root, transform=ViewClient.TRAVERSE_CIT, stream=treeStr)
     self.assertNotEquals(None, treeStr.getvalue())
     lines = treeStr.getvalue().splitlines()
     self.assertEqual(5, len(lines))
     self.assertEqual('None None 0', lines[0])
     citRE = re.compile(' +None None \d+')
     for l in lines[1:]:
         self.assertTrue(citRE.match(l))
예제 #28
0
 def testFindViewWithTextOrRaise_rootNonExistent(self):
     device = None
     root = View({'text:mText':'0'}, device)
     root.add(View({'text:mText':'1'}, device))
     root.add(View({'text:mText':'2'}, device))
     v3 = View({'text:mText':'3'}, device)
     root.add(v3)
     v35 = View({'text:mText':'5', 'getTag()':'v35'}, device)
     v3.add(v35)
     v4 = View({'text:mText':'4'}, device)
     root.add(v4)
     v45 = View({'text:mText':'5', 'getTag()':'v45'}, device)
     v4.add(v45)
     device = MockDevice()
     vc = ViewClient(device, device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     vc.root = root
     try:
         vc.findViewWithTextOrRaise('Non Existent', root=v4)
         self.fail()
     except ViewNotFoundException:
         pass
 def testGetProperty_displayHeight(self):
     device = MockDevice()
     self.assertEqual(1184, device.getProperty('display.height'))
 def testGetProperty_displayWidth(self):
     device = MockDevice()
     self.assertEqual(768, device.getProperty('display.width'))
예제 #31
0
 def testView_specifiedSdkVersion(self):
     view = View(VIEW_MAP, MockDevice(), 10)
     self.assertEqual(10, view.build[VERSION_SDK_PROPERTY])
예제 #32
0
 def testMapSerialNo_emulator(self):
     vc = ViewClient(MockDevice(), serialno='emulator-5556', adb=TRUE, autodump=False)
     self.assertEqual('emulator-5556', vc.serialno)
예제 #33
0
 def __mockTree(self, dump=DUMP):
     device = MockDevice()
     vc = ViewClient(device, serialno=device.serialno, adb=TRUE, autodump=False)
     self.assertNotEquals(None, vc)
     vc.setViews(dump)
     return vc