前言:
- 运行过程中不定时弹框(广告弹窗,升级提示框,新消息提示框等等)
- 弹框不是 BUG(UI 界面提示,警告的作用)
弹窗黑名单处理
1 # black_list 黑名单列表 2 3 def find(self, by, locator): 4 try: 5 return self.driver.find_element(by, locator) 6 except Exception as e: 7 for black in black_list: 8 # 查找黑名单中的每一个元素 9 eles = self.driver.find_elements(*black) 10 if len(eles) > 0: 11 eles[0].click() 12 return find(by, locator) 13 raise e
封装:
- 弹窗黑名单,不确定会弹什么,可以写在框架层,处理通用逻辑,
- 在每一次查找元素的时候,去处理黑名单列表元素
- 如果达到最大查找次数,还是异常,则抛出错误信息
- 使用装饰器,让代码更简洁、易维护
使用装饰器
1 # 声明一个黑名单列表 2 black_list=[(元素1),(元素2)] 3 4 # fun 相当于 find 方法 5 def black_wrapper(fun): 6 def run(*args, **kwargs): 7 # args[0] 就是 find 里面的第一个参数 self 8 basepage = args[0] 9 try: 10 return fun(*args, **kwargs) 11 except Exception as e: 12 for black in black_list: 13 eles = basepage.driver.find_elements(*black) 14 if len(eles) > 0: 15 eles[0].click() 16 return fun(*args, **kwargs) 17 raise e 18 return run 19 20 @black_wrapper 21 # 执行find时,会先执行black_wrapper方法 22 def find(self, by, locator) 23 return self.driver.find_element(by, locator)
笔记2023-04-15