我正试图用UIAutomator测试我公司浏览器的俄语自动推荐功能,并且遇到了障碍:
俄语字母没有KeyEvent.KeyCode_ *代码,UiDevice.pressKeyCode(KeyEvent.KEYCODE_LANGUAGE_SWITCH)
似乎没有帮助。我在KeyEvent类中找到的文档似乎表明我只需要使用与英文字母相同的KeyCodes,但奇怪的是它们将被映射到其他语言的字母。然而,这似乎并没有真正发生,因为当我尝试时,我仍然看到英文字母出现。
通常使用俄语我只使用UiObject2.setText(...)但该方法不会触发自动建议。
我已经尝试深入研究UiDevice.pressKeyCode正在做什么,并尝试了几个解决方法,例如:
KeyEvent eventsб2 = new KeyEvent(SystemClock.currentThreadTimeMillis(), "б", KeyCharacterMap.VIRTUAL_KEYBOARD, 0);
Instrumentation.sendKeySync(eventsб2);
或
KeyEvent[] eventsа = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD).getEvents(new char[] {'a'});
Instrumentation.sendKeySync(eventsа[0]);
但他们要么不输入信件,要么就需要INJECT_EVENTS权限抛出许可例外。总的来说,我觉得我在黑暗中磕磕绊绊,并且会喜欢一些关于如何继续的建议。
答案 0 :(得分:0)
我试过这个并且工作了。
/**
* @@Test comment here@@
*
* @throws Exception
*/
@Test
public void culebraGeneratedTest_CyrillicKeyBoardAndSelectSuggestion() throws Exception {
mDevice.pressHome();
mDevice.findObject(By.res("com.android.quicksearchbox:id/search_widget_text").clazz("android.widget.TextView").text(Pattern.compile("")).pkg("com.android.quicksearchbox")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
mDevice.findObject(By.desc("й").clazz("com.android.inputmethod.keyboard.Key").text(Pattern.compile("")).pkg("com.android.inputmethod.latin")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
(new UiScrollable(new UiSelector().resourceId("com.android.quicksearchbox:id/suggestions").index(1).packageName("com.android.quicksearchbox"))).getChildByText(new UiSelector().className("android.widget.RelativeLayout").packageName("com.android.quicksearchbox"), "йемен", true).click();
}
我必须承认我不懂俄语或者我在西里尔语键盘上选择的内容,所以请耐心等待。
为了生成此测试,我使用了CulebraTester,因为它似乎是该工具的一个有趣的用例。
步骤是:
您可以在python中使用AndroidViewClient/culebra创建类似的测试,但因为此工具基于从uiautomator dump
获得的信息,所以它无法检测到键盘,但您也可以使用DIP触摸它们
vc.dump(window=-1)
vc.findViewByIdOrRaise("com.android.quicksearchbox:id/search_widget_text").touch()
vc.sleep(_s)
vc.dump(window=-1)
device.touchDip(15.33, 393.33, 0)
但这并不像第一个解决方案那样独立于设备。
希望这会对你有所帮助。