C#/Selenium连接Galaxy Tab物理安卓设备失败求助
排查思路与解决方案
一、先理清端口的核心误解
5037是ADB(Android Debug Bridge)的默认监听端口,它不是WebDriver服务器的端口,你代码里直接连接这个端口是错误的。先确认ADB服务本身是否正常:
- 打开命令提示符,执行
adb devices,确认设备已被列出(输出应包含你的Galaxy Tab S10的设备ID)。 - 检查5037端口是否被ADB占用:执行
netstat -ano | findstr :5037,查看结果中对应的进程ID(PID),打开任务管理器确认该PID属于adb.exe。 - 如果端口被其他进程占用,重启ADB服务:执行
adb kill-server,再执行adb start-server,重新检查端口状态。
二、核心问题:缺少WebDriver服务器
本地安卓设备的Selenium自动化必须依赖Appium或ChromeDriver for Android来搭建WebDriver会话服务,ADB本身不提供这个能力。下面是两种可行方案:
方案1:使用Appium(推荐)
- 安装Appium Desktop或通过npm安装Appium核心包。
- 启动Appium服务,默认端口是4723。
- 修改代码配置,修正端口与参数:
var options = new ChromeOptions(); options.PlatformName = "Android"; // 替换为adb devices输出的真实设备ID options.DeviceName = "你的设备ID"; options.PlatformVersion = "5.0.2"; // 指定设备上Chrome的包名与启动Activity options.AddAdditionalChromeOption("appPackage", "com.android.chrome"); options.AddAdditionalChromeOption("appActivity", "com.google.android.apps.chrome.Main"); // 连接Appium的默认端口 Uri url = new Uri("http://127.0.0.1:4723/wd/hub"); _driver = new RemoteWebDriver(url, options);
方案2:直接使用ChromeDriver for Android
- 下载与设备上Chrome版本严格匹配的ChromeDriver(注意:Android 5.0对应的Chrome版本较低,需找对应版本的ChromeDriver)。
- 将ChromeDriver推送到设备:
adb push chromedriver /data/local/tmp/。 - 设置端口转发:
adb forward tcp:9515 tcp:9515。 - 在设备上启动ChromeDriver服务:
adb shell /data/local/tmp/chromedriver --port=9515。 - 修改代码连接ChromeDriver端口:
var options = new ChromeOptions(); options.AddAdditionalChromeOption("androidPackage", "com.android.chrome"); // 连接ChromeDriver的本地转发端口 Uri url = new Uri("http://127.0.0.1:9515"); _driver = new RemoteWebDriver(url, options);
三、其他排查点
- Chrome与ChromeDriver版本不匹配:设备上的Chrome版本必须和使用的ChromeDriver版本一一对应,否则会直接连接失败。可在设备Chrome设置中查看版本,下载对应ChromeDriver。
- 设备权限问题:确保设备已开启USB调试,且连接电脑时弹出的授权窗口已点击允许。
- 代码冗余参数干扰:移除
isRealMobile、network这类非标准选项,这些是云测试平台的参数,本地测试不需要;DeviceName必须填adb devices输出的真实ID,不能用自定义名称。 - 防火墙拦截:暂时关闭Windows防火墙,测试是否是防火墙阻止了端口通信。
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

