安卓自动化测试中如何将Appium driver实例在不同类之间传递
安卓自动化测试多类共享Driver实例最优实现方案
核心实现思路是单例模式封装Driver实例,既可以避免重复初始化Driver导致的应用反复重启,也能保证全测试生命周期内所有类调用的是同一个可用Driver实例,具体实现步骤如下:
- 第一步:修改setup类的Driver生成逻辑,用单例规则管控实例
以下为Python语言示例,Java/JS等其他语言实现逻辑完全一致:from appium import webdriver from appium.options.android import UiAutomator2Options class DriverManager: _driver = None @classmethod def get_driver(cls): # 仅当实例未初始化时才执行创建逻辑 if cls._driver is None: # 此处替换为你自己的capabilities配置 caps = UiAutomator2Options() caps.platform_name = "Android" caps.device_name = "测试设备" caps.app_package = "目标应用包名" caps.app_activity = "目标应用启动页Activity" caps.no_reset = True cls._driver = webdriver.Remote("http://127.0.0.1:4723", options=caps) return cls._driver @classmethod def quit_driver(cls): # 测试结束后统一销毁实例,避免进程残留 if cls._driver is not None: cls._driver.quit() cls._driver = None - 第二步:所有页面对象类、测试用例类统一调用封装好的
get_driver()方法获取实例,不要单独执行Driver初始化逻辑
示例页面类实现:# 登录页面对应类 class LoginPage: def __init__(self): # 直接获取全局唯一的Driver实例 self.driver = DriverManager.get_driver() def input_account(self, account): self.driver.find_element(By.ID, "account_input").send_keys(account)# 首页对应类 class HomePage: def __init__(self): # 和登录类拿到的是同一个Driver实例 self.driver = DriverManager.get_driver() def check_top_banner(self): return self.driver.find_element(By.ID, "home_banner").is_displayed() - 第三步:如果使用Pytest/TestNG等测试框架,可将
get_driver()和quit_driver()逻辑放到全局fixture、BeforeSuite/AfterSuite钩子中,适配多用例执行、并发执行场景时只需基于单例逻辑增加进程隔离规则即可。
注意:不要在业务类中直接修改Driver实例的属性、不要在非测试结束阶段调用quit方法,避免实例异常失效。
内容的提问来源于stack exchange,提问作者rakeshsahu59
相关产品推荐
相关产品推荐

