Exemplo n.º 1
0
    def __init__(self, UIAElement, pattern_identifier):
        self.UIAElement = UIAElement
        self.pattern_object = UIA.get_pattern_by_id(UIAElement,
                                                    pattern_identifier)
        if self.pattern_object is None:
            raise DriverException(
                "Cannot get pattern, stop init pattern object")
        self.methods = {}
        self.properties = {}
        interface_description = UIA.UIA_control_pattern_interfaces[
            pattern_identifier]
        for member_description in interface_description:
            flag, name, args = _unpack(*member_description)
            #do a check, see if member exist in pattern object
            #if not, skip this member
            try:
                getattr(self.pattern_object, name)
            except AttributeError:
                LOGGER.debug("%s not exist in Pattern:%s", name,
                             pattern_identifier)
                continue

            if flag == "method":
                self.methods[name] = args
            elif flag == "property":
                self.properties[name] = args
            else:
                raise DriverException("Unrecognised flag %s" % flag)
Exemplo n.º 2
0
    def start(self, **kwargs):
        '''
        get root ready
        like get root element in windows UIA, get browser to target website

        must have a "browser_name" argument in kwargs to indicate which browser to use
        other kwargs are same as normal selenium webdrivers
        '''
        if not "browser_name" in kwargs:
            LOGGER.error("Browser name not specified")
            raise DriverException("Browser name not specified")

        browser_name = kwargs["browser_name"]
        if not browser_name.upper() in self.support_browsers:
            LOGGER.error("Unsupported browser name: %s", browser_name)
            raise DriverException("Unsupported browser name: %s" %
                                  browser_name)

        #remove browser_name key from kwargs
        del kwargs["browser_name"]

        #for ie browser, need to ignore zoom settings
        if browser_name.upper() == "IE":
            if "capabilities" in kwargs:
                #insert "ignoreZoomSetting" in driver capabilities
                caps = kwargs["capabilities"]
                caps["ignoreZoomSetting"] = True
            else:
                #add default capabilities
                caps = DesiredCapabilities.INTERNETEXPLORER
                caps["ignoreZoomSetting"] = True
                kwargs["capabilities"] = caps

        self.webdriver = self.support_browsers[browser_name.upper()](**kwargs)
Exemplo n.º 3
0
 def get_translated(self):
     '''
     get translated result from parsed identifier
     '''
     if len(self.parsed_identifier) == 2:
         name = self.parsed_identifier[0]
         value = self.parsed_identifier[1]
         try:
             getattr(By, name.upper())
         except AttributeError:
             LOGGER.error("identifier not support: %s", name)
             raise DriverException("identifier not support: %s" % name)
         return getattr(By, name.upper()), value
     else:
         LOGGER.error("Get error parsed_id: %s",
                      repr(self.parsed_identifier))
         raise DriverException("Get error parsed_id: %s" %
                               repr(self.parsed_identifier))
Exemplo n.º 4
0
 def _translated_relational_identifier(self, relation, translated_id_1,
                                       translated_id_2):
     if relation == "AND":
         return UIA.IUIAutomation_object.CreateAndCondition(
             translated_id_1, translated_id_2)
     elif relation == "OR":
         return UIA.IUIAutomation_object.CreateOrCondition(
             translated_id_1, translated_id_2)
     else:
         raise DriverException("Get error relation id: %s" % repr(relation))
Exemplo n.º 5
0
    def _translated_identifier(self, parsed_id):
        if len(parsed_id) == 3:
            translated_id_1 = self._translated_identifier(parsed_id[1])
            translated_id_2 = self._translated_identifier(parsed_id[2])
            if translated_id_1 and translated_id_2:
                translated = self._translated_relational_identifier(
                    parsed_id[0], translated_id_1, translated_id_2)
            elif not translated_id_1 and translated_id_2:
                translated = translated_id_2
            elif translated_id_1 and not translated_id_2:
                translated = translated_id_1
            else:
                translated = None
        elif len(parsed_id) == 2:
            translated = self._translated_atomic_identifier(parsed_id)
        else:
            raise DriverException("Get error parsed_id: %s" % repr(parsed_id))

        #LOGGER().debug("Get translated: %s" % repr(translated))
        return translated
Exemplo n.º 6
0
    def __init__(self, function_object, name, args_expected=None):
        if args_expected is None:
            args_expected = []

        self.function_object = function_object
        self.name = name
        self.args = []
        self.outs = []
        for arg in args_expected:
            arg_direction = arg[0]
            arg_type = arg[1]
            arg_name = arg[2]
            if arg_direction == "in":
                self.args.append([arg_type, arg_name])
            elif arg_direction == "out":
                self.outs.append([arg_type, arg_name])
            else:
                #skip unsupported arg_direction
                raise DriverException("Unsupported arg_direction: %s" %
                                      arg_direction)
Exemplo n.º 7
0
 def get_pattern(self, name):
     raise DriverException("coordinate element don't support pattern")
Exemplo n.º 8
0
 def get_property(self, name):
     raise DriverException("coordinate element don't support property")
Exemplo n.º 9
0
 def find_elements(self, parsed_identifier):
     #TODO maybe we should let coordinate element have children
     raise DriverException("coordinate element should not have children")