Python Selenium测试中如何向继承TestCase的基类传参消除属性告警
解决方案
告警本质是PyCharm静态检查时未识别到TestBase的config属性,你现有代码运行逻辑是完全正常的,以下是符合你要求的最优解法:
方案1:基类增加config类型注解(推荐,改动最小)
仅需在TestBase中显式声明config的属性类型,给IDE做静态检查提示即可,完全不改动现有运行逻辑,也不需要把配置加载逻辑移入基类:
import configparser import unittest from selenium import webdriver import distutils.util class TestBase(unittest.TestCase): # 显式声明config属性类型,消除IDE告警 config: configparser.ConfigParser def setUp(self): chrome_options = webdriver.ChromeOptions() is_headless = bool(distutils.util.strtobool(self.config.get("CHROMEDRIVER", "headless_enabled"))) # 原有的if/else可直接简化为赋值 chrome_options.headless = is_headless executable = self.config.get("CHROMEDRIVER", "executable_path") self.driver = webdriver.Chrome(executable, options=chrome_options)
如果使用Python3.6及以下版本,可将类型注解替换为注释式类型提示:
class TestBase(unittest.TestCase): config = None # type: configparser.ConfigParser # 其余逻辑不变
方案2:基类初始化config属性+运行时校验
如果需要额外增加运行时校验,避免子类遗漏config赋值直接调用父类setUp,可以在基类构造函数中初始化config属性:
class TestBase(unittest.TestCase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.config = None def setUp(self): # 增加前置校验,提前抛出清晰的错误提示 if self.config is None: raise NotImplementedError("测试子类必须在调用super().setUp()前完成self.config的赋值") # 原有逻辑不变
以上两种方案都不需要调整你现有子类的配置加载逻辑,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

