def __init__(self, httpclient, session,<EOL>predicate=None,<EOL>id=None,<EOL>className=None, type=None,<EOL>name=None, nameContains=None, nameMatches=None,<EOL>text=None, textContains=None, textMatches=None,<EOL>value=None, valueContains=None, <EOL>label=None, labelContains=None,<EOL>visible=None, enabled=None,<EOL>classChain=None,<EOL>xpath=None,<EOL>parent_class_chains=[],<EOL>timeout=<NUM_LIT>,<EOL>index=<NUM_LIT:0>):
self.http = httpclient<EOL>self.session = session<EOL>self.predicate = predicate<EOL>self.id = id<EOL>self.class_name = className or type<EOL>self.name = self._add_escape_character_for_quote_prime_character(name or text)<EOL>self.name_part = nameContains or textContains<EOL>self.name_regex = nameMatches or textMatches<EOL>self.value = value<EOL>self.value_part = valueContains<EOL>self.label = label<EOL>self.label_part = labelContains<EOL>self.enabled = enabled<EOL>self.visible = visible<EOL>self.index = index<EOL>self.xpath = self._fix_xcui_type(xpath)<EOL>self.class_chain = self._fix_xcui_type(classChain)<EOL>self.timeout = timeout<EOL>if self.class_name and not self.class_name.startswith('<STR_LIT>'):<EOL><INDENT>self.class_name = '<STR_LIT>'+self.class_name<EOL><DEDENT>if self.name_regex:<EOL><INDENT>if not self.name_regex.startswith('<STR_LIT>') and not self.name_regex.startswith('<STR_LIT>'):<EOL><INDENT>self.name_regex = '<STR_LIT>' + self.name_regex<EOL><DEDENT>if not self.name_regex.endswith('<STR_LIT:$>') and not self.name_regex.endswith('<STR_LIT>'):<EOL><INDENT>self.name_regex = self.name_regex + '<STR_LIT>'<EOL><DEDENT><DEDENT>self.parent_class_chains = parent_class_chains<EOL>
Args:
    predicate (str): predicate string
    id (str): raw identifier
    className (str): attr of className
    type (str): alias of className
    name (str): attr for name
    nameContains (str): attr of name contains
    nameMatches (str): regex string
    text (str): alias of name
    textContains (str): alias of nameContains
    textMatches (str): alias of nameMatches
    value (str): attr of value, not used in most times
    valueContains (str): attr of value contains
    label (str): attr for label
    labelContains (str): attr for label contains
    visible (bool): is visible
    enabled (bool): is enabled
    classChain (str): string of ios chain query, eg: **/XCUIElementTypeOther[`value BEGINSWITH 'blabla'`]
    xpath (str): xpath string, a little slow, but works fine
    timeout (float): maxium wait element time, default 10.0s
    index (int): index of founded elements

WDA use two key to find elements "using", "value"
Examples:
"using" can be on of 
    "partial link text", "link text"
    "name", "id", "accessibility id"
    "class name", "class chain", "xpath", "predicate string"

predicate string support many keys
    UID,
    accessibilityContainer,
    accessible,
    enabled,
    frame,
    label,
    name,
    rect,
    type,
    value,
    visible,
    wdAccessibilityContainer,
    wdAccessible,
    wdEnabled,
    wdFrame,
    wdLabel,
    wdName,
    wdRect,
    wdType,
    wdUID,
    wdValue,
    wdVisible