Ejemplo 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
Ejemplo n.º 2
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))