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

使用Appium 5.0.0-beta01&Selenium4.0.1实现.NET安卓自动化并行执行求助

.NET环境下基于Appium 5.0.0-beta01与Selenium 4.0.1实现安卓自动化并行执行方案

问题1:多Appium服务启动后实例化Android Driver报错

报错核心原因

你提供的代码存在两个格式错误,导致Appium服务无法正确识别配置:

  1. 参数使用了中文全角引号,会被解析为无效字符
  2. –base-path使用了单长破折号,Appium要求参数前缀为双短破折号--

修正后的实现代码

// 修正参数格式:使用英文半角引号和标准双短破折号
var args = new OptionCollector().AddArguments(new KeyValuePair<string, string>("--base-path", "/wd/hub"));

_appiumLocalService = new AppiumServiceBuilder()
    .WithIPAddress("127.0.0.1")
    .UsingAnyFreePort()
    .WithArguments(args)
    .Build();

// 确保服务启动成功后再初始化Driver
_appiumLocalService.Start();
if (!_appiumLocalService.IsRunning)
{
    throw new InvalidOperationException("Appium服务启动失败");
}

// 并行执行必须为每个Driver配置唯一设备UDID,避免会话冲突
appiumOptions.AddAdditionalAppiumOption("udid", "<对应设备的UDID>");

// 直接传入服务EndpointUri,可避免会话识别异常
AndroidDriver _androidDriver = new AndroidDriver(
    new Uri(_appiumLocalService.ServiceUrl), 
    appiumOptions, 
    TimeSpan.FromSeconds(120));

额外注意事项

  • 并行场景下,每个Appium服务对应的AndroidDriver必须绑定唯一设备UDID,可通过adb devices命令获取已连接设备的UDID列表
  • 若仍出现会话问题,可检查Appium服务日志,确认--base-path参数是否被正确加载

问题2:程序化启动多模拟器并集成Appium服务

C#中没有官方封装的AndroidDebugBridge类,但可以通过调用adb/emulator命令行工具实现,核心是用Process类执行系统命令:

实现步骤

  1. 获取可用模拟器列表
// 执行emulator命令获取AVD列表
var process = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "emulator",
        Arguments = "-list-avds",
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    }
};
process.Start();
string avdList = process.StandardOutput.ReadToEnd();
process.WaitForExit();
// 解析输出得到AVD名称数组
string[] avds = avdList.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
  1. 启动指定模拟器
    每个模拟器需使用独立端口(默认从5554开始,步长为2),避免端口冲突:
// 启动第一个模拟器,端口设为5554
string avdName = avds[0];
var emulatorProcess = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "emulator",
        Arguments = $"-avd {avdName} -port 5554 -no-snapshot-load",
        UseShellExecute = false,
        CreateNoWindow = true
    }
};
emulatorProcess.Start();
  1. 等待模拟器启动完成
    通过adb命令确认设备就绪:
// 等待模拟器设备上线
var adbProcess = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "adb",
        Arguments = "wait-for-device",
        UseShellExecute = false,
        CreateNoWindow = true
    }
};
adbProcess.Start();
adbProcess.WaitForExit();

// 验证设备是否可用
var devicesProcess = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "adb",
        Arguments = "devices",
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    }
};
devicesProcess.Start();
string devicesOutput = devicesProcess.StandardOutput.ReadToEnd();
if (!devicesOutput.Contains("emulator-5554"))
{
    throw new InvalidOperationException("模拟器启动失败");
}
  1. 绑定Appium服务与模拟器
    为该模拟器对应的Appium服务配置UDID参数:
appiumOptions.AddAdditionalAppiumOption("udid", "emulator-5554");

测试完成后的清理

执行命令关闭模拟器:

var killProcess = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "adb",
        Arguments = "-s emulator-5554 emu kill",
        UseShellExecute = false,
        CreateNoWindow = true
    }
};
killProcess.Start();
killProcess.WaitForExit();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:05:20