如何修改MasterAppiumFramework_BDD实现每次测试后重置Appium驱动及应用
修改MasterAppiumFramework_BDD实现每次测试后重置驱动及应用
1. 定位原有清理逻辑
找到项目中负责测试后清理的类(通常是Hooks.java或BaseTest.java),原框架中应该使用了类级别钩子(如TestNG的@AfterClass或Cucumber的@AfterAll)来在测试类结束后执行驱动销毁和应用重置。
2. 替换为方法级别钩子
将类级别的清理逻辑替换为方法/场景级别的钩子,确保每个测试用例(Cucumber场景)执行后触发重置:
针对Cucumber钩子的修改
如果项目使用Cucumber,在Hooks.java中添加/修改如下代码:
import io.cucumber.java.After; import org.openqa.selenium.remote.RemoteWebDriver; public class Hooks { private RemoteWebDriver driver; // 按原框架的依赖注入方式获取driver public Hooks(RemoteWebDriver driver) { this.driver = driver; } @After // 每个Cucumber场景执行后触发 public void resetAfterEachTest() { // 方案1:仅重置应用(轻量,保留驱动连接) driver.resetApp(); // 方案2:完全重启驱动(彻底重置,适合需重新初始化配置的场景) /* if (driver != null) { driver.quit(); driver = null; // 调用原框架的驱动初始化方法,比如initDriver() driver = DriverFactory.initDriver(); } */ } // 若原有@AfterAll或@AfterClass方法不再需要,可删除或注释 /* @AfterAll public static void tearDownClass() { // 原类级别清理代码 } */ }
针对TestNG钩子的修改
如果项目使用TestNG,在BaseTest.java中修改钩子注解:
import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterClass; public class BaseTest { protected RemoteWebDriver driver; @AfterMethod // 每个测试方法执行后触发 public void resetAfterEachTest() { driver.resetApp(); // 或执行驱动重启逻辑:quit后重新初始化 } // 注释或删除原有的@AfterClass方法 /* @AfterClass public void tearDownClass() { driver.quit(); } */ }
3. 验证驱动生命周期管理
确保驱动实例在每次重置后能被正确注入到后续测试中:
- 如果使用DriverFactory模式,需保证
initDriver()方法能正确创建新的驱动实例 - 若依赖注入框架,需调整驱动实例的作用域为每次测试重新获取
4. 测试验证
运行多个测试用例,检查每个测试完成后:
- 应用是否回到初始状态
- 驱动是否按预期重置(若选择重启驱动方案,可查看Appium日志确认会话重建)
内容的提问来源于stack exchange,提问作者Roberto Teresa
相关产品推荐
相关产品推荐

