背景:
公司的 app 有海外版本 14 个语言要求做 UI 上的自动化测试 ,我用 appium 搭了个 web 平台,基本功能也已经实现。但有个新需要 要求测试过程中单台手机自动切换语言 ,对于这点各位有不有比较好的实现思路。
我的思路是用 1 appium 调用第三方语言设置软件进行修改【不想用其他框架】2 可以用 adb 命令修改语言设置相关的项,这个好像要重启才能生效 感觉两种方式都不是很理想 对这块不是很清楚。求有相关经验的给点思路
额。。。是为了测试 app 在不同系统下的显示?先直接静态扫描多国语言的 config 呗?
我记得 adb shell getprop 中其中一项是语言配置,通过 setprop 命令能设置,不过是重启生效,你可以试试
来 14 台手机就好了(认真脸)
认真脸 什么意思 我百度了 呵呵
在 14 个 string 文件中,找出每一句最长的,然后生成一份新的 string 文件,添加到测试包中,然后只验这一个就好了。
最糟心的不是多语言,而是多语言适配小屏幕机型~~
我的问题也包含小屏幕 纠结。
切换语言可以用这个方法。自己写个 apk,然后广播(adb shell am broadcast -a xxx -es xxx xxx)传参。
//切换系统语言
public static void updateSystemLanguage(String language,String country) {
Locale updateLocale = getLocale(language,country);
try {
Object objIActMag, objActMagNative;
Class clzIActMag = Class.forName("android.app.IActivityManager");
Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");
Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault");
// IActivityManager iActMag = ActivityManagerNative.getDefault();
objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
// Configuration config = iActMag.getConfiguration();
Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");
Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);
config.locale = updateLocale;
// iActMag.updateConfiguration(config);
// 此处需要声明权限:android.permission.CHANGE_CONFIGURATION
// 会重新调用 onCreate();
Class[] clzParams = { Configuration.class };
Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod(
"updateConfiguration", clzParams);
mtdIActMag$updateConfiguration.invoke(objIActMag, config);
} catch (Exception e) {
e.printStackTrace();
}
}
不过还是建议人肉,这个国际化的不仅仅涉及到静态代码扫描(如 string.xml 文件的检查),还是涉及到动态代码扫描,这个就不好搞了。
#13 楼 @blackstone 你切着试试看,看能不能切换成功。
有些情况是显示只有两三种,实际上你还是可以切换多种语言的。
手机上收到广播了
#16 楼 @blackstone 不要带""试试
#16 楼 @blackstone country 不应该是中文的。你参照这个链接http://blog.csdn.net/qiuhu0793/article/details/8689685
比如:language zh country CN
#21 楼 @blackstone 加你 q,私聊
我的锅 ,忘记更改系统设置必须要有系统签名的相关权限的。
http://blog.csdn.net/wqhjfree/article/details/9125997
http://www.devstore.cn/essay/essayInfo/5738.html
#24 楼 @blackstone 请问第二种思路具体是用什么方法?我尝试用 setprop 修改 build.prop 的 persist.sys.language 和 persist.sys.country 两个选项并重启手机,但是并没有生效
请问一下后面怎么解决多语言切换的问题,我这边试了 adb 的命令切不了,手机没 root 的