Automate the installation of ucbrowser

2019-07-25 12:27发布

问题:

I am trying to automate the installation of UC browser. I able to reach to the final "Enter UC" button (below screenshot) button activity.I need to simulate the click on "Enter UC" button.

I tried multiple ways(listed below) to simulate the click but nothing worked out.

1.)Using UIautomator dump - I tried to fetch the dump and parse it to get the bound but when I am fetching the dump using adb shell uiautomator dump, I am not able to get the full complete UI hierarchy (maybe because it gives UI of only native view - I am not sure please let me know if you have any pointer).

Dump:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>

-<hierarchy rotation="0">


-<node bounds="[0,38][480,800]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="false" checked="false" checkable="false" content-desc="" package="com.UCMobile.intl" class="android.widget.FrameLayout" resource-id="" text="" index="0">

<node bounds="[0,38][480,800]" selected="false" password="false" long-clickable="false" scrollable="false" focused="false" focusable="false" enabled="true" clickable="true" checked="false" checkable="false" content-desc="" package="com.UCMobile.intl" class="android.view.View" resource-id="" text="" index="0" NAF="true"/>

</node>

</hierarchy>

2.) Tried to see any resource id/ text / any special dump so that I can get the element and try tap but there is no id/class/text is there for "Enter UC" button.

Please let me know if you have any suggestions over it.

回答1:

UC Browser implements its UI with a custom View (as you can see from the dump) then it's not possible for UiAutomator or similar tools to get an insight of its components.

There are no many alternatives left then. You can use AndroidViewClient/culebra or CulebraTester to swipe through the first screens but when the last one is reached you should have to touch using screen coordinates.

The generated script (python in this case but you can also generate java):

#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2013-2016  Diego Torres Milano
Created on 2017-05-06 by CulebraTester 
                      __    __    __    __
                     /  \  /  \  /  \  /  \ 
____________________/  __\/  __\/  __\/  __\_____________________________
___________________/  /__/  /__/  /__/  /________________________________
                   | / \   / \   / \   / \   \___
                   |/   \_/   \_/   \_/   \    o \ 
                                           \_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
'''


import re
import sys
import os


import unittest
try:
    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
    pass

import pkg_resources
pkg_resources.require('androidviewclient>=12.4.0')
from com.dtmilano.android.viewclient import ViewClient, CulebraTestCase
from com.dtmilano.android.uiautomator.uiautomatorhelper import UiAutomatorHelper, UiScrollable, UiObject, UiObject2

TAG = 'CULEBRA'


class CulebraTests(CulebraTestCase):

    @classmethod
    def setUpClass(cls):
        cls.kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
        cls.kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': True, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True}
        cls.options = {'start-activity': None, 'concertina': False, 'device-art': None, 'use-jar': False, 'multi-device': False, 'unit-test-class': True, 'save-screenshot': None, 'use-dictionary': False, 'glare': False, 'dictionary-keys-from': 'id', 'scale': 1, 'find-views-with-content-description': True, 'window': -1, 'orientation-locked': None, 'save-view-screenshots': None, 'find-views-by-id': True, 'log-actions': False, 'use-regexps': False, 'null-back-end': False, 'auto-regexps': None, 'do-not-verify-screen-dump': True, 'verbose-comments': False, 'gui': False, 'find-views-with-text': True, 'prepend-to-sys-path': False, 'install-apk': None, 'drop-shadow': False, 'output': None, 'unit-test-method': None, 'interactive': False}
        cls.sleep = 5

    def setUp(self):
        super(CulebraTests, self).setUp()

    def tearDown(self):
        super(CulebraTests, self).tearDown()

    def preconditions(self):
        if not super(CulebraTests, self).preconditions():
            return False
        return True

    def testSomething(self):
        if not self.preconditions():
            self.fail('Preconditions failed')

        _s = CulebraTests.sleep
        _v = CulebraTests.verbose

        self.vc.click(x=520, y=1603)
        self.vc.sleep(_s)

if __name__ == '__main__':
    CulebraTests.main()