python-反射机制

一、用处:

【1】已有的封装好的py文件,根据不同需求去调用不同模块

【2】类中封装了很多方法,需要提供一个同意的入口供其他人调用(类似路由转发)

总结:动态调用类对象,任意调用任意的对象和属性

二、方法

【1】__import__:动态导入模块

【2】hasattr():是否存在对应属性

【3】getattr():获取对应的属性

【4】setattr():将对应的已存在的属性添加到实例中

【5】delattr():删除实例中对应的属性

三、用webui里面的方法封装举例

'''
    封装元素定位
    '''
    # 元素定位:满足八种不同元素的定位方法
    def locate(self, type, value):
        '''注释掉,可以用反射方法优化代码
        if type == 'id':
            el = self.driver.find_element(By.ID,value)
        elif type == 'name':
            el = self.driver.find_element(By.NAME,value)
        elif type == 'class_name':
            el = self.driver.find_element(By.CLASS_NAME,value)
        elif type == 'tag_name':
            el = self.driver.find_element(By.TAG_NAME,value)
        elif type == 'link_text':
            el = self.driver.find_element(By.LINK_TEXT,value)
        elif type == 'xpath':
            el = self.driver.find_element(By.XPATH,value)
        elif type == 'tag_name':
            el = self.driver.find_element(By.TAG_NAME,value)
        elif type == 'css_selector':
            el = self.driver.find_element(By.CSS_SELECTOR,value)
        elif type == 'partial_link_text':
            el = self.driver.find_element(By.PARTIAL_LINK_TEXT,value)
        return el
        '''

        # 运用反射机制,获取到By里面的属性,然后根据入参返回
        locator = getattr(By,type) # 如果type=='XPATH',则getattr()就是获取到By.XPATH
        return self.driver.find_element(locator,value)

 

posted on 2022-05-21 13:28  墙角一枝花  阅读(28)  评论(0编辑  收藏  举报