You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用Appium.WebDriver4.3.1如何顺序执行多测试用例不中途关闭应用

问题解决办法

核心原因

你遇到的每个测试方法前后重复启停App的问题,根源是MSTest框架的注解执行逻辑:

  • [TestInitialize] 标记的方法会在每一个[TestMethod]执行前触发一次
  • [TestCleanup] 标记的方法会在每一个[TestMethod]执行后触发一次
    也就是说你当前的配置下,每跑一个测试用例都会走一次「初始化Driver启动App→执行用例→关闭App」的流程,和Appium的Reset配置无关。

修改方案

将单次执行所有测试用例才需要跑一次的启动、关闭逻辑,替换为类级别的初始化/清理注解[ClassInitialize]、[ClassCleanup]即可,修改后完整代码如下:

[TestClass]
public class Walkthrough
{
    private static string _appPath = @"PathToMyApp\MyApp.apk";
    // 注意_driver要改为静态,因为ClassInitialize方法是静态的
    private static AppiumDriver<AndroidElement> _driver;

    // 类初始化:整个测试类运行期间仅执行1次,在所有测试方法运行前触发
    [ClassInitialize]
    public static void ClassSetup(TestContext context)
    {
        var appiumOption = new AppiumOptions();
        appiumOption.AddAdditionalCapability(MobileCapabilityType.App, _appPath);
        appiumOption.AddAdditionalCapability(MobileCapabilityType.PlatformName, "Android");
        appiumOption.AddAdditionalCapability(MobileCapabilityType.DeviceName, "Pixel 4");
        appiumOption.AddAdditionalCapability(MobileCapabilityType.PlatformVersion, "12");
        appiumOption.AddAdditionalCapability(MobileCapabilityType.Udid, "99171FFAZ000GE");
        // 该配置保留,作用是不重置App数据,保持上次运行的状态
        appiumOption.AddAdditionalCapability(MobileCapabilityType.NoReset, true);
        appiumOption.AddAdditionalCapability(MobileCapabilityType.FullReset, false);

        _driver= new AndroidDriver<AndroidElement>(new Uri("http://127.0.0.1:4723/wd/hub"), appiumOption);
        // 可选:加启动等待,避免App还没加载完成就跑用例
        _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
    }

    // 类清理:整个测试类运行期间仅执行1次,在所有测试方法运行完后触发
    [ClassCleanup]
    public static void ClassCleanup()
    {
        if (_driver != null)
        {
            _driver.CloseApp();
            _driver.Quit();
            _driver.Dispose();
        }
    }

    [TestMethod]
    public void TestMethod1() 
    {
        _driver.FindElement(By.ID("ELEMENT1")).Click();
    }

    [TestMethod]
    public void TestMethod2()
    {
        _driver.FindElement(By.ID("ELEMENT2")).Click();
    }
}

补充注意事项

  • 如果你的测试用例之间存在执行顺序依赖,可以通过给[TestMethod]添加[Priority(数字)]注解指定顺序,数字越小优先级越高
  • 如果需要跨多个测试类共享同一个Driver实例,可以将初始化逻辑放到标记了[AssemblyInitialize]的方法中,对应清理逻辑用[AssemblyCleanup]

内容的提问来源于stack exchange,提问作者Ghasem Tabatabaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:54:03