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)
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)
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))
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))
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
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)
def get_pattern(self, name): raise DriverException("coordinate element don't support pattern")
def get_property(self, name): raise DriverException("coordinate element don't support property")
def find_elements(self, parsed_identifier): #TODO maybe we should let coordinate element have children raise DriverException("coordinate element should not have children")