Пример #1
0
def search_object_in_direction(searched_object,
                               direction_to_search,
                               object_type,
                               serial=None):
    """ description:
            Searches a text in a direction (up, down, left or right)

        usage:
            ui_utils.search_object_in_direction()

        tags:
            ui, android
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    if direction_to_search == "up":
        return uidevice(**searched_object).up(**object_type)

    elif direction_to_search == "down":
        return uidevice(**searched_object).down(**object_type)

    elif direction_to_search == "left":
        return uidevice(**searched_object).left(**object_type)

    elif direction_to_search == "right":
        return uidevice(**searched_object).right(**object_type)
Пример #2
0
def swipe_to_app_from_recent(view_to_find, serial=None):
    """ description:
            Swipe to the desired app from recent apps menu.

        usage:
            ui_utils.swipte_to_app_from_recent(view_to_find=
            {"text": "YouTube"})

        tags:
            ui, android, scroll,recent apps, swipe
    """

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    x_center = uidevice.info['displayWidth'] / 2
    y_center = uidevice.info['displayHeight'] / 2

    while not uidevice(**view_to_find).wait.exists(timeout=1000):
        if (uidevice(resourceId="com.android.systemui:id/task_view_bar").count
                < 4):
            return False

        uidevice.swipe(sx=x_center,
                       sy=y_center,
                       ex=x_center,
                       ey=y_center * 150 / 100,
                       steps=10)
    return True
Пример #3
0
def get_triggered_watchers(serial=None):
    """ description:
            returns all register watchers that were triggered

        usage:
            ui_utils.get_triggered_watchers()

        tags:
            ui, android, watcher, get, triggered
    """
    if serial:
        uidevice = ui_device(serial=serial)
        adb_connection = connection_adb(serial=serial)
    else:
        uidevice = ui_device()
        adb_connection = connection_adb()

    triggered_watchers = []
    if adb_connection.check_connected():
        try:
            for watcher in uidevice.watchers:
                if uidevice.watcher(watcher).triggered:
                    triggered_watchers.append(watcher)
        except Exception as e:
            if "RPC" not in str(e.message) and "not connected" not in \
                    str(e.message) and "not attached" not in str(e.message):
                print strftime("%d/%m %X.%S0 ", time.localtime()) + \
                    "Registered watchers query exception due to lack of adb connectivity: {0}".format(e.message)
                raise
            else:
                print strftime("%d/%m %X.%S0 ", time.localtime()) + \
                    "Watchers could not be queried due to exception: {}".format(e.message)

    return triggered_watchers
def remove_non_group_watchers(ui_watcher_groups, serial=None):
    """ description:
            removes all the watchers that are not part of <ui_watcher_group>

        usage:
            ui_utils.remove_non_group_watchers(ui_watcher_goup = "cts")

        tags:
            ui, android, watcher, remove
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    try:
        for watcher in uidevice.watchers:
            found = True
            for ui_watcher_group in ui_watcher_groups:
                if watcher in ui_statics.watcher_list.keys() and \
                        ui_watcher_group in ui_statics.watcher_list[watcher]['groups']:
                    break
                else:
                    found = False
            if not found:
                uidevice.watchers.remove(watcher)
    except Exception as e:
        if "RPC" not in str(e.message) and "not connected" \
                not in str(e.message) and "not attached" not in str(e.message):
            print "[ {0} ]: Remove non-group watchers due to lost adb connection exception: {1}".\
                format(serial, e.message)
            raise
        else:
            print "[ {0} ]: Non group watchers could not be unregistered due to exception: {1}".\
                format(serial, e.message)
Пример #5
0
def is_view_visible(view_to_find, serial=None, click=False):
    """ description:
            return true if <view_to_find> is visible on screen.
            if <click> is True, it will click on the view before
            return.
            If it's a list on screen, it also scrolls through it.

        usage:
            ui_utils.is_text_visible("text_to_find")

        tags:
            ui, android, view, visible
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    if uidevice(resourceId="android:id/list").info['scrollable']:
        uidevice(scrollable=True).scroll.to(**view_to_find)

    if uidevice(**view_to_find).exists:
        if click:
            uidevice(**view_to_find).click.wait()
        return True
    else:
        return False
Пример #6
0
def register_handlers(ui_handler_groups, serial=None):
    """ description:
            Register all the hadlers that are part of <ui_handler_group>

        usage:
            ui_utils.register_handlers(ui_handler_group = "cts")

        tags:
            ui, android, handler, register
    """

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    for ui_handler_group in ui_handler_groups.split(" "):
        for handler_name, handler_value in ui_statics.handler_list.iteritems():
            if ui_handler_group in handler_value[
                    'groups'] and handler_name not in uidevice.handlers():
                handler_function = my_handler(
                    selector=handler_value['selector'],
                    action_view=handler_value['action_view'],
                    action=handler_value['action'],
                    handler_name=handler_name,
                    serial=serial)
                handler_function.register()
                print "[ {0} ]: Handler {1} has been registered".format(
                    serial, handler_name)
Пример #7
0
def is_view_visible_scroll_left(view_to_find, serial=None, click=False):
    """ description:
            return true if view is visible on screen.
            If <click> is True, it will click on the view before
            return.
            If there are multiple pages, it will scroll to them
            to the left.

        usage:
            ui_utils.is_text_visible_scroll_left("text_to_find")

        tags:
            ui, android , view, visible, swipe, scroll
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    while True:
        if uidevice(**view_to_find).exists:
            if click:
                uidevice(**view_to_find).click.wait()
            return True

        scr_dump_before = uidevice.dump()
        uidevice().swipe.left()
        time.sleep(1)
        scr_dump_after = uidevice.dump()

        if scr_dump_before == scr_dump_after:
            return False
Пример #8
0
def get_open_tabs_no(serial=None):
    if serial:
        uidevice = ui_device(serial)
    else:
        uidevice = ui_device()

    return uidevice(resourceId="com.android.chrome:id/tab_title").count
Пример #9
0
def wifi_check_AP(ap_name, serial=None, device=None):
    """ description:
            Checks if the given <ap_name> is known on the <serial> device

        usage:
            is_known_AP(ap_name = "some_AP_name")

        tags:
            ui, android, wifi, AP, known
    """

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    exclude_ap_names = ["Wi?Fi", "On"]
    if ap_name in exclude_ap_names:
        print "WARNING: You are using bad AP names for testing: " + ",".join(
            exclude_ap_names)

    if uidevice(className="android.widget.ScrollView",
                scrollable=True).wait.exists(timeout=1000):
        uidevice(scrollable=True).scroll.to({"text": ap_name})

    if uidevice(resourceId="android:id/title",
                text=ap_name).wait.exists(timeout=1000):
        return (True)
    else:
        return (False)
Пример #10
0
def move_slider(view_to_find,
                position=50,
                x_min_delta=16,
                x_max_delta=5,
                serial=None):
    """ description:
            move the slider to position which is a percentage
            the percentage is not very precise due to slider borders
            position = 100 means move slider to 100%
            x_min_delta, x_max_delta are offset for finding actual slider
                position

        usage:
            ui_utils.move_slider(view_to_find = {
                                        "className":'android.widget.SeekBar',
                                        "instance":0}, position = 30)

        tags:
            ui, android, slider, move
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    coords = uidevice(**view_to_find).info['visibleBounds']
    y_slider = (coords['top'] + coords['bottom']) / 2
    x_min = coords['left'] + x_min_delta
    x_max = coords['right'] - x_max_delta
    x_length = x_max - x_min

    target_pos = x_min + position / 100.0 * x_length
    uidevice(**view_to_find).drag.to(target_pos, y_slider, steps=100)
Пример #11
0
def exit_search(serial = None):
    if serial:
        uidevice = ui_device(serial = serial)
    else:
        uidevice = ui_device()
    if uidevice(description = "Close search").exists:
        uidevice(description = "Close search").click()
Пример #12
0
def is_enabled(view_to_find, serial=None, **kwargs):
    """ description:
            return true if element is enabled, false if disabled (grayed
            out in UI). Ignore 'enabled' parameter if you only want to
            check status. Use 'enabled' (True, False) to state the
            expected status

        usage:
            ui_utils.is_enabled(view_to_find = {"resourceId":
                    "com.intel.TelemetrySetup:id/text"},
                    enabled = True)

        tags:
            ui, android, view, enabled, disabled
    """

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    state = uidevice(**view_to_find).info['enabled']

    if 'enabled' in kwargs:
        enabled = kwargs['enabled']
        if enabled and state:
            return True
        elif enabled and not state:
            return False
        elif not enabled and state:
            return False
    return state
Пример #13
0
def check_google_account(serial=None):
    """ description:
            Check if a Google account is configured on the device

        usage:
            ui_utils.check_google_account()

        tags:
            ui, android, account, google
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    uidevice.press.home()
    uidevice(description="Apps").click.wait()
    uidevice(text="Settings").click.wait()
    uidevice(text="Accounts").click.wait()

    return_value = is_text_visible("Google")
    uidevice.press.recent()
    uidevice(text="Settings").swipe.right()
    uidevice.press.home()
    return return_value
Пример #14
0
def count_apps_pages(serial=None):
    """ description:
            return the number of Apps pages (not Widgets)
            you must be in first page of All Apps (this is true after
            ui_steps.press_all_apps)

        usage:
            ui_utils.count_apps_pages()

        tags:
            ui, android, swipe, apps
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    uidevice().swipe.left()
    widget_page = is_text_visible("Analog clock")

    result = 1
    while not widget_page:
        result += 1

        uidevice().swipe.left()
        widget_page = is_text_visible("Analog clock")

    return result
Пример #15
0
def remove_watchers(ui_watcher_group=None, serial=None):
    """ description:
            removes all the watchers that are part of <ui_watcher_group>
            if <ui_watcher_group> is None it will remove all watchers

        usage:
            ui_utils.remove_watchers(ui_watcher_goup = "cts")

        tags:
            ui, android, watcher, remove
    """

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    try:
        for watcher in ui_statics.watcher_list:
            if ui_watcher_group:
                if ui_watcher_group in ui_statics.watcher_list[watcher][
                        'groups']:
                    uidevice.watchers.remove(watcher)
            else:
                uidevice.watchers.remove()
    except Exception as e:
        if "RPC" not in str(e.message) and "not connected" not in str(
                e.message) and "not attached" not in str(e.message):
            print "[ {0} ]: Watchers unregister due to lost adb connection exception: {1}".format(
                serial, e.message)
            raise
        else:
            print "[ {0} ]: Watchers could not be unregistered due to exception: {1}".format(
                serial, e.message)
Пример #16
0
def is_homescreen(serial=None, sim_pin_enabled=False):
    """ description:
            Check homescreen is displayed

        usage:
            ui_utils.is_homescreen()

        tags:
            ui, android, homescreen
    """

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    if sim_pin_enabled:
        return is_view_displayed(
            serial=serial,
            view_to_find={"resourceId": "com.android.systemui:id/simPinEntry"})

    views = [{
        "resourceId":
        "com.google.android.googlequicksearchbox:id/workspace"
    }, {
        "resourceId":
        "com.google.android.googlequicksearchbox:id/search_edit_frame"
    }, {
        "text": "Welcome"
    }, {
        "text": "Encrypting"
    }, {
        "resourceId": "com.android.launcher:id/search_button_container"
    }, {
        "textContains": "has stopped."
    }, {
        "resourceId": "com.android.systemui:id/user_name"
    }, {
        "resourceId": "com.android.car.overview:id/gear_button"
    }, {
        "resourceId": "com.android.car.overview:id/voice_button"
    }, {
        "resourceId": "com.android.launcher3:id/btn_qsb_search"
    }]
    for view in views:
        if adb_utils.is_power_state(serial=serial, state="OFF"):
            uidevice.wakeup()
        if uidevice(resourceId="com.android.systemui:id/lock_icon"):
            uidevice.swipe(200, 500, 200, 0, 10)
        if is_view_displayed(serial=serial, view_to_find=view):
            return True
    if is_view_displayed(
            serial=serial,
            view_to_find={"textContains": "To start Android, enter your"}):
        return None
    return False
Пример #17
0
 def __init__(self, serial, selector, action, action_view,
              handler_name):
     self.selector = selector
     self.action = action
     self.action_view = action_view
     self.handler_name = handler_name
     if serial:
         self.uidevice = ui_device(serial=serial)
     else:
         self.uidevice = ui_device()
     self.serial = serial
Пример #18
0
def books_home(serial=None):

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    if not uidevice(text="Read Now").exists:
        uidevice(description="Show navigation drawer").click()
        uidevice(text="Read Now").click()
    elif uidevice(text="Shop").exists:
        uidevice(text="Read Now").click()
Пример #19
0
def register_watchers(ui_watcher_groups, serial=None):
    """ description:
            register all the watchers that are part of <ui_watcher_group>

        usage:
            ui_utils.register_watchers(ui_watcher_goup = "cts")

        tags:
            ui, android, watcher, register
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    remove_non_group_watchers(ui_watcher_groups=ui_watcher_groups.split(" "),
                              serial=serial)
    for ui_watcher_group in ui_watcher_groups.split(" "):
        for watcher_name, watcher_value in ui_statics.watcher_list.iteritems():
            if ui_watcher_group in watcher_value['groups']:
                if watcher_name not in uidevice.watchers:
                    try:
                        if watcher_value['action'] == "click":
                            uidevice.watcher(watcher_name).\
                                        when(**watcher_value['selector']).click(**watcher_value['action_view'])
                            print strftime(
                                "%d/%m %X.%S0 ", time.localtime()
                            ) + "Watcher {0} has been  registered for {1}.".format(
                                watcher_name, serial)
                        elif watcher_value['action'] == "press":
                            uidevice.watcher(watcher_name).\
                                        when(**watcher_value['selector']).press(watcher_value['action_view'])
                            print strftime(
                                "%d/%m %X.%S0 ", time.localtime()
                            ) + "Watcher {0} has been  registered for {1}.".format(
                                watcher_name, serial)
                        else:
                            print strftime("%d/%m %X.%S0 ", time.localtime(
                            )) + "Invalid watcher action: {0}".format(
                                watcher_value['action'])
                    except Exception as e:
                        if "RPC" not in str(
                                e.message) and "not connected" not in str(
                                    e.message) and "not attached" not in str(
                                        e.message):
                            print strftime(
                                "%d/%m %X.%S0 ", time.localtime()
                            ) + "Watcher registration exception due to lack of adb connectivity: {0}".format(
                                e.message)
                            raise
                        else:
                            print strftime(
                                "%d/%m %X.%S0 ", time.localtime()
                            ) + "Watcher {} could not be registered due to exception: {}".format(
                                watcher_name, e.message)
Пример #20
0
def is_display_direction_landscape(serial=None):

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    if uidevice.info["displayWidth"] > uidevice.info["displayHeight"]:
        return True
    else:
        return False
Пример #21
0
def search_by(name, serial=None, wait_time=20000):
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    uidevice(description="Search").click()
    uidevice(
        resourceId="com.google.android.apps.docs.editors.docs:id/search_text"
    ).set_text(name)
    uidevice.press(66)
    uidevice(resourceIdMatches=".*doc_list_syncing_spinner").wait.gone(
        timeout=wait_time)
Пример #22
0
def search_by(name, serial = None, wait_time = 20000):
    if serial:
        uidevice = ui_device(serial = serial)
    else:
        uidevice = ui_device()
    uidevice(description="Search").click()
    uidevice(resourceId = "com.google.android.apps.docs:id/search_text").set_text(name)
    uidevice.press(66)
    uidevice(resourceIdMatches = ".*doc_list_syncing_spinner").wait.gone(timeout=wait_time)
    # clear search history suggestions and remove keyboard by focusing
    # next item on the right
    uidevice.press(22)
Пример #23
0
def is_device_locked(serial=None):
    """ description:
            Check if the device is locked

        usage:
            ui_utils.is_device_locked()

        tags:
            ui, android, lock
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    return uidevice(resourceId="com.android.systemui:id/lock_icon").exists
Пример #24
0
def get_registered_watchers(serial=None):
    """ description:
            returns all register watchers

        usage:
            ui_utils.get_registered_watchers()

        tags:
            ui, android, watcher, get
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    return uidevice.watchers
def pass_through_guidlines():
    uidevice = ui_device(serial=serial)
    app = uidevice(className='android.widget.FrameLayout')
    x_coord = app.info['bounds']['right']
    y_coord = app.info['bounds']['left']
    print x_coord
    print y_coord
    start_btn = uidevice.exists(className='android.widget.Button',
                                textContains='START NOW')
    while not (start_btn):
        app.swipe('left')
        if start_btn:
            ui_steps.click_button_if_exists(serial=serial,
                                            view_to_find={"text":
                                                          "START NOW"})()
            ui_steps.click_button_if_exists(serial=serial,
                                            view_to_find={"text": "OK"})()
            sleep(1)
        if uidevice.exists(className="android.widget.TextView",
                           textContains="Internal Storage"):
            break
        clipboard = uidevice.exists(className='android.widget.Button',
                                    textContains='Clipboard')
        if clipboard:
            print "Clipboard Found"
Пример #26
0
def is_view_displayed(view_to_find, serial=None, wait_time=5000):
    """ description:
            Return True if <view_to_find> is visible on screen.

        usage:
            ui_utils.is_view_displayed(view_to_find = {"Text": "text"})

        tags:
            ui, android, view, displayed
    """

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    return uidevice(**view_to_find).wait.exists(timeout=wait_time)
Пример #27
0
def is_known_AP(ap_name, serial=None, device=None):
    """ description:
            Checks if the given <ap_name> is known on the <serial> device

        usage:
            is_known_AP(ap_name = "some_AP_name")

        tags:
            ui, android, wifi, AP, known
    """

    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()

    exclude_ap_names = ["Wi?Fi", "On"]
    if ap_name in exclude_ap_names:
        print "WARNING: You are using bad AP names for testing: " + ",".join(
            exclude_ap_names)

    if uidevice(className="android.widget.ScrollView",
                scrollable=True).wait.exists(timeout=1000):
        uidevice(scrollable=True).scroll.to({"text": ap_name})

    uidevice(resourceId="android:id/title",
             text=ap_name).wait.exists(timeout=1000)
    time.sleep(0.5)
    uidevice(text=ap_name).click.wait()
    count = 0
    while not uidevice(resourceId="android:id/title",
                       text=ap_name).wait.gone(timeout=1000) and count < 5:
        count += 1
        uidevice(text=ap_name).click.wait()
    uidevice(resourceId="android:id/alertTitle",
             text=ap_name).wait.exists(timeout=1000)
    exists = uidevice(**device.wifi_saved_network_forget_btn_id).wait.exists(
        timeout=1000)
    print device.wifi_saved_network_cancel_btn_id
    if uidevice(**device.wifi_saved_network_cancel_btn_id).wait.exists(
            timeout=1000):
        uidevice(**device.wifi_saved_network_cancel_btn_id).click.wait()
    elif uidevice(**device.wifi_saved_network_done_btn_id).wait.exists(
            timeout=1000):
        uidevice(**device.wifi_saved_network_done_btn_id).click.wait()

    return exists
Пример #28
0
 def get_ui_dump(self, file_name):
     # save UI dump
     try:
         uidevice = ui_device(serial=self.serial)
         uidevice.dump(out_file=file_name,
                       compressed=False,
                       serial=self.serial)
     except:
         pass
Пример #29
0
def is_radio_button_enabled(instance, serial=None):
    """ description:
            Check the actual state of a radio button.
            Return True if radio button checked or false if unchecked

        usage:
            ui_utils.is_radio_button_enabled(instance = 0)

        tags:
            ui, android, radio, enabled, disabled
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    radio_btn = uidevice(className="android.widget.RadioButton",
                         instance=instance)
    return radio_btn.info['checked']
Пример #30
0
def evaluate_search(serial, keyword, wait_time=20000):
    """ description:
           Attempts a very light evaluation of the search results.
           Only considers the presence of a keyword in the dump xml.

        usage:
            google_search_utils.evaluate_search(serial = serial,
                                                keyword = "somestring")

        tags:
            ui, android, click, app, scroll
    """
    if serial:
        uidevice = ui_device(serial=serial)
    else:
        uidevice = ui_device()
    xml_dump_lcase = uidevice.dump(compressed=False).lower()
    return xml_dump_lcase.count(keyword.lower()) > 1 or \
            uidevice(text = "Can't load search results").wait.exists(timeout = wait_time)