Appium配置BrowserStack时遇“无法启动新会话”错误求助
问题
在Mac M1设备上执行BrowserStack的Appium入门脚本时,抛出SessionNotCreatedException,无法创建新会话。
测试代码
public class BrowserStackSampleTest { public static final String USERNAME = "browserStackUserName"; public static final String AUTOMATE_KEY = "browserStackAccessKey"; public static final String URL = "https://" + USERNAME + ":" + AUTOMATE_KEY + "@hub.browserstack.com/wd/hub"; @Test public void setUp() throws MalformedURLException { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("os_version", "13.0"); capabilities.setCapability("device", "Samsung Galaxy S23"); capabilities.setCapability("app", "bs://url_provided_by_browserStack"); capabilities.setCapability("project", "PCM_Krammer"); capabilities.setCapability("name", "LoginTest"); capabilities.setCapability("browserstack.appium_version", "1.22.0"); capabilities.setCapability("browserstack.local", "true"); AndroidDriver driver = new AndroidDriver(new URL(URL), capabilities); driver.quit(); } }
抛出异常
org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
环境信息
- 设备:Mac M1
- 主机信息:
host: 'tps-MacBook-Pro.local', ip: '10.5.49.103' - pom.xml依赖均为最新版本
排查与解决方案
1. 验证BrowserStack本地代理配置
因为启用了browserstack.local=true,Mac M1的arm64架构可能导致本地代理启动失败:
- 确认安装的BrowserStack Local二进制文件为arm64适配版本,不要使用x86版本
- 手动启动代理并确认正常运行后再执行测试:
./BrowserStackLocal --key YOUR_AUTOMATE_KEY - 脚本中添加等待逻辑,确保代理连接成功后再初始化Driver
2. 核对Capability配置
- App URL有效性:确认
bs://url_provided_by_browserStack是BrowserStack控制台中已成功上传的应用URL - Appium版本兼容性:
1.22.0版本较老旧,与最新客户端依赖可能存在冲突,建议移除该Capability让BrowserStack自动适配,或改为平台推荐的稳定版本(如2.2.0) - 设备与OS匹配:核对BrowserStack设备列表,确认Samsung Galaxy S23是否支持13.0版本的OS
3. 网络与权限检查
- 临时关闭Mac防火墙或VPN,排查是否存在网络连接拦截
- 验证Hub地址连通性:
ping hub.browserstack.com - 确认BrowserStack账号处于活跃状态,无额度耗尽或权限限制
4. 依赖版本适配
Mac M1架构可能存在依赖冲突,即使pom依赖为最新版本:
- 建议使用Selenium 4.x + Appium Java Client 8.x的组合,确保与BrowserStack Hub兼容
- 执行
mvn dependency:tree排查是否存在新旧版本依赖冲突
5. 代码细节修正
- 将
@Test注解的方法名改为testLogin这类符合测试规范的名称,避免与setUp(通常用@Before注解)混淆 - 初始化
AndroidDriver时指定泛型AndroidDriver<MobileElement>,避免类型警告 - 添加异常捕获打印详细日志,便于定位问题:
try { AndroidDriver<MobileElement> driver = new AndroidDriver<>(new URL(URL), capabilities); driver.quit(); } catch (SessionNotCreatedException e) { System.err.println("详细错误:" + e.getMessage()); e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者Taimoor Pasha
相关产品推荐
相关产品推荐

