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 _count_tabs(tab_control: BaseWrapper) -> int:
     return len(tab_control.children(control_type='TabItem'))