通过Android API上的Appium功能更改语言< = 23

时间:2018-03-23 12:00:17

标签: android testing automated-tests appium ui-automation

我正在使用Appium在Android设备上编写自动化测试。我需要设置不同的语言并使用语言区域设置功能进行设置,并将其设置如下:

capabilities["language"] = "sv"
capabilities["locale"] = "SE"

它适用于Android Emulators(v 6.0 / API 23,v7.1.1 / API 25)。它适用于OS 7.0(API 24)及更高版本的不同实际设备。 它不适用于使用API​​ 23及更低版本的实际设备。我总是收到一个错误:

  

selenium.common.exceptions.WebDriverException:消息:未知   处理命令时发生服务器端错误。原版的   错误:无法设置语言:sv和country:SE

我尝试了不同的组合,比如在sv_SE sv-SE等设置的语言环境,但没有任何帮助。

日志:

[Appium] Creating new AndroidDriver (v1.37.0) session
[Appium] Capabilities:
[Appium]   app: [...]
[Appium]   language: sv
[Appium]   locale: SE
[Appium]   appWaitActivity: [...] 
[Appium]   deviceName: [...]
[Appium]   platformVersion: 5.0.1
[Appium]   platformName: Android 
[BaseDriver] Session created with session id: df43e233-b4fe-47e8-8d27-c8c7eff12a69
[AndroidDriver] Getting Java version
[AndroidDriver] Java version is: 1.8.0_161
[ADB] Checking whether adb is present
[AndroidDriver] Retrieving device list
[ADB] Trying to find a connected android device
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[AndroidDriver] Looking for a device with Android '5.0.1'
[ADB] Setting device id to 6bfdb679
[ADB] Getting device platform version
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","getprop","ro.build.version.release"]
[ADB] Current device property 'ro.build.version.release': 5.0.1
[AndroidDriver] Using device: 6bfdb679
[ADB] Checking whether adb is present
[ADB] Setting device id to 6bfdb679
[BaseDriver] Using local app [...]
[AndroidDriver] Checking whether app is actually present
[AndroidDriver] Starting Android session
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","wait-for-device"]
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","echo","ping"]
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","getprop","ro.build.version.sdk"]
[ADB] Current device property 'ro.build.version.sdk': 21
[ADB] Device API level: 21
[ADB] Device API level: 21
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","getprop","persist.sys.language"]
[ADB] Current device property 'persist.sys.language': en
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","getprop","persist.sys.country"]
[ADB] Current device property 'persist.sys.country': GB
[ADB] Device API level: 21
[ADB] Setting device property 'persist.sys.language' to 'sv'
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","setprop","persist.sys.language","sv"]
[ADB] Device API level: 21
[ADB] Setting device property 'persist.sys.country' to 'SE'
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","setprop","persist.sys.country","SE"]
[ADB] Rebooting the device in order to apply new locale via 'setting persist.sys.locale' command.
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","stop"]
[ADB] Device API level: 21
[ADB] Setting device property 'sys.boot_completed' to '0'
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","setprop","sys.boot_completed",0]
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","start"]
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","getprop","sys.boot_completed"]
[ADB] Current device property 'sys.boot_completed': 1
[ADB] Device API level: 21
[ADB] Device API level: 21
[ADB] Getting connected devices...
[ADB] Unable to unroot adb daemon: 'Command ''C:\\Program Files (x86)\\Android\\android-sdk\\platform-tools\\adb.exe' unroot' exited with code 1'. Continuing
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","getprop","persist.sys.language"]
[ADB] Current device property 'persist.sys.language': en
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","getprop","persist.sys.country"]
[ADB] Current device property 'persist.sys.country': GB
[AndroidDriver] Shutting down Android driver
[AndroidDriver] Called deleteSession but bootstrap wasn't active
[ADB] Getting connected devices...
[ADB] 1 device(s) connected
[ADB] Running 'C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","6bfdb679","shell","am","force-stop","io.appium.unlock"]
[AndroidDriver] Not cleaning generated files. Add `clearSystemFiles` capability if wanted.
[MJSONWP] Encountered internal error running command: Error: Failed to set language: sv and country: SE

如何使用Appium在较低的API版本上更改设备语言?

2 个答案:

答案 0 :(得分:1)

实际设备不支持每official Appium docs

语言(仅限Sim / Emu)为模拟器/模拟器设置的语言。在Android上,仅适用于API级别22及以下

示例:fr

区域设置(仅限Sim / Emu)为模拟器/模拟器设置的区域设置。

示例:fr_CA

它可能已经开始用于运行OS 7+的一些真实设备,但这更像是谷歌的奖励,非常确定它不会为每个人工作。

答案 1 :(得分:0)

https://github.com/appium/io.appium.settings怎么样? 抱歉,我没有尝试过,但是它似乎支持不受API级别限制的更改语言环境。