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)