Esempio n. 1
0
def find_control(parent: BaseWrapper, control_type=None, name=None, name_contains=None,
                 auto_id_leaf=None, qt_class=None, recurse=True, raise_on_failure=True) -> BaseWrapper or None:
    """
    Returns the first child of BaseWrapper that matches all of the search parameters.
    As soon as a matching child is encountered, this function returns.

    If no child is found, an exception is thrown.
    """
    if not recurse:
        desc = parent.children(control_type=control_type)
    else:
        desc = parent.descendants(control_type=control_type)

    for elem in desc:
        # This seems to be a lot more reliable than the properties exposed by the wrapper element
        # At least, this seems to consistently return the accessible name if it exists...
        elem_name = elem.element_info.element.CurrentName
        elem_text = elem.texts()[0] if elem.texts() else ""
        if (not qt_class or elem.class_name() == qt_class) and \
                (not name or elem_text == name or elem_name == name) and \
                (not name_contains or name_contains in elem_text or name_contains in elem_name) and \
                (not auto_id_leaf or elem.automation_id().rsplit(".", 1)[-1]):
            return elem

    if raise_on_failure:
        raise OrbitE2EError('Could not find element of type %s (name="%s", name_contains="%s", qt_class="%s", recurse=%s).' %
                            (control_type, name, name_contains, qt_class, recurse))
    else:
        return None
Esempio n. 2
0
    def _get_identical_items_index(item: BaseWrapper):
        top_item = item.top_level_parent()
        all_items = [
            top_item,
        ] + top_item.descendants()
        identical = []
        for one in all_items:
            if one.element_info.name == item.element_info.name:
                if one.element_info.automation_id == item.element_info.automation_id:
                    if one.element_info.control_type == item.element_info.control_type:
                        if one.element_info.control_id == item.element_info.control_id:
                            identical.append(one)

        if len(identical) < 2:
            return None

        for index, one in enumerate(identical):
            if one.rectangle() == item.rectangle():
                return index

        assert False
Esempio n. 3
0
 def __init__(self, control: BaseWrapper):
     self._container = control
     self._name = control.texts()[0]
     self._title = find_control(control, 'TabItem')
     self._callstacks = find_control(control,
                                     'Pane',
                                     'Callstacks',
                                     raise_on_failure=False)
     self._thread_states = find_control(control,
                                        'Pane',
                                        'ThreadState',
                                        raise_on_failure=False)
     self._tracepoints = find_control(control,
                                      'Pane',
                                      'Tracepoints',
                                      raise_on_failure=False)
     self._timers = find_control(control,
                                 'Pane',
                                 'Timers',
                                 raise_on_failure=False)
Esempio n. 4
0
def find_control(parent: BaseWrapper,
                 control_type,
                 name=None,
                 name_contains=None,
                 auto_id_leaf=None,
                 qt_class=None) -> BaseWrapper:
    """
    Returns the first child of BaseWrapper that matches all of the search parameters.
    As soon as a matching child is encountered, this function returns.

    If no child is found, an exception is thrown.
    """
    desc = parent.descendants(control_type=control_type)

    for elem in desc:
        if (not qt_class or elem.class_name() == qt_class) and \
                (not name or elem.texts()[0] == name) and \
                (not name_contains or name_contains in elem.texts()[0]) and \
                (not auto_id_leaf or elem.automation_id().rsplit(".", 1)[-1]):
            return elem

    raise OrbitE2EError(
        'Could not find element of type %s (name="%s", name_contains="%s", qt_class=%s)'
        % (control_type, name, name_contains, qt_class))
Esempio n. 5
0
 def _count_tabs(tab_control: BaseWrapper) -> int:
     return len(tab_control.children(control_type='TabItem'))