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

C#程序迁移至PC后无法连接Appium,报请求资源未找到错误

解决Appium迁移到台式机后出现的WebDriver资源找不到错误

我在笔记本电脑上运行C#编写的Appium自动化代码一切正常,但迁移到台式机后无法运行。已在台式机上安装Appium、Java及Android SDK,运行时抛出以下错误:

OpenQA.Selenium.WebDriverException: 'The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource'

相关代码

public bool ConnectAppium()
{
            for (int i = 0; i < 5; i++)
            {
                try
                {
                    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
                    desiredCapabilities.SetCapability("platformName", "Android");
                    desiredCapabilities.SetCapability("platformVersion", this.Resutl("shell getprop ro.build.version.release").Replace("\r\n", ""));
                    desiredCapabilities.SetCapability("deviceName", this._driver);
                    desiredCapabilities.SetCapability("systemPort", this._port + 4000);
                    desiredCapabilities.SetCapability("udid", this._driver);
                    desiredCapabilities.SetCapability("devicePort", this._port);
                    desiredCapabilities.SetCapability("noReset", true);
                    desiredCapabilities.SetCapability("disableWindowAnimation", true);
                    desiredCapabilities.SetCapability("gpsEnabled", true);
                    desiredCapabilities.SetCapability("skipLogcatCapture", true);
                    desiredCapabilities.SetCapability("dontStopAppOnReset", true);
                    desiredCapabilities.SetCapability("ignoreHiddenApiPolicyError", true);
                    desiredCapabilities.SetCapability("noSign", false);
                    desiredCapabilities.SetCapability("newCommandTimeout", 36000);
                    string resutl = TLExecute.CMD("netstat -an |find /i \"listening\"");

                    bool flag = !resutl.Contains(this._port.ToString());

                    if (flag)
                    {
                        new Task(delegate ()
                        {
                            Process process = Process.Start(new ProcessStartInfo
                            {
                                FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + "\\System32\\cmd.exe",
                                WorkingDirectory = Application.StartupPath,
                                Arguments = "/c appium --port " + this._port.ToString(),
                                CreateNoWindow = true,
                                WindowStyle = ProcessWindowStyle.Hidden,
                                RedirectStandardOutput = true,
                                UseShellExecute = false,
                                Verb = "runas",
                                RedirectStandardError = true
                            });
                            process.StandardOutput.ReadToEnd();
                        }).Start();

                        for (int j = 0; j < 5; j++)
                        {
                            Thread.Sleep(TimeSpan.FromSeconds(1.0));
                            resutl = TLExecute.CMD("netstat -an |find /i \"listening\"");

                            bool flag2 = resutl.Contains(this._port.ToString());

                            if (flag2)
                            {
                                break;
                            }
                        }
                    }

                    this.remoteWebDriver = new RemoteWebDriver(new Uri("http://127.0.0.1:" + this._port.ToString() + "/wd/hub"), desiredCapabilities);
                    this.remoteWebDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10.0);

                    return true;
                }
                catch
                {
                }
            }
            return false;
}

排查与解决步骤

  • 确认Appium命令可执行性
    台式机可能未将Appium加入系统环境变量,导致cmd无法直接调用appium命令。需改用Appium的完整启动路径,比如:

    C:\Program Files\Appium\resources\app\node_modules\.bin\appium.cmd --port 你的端口号
    

    路径根据实际安装位置调整。同时,代码中process.StandardOutput.ReadToEnd()会阻塞线程,导致Appium服务器未完全启动就发起连接,建议移除该行或改用异步读取逻辑。

  • 校验DesiredCapabilities参数

    1. 手动执行adb shell getprop ro.build.version.release,确认能返回有效Android版本号,确保ADB可正常连接设备。
    2. 通过adb devices查看台式机连接的设备UDID,确认this._driver的值与实际UDID一致(代码中deviceName和udid都用了这个变量)。
    3. 检查systemPort和devicePort是否被其他程序占用,建议systemPort使用8200-8299范围内的端口,避免冲突。
  • 统一版本兼容性
    台式机的Appium版本可能与笔记本不一致,不同Appium版本对Selenium.WebDriver的版本要求不同。需确保两台机器的Appium版本、Selenium.WebDriver NuGet包版本完全一致。

  • 验证ADB环境配置
    确认Android SDK的platform-tools目录已加入系统环境变量,在CMD中执行adb version,若能正常返回版本信息则配置正确,否则需添加环境变量。

  • 查看Appium服务器日志
    修改代码中启动Appium的配置,将CreateNoWindow设为false、WindowStyle设为ProcessWindowStyle.Normal,直接查看服务器启动日志,排查是否存在依赖缺失、权限不足或其他启动错误。

内容的提问来源于stack exchange,提问作者Vũ Duy Huy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:40:25