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

Node.js+WebdriverIO+Cucumber下如何动态修改Appium capabilities?

动态修改Appium Android语言/地区的可行方案

首先说明失效原因:

Appium的capabilities仅在会话初始化阶段传递给服务端生效,会话建立完成后修改本地driver的capabilities属性、调用setCapability方法都不会同步到服务端,也不会触发设备配置变更,因此之前的操作无法生效。

下面提供两种可落地的实现方式:

方案1:使用Appium UIAutomator2内置扩展命令(无需重启会话,修改应用级语言)

该方案适用于UIAutomator2驱动v2.12.0及以上版本,仅修改目标应用的语言环境,不影响系统全局设置,切换后立即生效:

Given(/^Device lang en$/, async () => {
  await driver.execute('mobile: changeAppLocale', {
    language: 'en',
    locale: 'US' // 可根据需求替换为对应国家码,如英国对应GB
  });
  // 可选添加等待,确保应用完成语言资源加载
  await driver.pause(1000);
});

方案2:通过ADB命令修改系统全局语言(适配所有Android版本)

如果需要修改系统全局语言,或者你的UIAutomator2版本不支持上述扩展命令,可以调用ADB命令执行修改,修改后重启应用即可生效:

Given(/^Device lang en$/, async () => {
  // Android 7.0+系统修改全局语言命令
  await driver.execute('mobile: shell', {
    command: 'am',
    args: ['set-locale', 'en', 'US']
  });
  // 重启应用使新语言配置生效,替换为你测试应用的包名
  await driver.terminateApp('com.your.demo.app');
  await driver.activateApp('com.your.demo.app');
  await driver.pause(2000);
});

注意事项

  • 使用ADB修改系统语言需要设备开启开发者选项、USB调试权限,部分定制ROM可能需要额外权限
  • 若你的测试场景是不同用例集需要固定不同语言,也可以直接配置多套capabilities,分别启动独立会话执行测试,无需运行时动态切换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:06:03