def _get_element_by_type(driver: webdriver.Remote, locator, element=True): """通过locator定位元素(默认定位单个元素) Args: driver:driver locator:定位器 element: true:查找单个元素 false:查找多个元素 Returns:单个元素 或 元素list """ value = locator['value'] ltype = locator['type'] if ltype == "id": value_id = re.findall("(id/.+)", value)[0] value = str(_package) + ":" + str(value_id) if ltype == 'name': ui_value = 'new UiSelector().textContains' + '(\"' + value + '\")' return driver.find_element_by_android_uiautomator( ui_value ) if element else driver.find_elements_by_android_uiautomator( ui_value) else: return driver.find_element( ltype, value) if element else driver.find_elements( ltype, value)
class APP(object): """ APP页面基类 """ __metaclass__ = _APPMetaclass driver_share = {} driver = None command_executor = None desired_capabilities = None def __init__(self): self.LOGGER = logging.getLogger(self.__class__.__name__) if not self.driver_share.get('driver'): self.driver = Remote( self.command_executor, desired_capabilities=self.desired_capabilities) self.driver_share['driver'] = self.driver else: self.driver = self.driver_share['driver'] # type: Remote @classmethod def init(cls, command_executor=None, desired_capabilities=None): if command_executor: cls.command_executor = command_executor if desired_capabilities: cls.desired_capabilities = desired_capabilities def __getattr__(self, item): try: element = self.__elements__[item] except IndexError: raise ValueError(u'没找到要查找的变量') time.sleep(0.4) total_time, element_object = self.__find_element(element) self.LOGGER.info(u'查找%s元素共用时: %s秒' % (item, total_time)) return element_object @fn_timer def __find_element(self, element): if len(element) == 2: return self.driver.find_element(*element) elif len(element) == 3 and element[-1] == 'elements': return self.driver.find_elements(*element[:2]) else: raise TypeError(u'Element(s)不正确') def quit(self): try: self.driver.quit() self.driver_share['driver'] = None except: pass