2017-02-01 36 views
0

我想測試我公司的瀏覽器的自動提示俄羅斯語言,UIAutomator功能和我打一個障礙:有沒有辦法使用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

我試過這個並且工作。

/** 
* @@Test comment [email protected]@ 
* 
* @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,因爲它似乎是該工具的一個有趣用例。

culebratester screenshot cyrillic

的步驟是:

  1. 開始記錄測試(生成Java UiAutomator,還可以生成Python和其他語言)
  2. 按Home
  3. 選擇快速搜索框
  4. 按下鍵
  5. 選擇其中一條建議

您將能夠創建一個使用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) 

但這並不像第一個解決方案那樣獨立於設備。

希望這可以幫助你。

+0

謝謝!最上面的代碼不能馬上運行,但這可能是由於我的設備上安裝的鍵盤與您的設備不同。爲了得到正確的包裝,我會花一些時間試試庫萊布拉測試儀。 –

相關問題