2016-06-10 67 views
4

我可以輸入文字到adb shell input text "blahblah"就好了。文本顯示出來......坐在那裏。如何使用adb shell輸入文本輸入OK鍵?

我可以在確定按鈕的座標上點擊一下,實際上文本會在我輸入的任何對話框中生效 - 如果我猜屏幕方向正確,則適應當前分辨率,適應當前鍵盤變體等等。非常笨重。

是否有一些神奇的字符或鍵碼或其他一些簡潔的方法讓shell執行等同於按下「OK」的操作?

example

在上面的截圖,它在右下角的綠色->| 圖標。它有時會隨着使用的確切字段而變化,但含義總是相同的:關閉鍵盤並繼續。

+0

哪個確定按鈕?它是您寫的一個應用程序,還是您下載的某個應用程序? – TDG

+1

@TDG:操作系統提供的虛擬鍵盤上的標準確認按鈕。無論何時遇到文本輸入,它都會顯示在所有應用程序和系統配置中。根據上下文的不同,圖標可能會發生變化 - 如果您正在搜索鏡頭, - > |'如果您輸入了一些數據,[密碼]字段中的[確定],但含義相同,則完成文本輸入並繼續。 –

+0

(此外,位置相同,鍵盤右下角) –

回答

2

您可以使用AndroidViewClient/culebra,忘了方向,不同的屏幕尺寸等

舉個例子,假設我們要輸入文字,並按下OK在此對話框(API演示的一部分)

enter image description here

只需運行

culebra -uGo myscript.py 

當贏道瓊斯指數顯示,點擊進入,輸入文字,然後點擊確定,該腳本會自動生成

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
''' 
Copyright (C) 2013-2016 Diego Torres Milano 
Created on 2016-06-10 by Culebra v11.5.8 
         __ __ __ __ 
        /\/\/\/\ 
____________________/ __\/ __\/ __\/ __\_____________________________ 
___________________/ /__/ /__/ /__/ /________________________________ 
        |/\ /\ /\ /\ \___ 
        |/ \_/ \_/ \_/ \ o \ 
              \_____/--< 
@author: Diego Torres Milano 
@author: Jennifer E. Swofford (ascii art snake) 
''' 


import re 
import sys 
import os 


try: 
    sys.path.insert(0, os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src')) 
except: 
    pass 

from com.dtmilano.android.viewclient import ViewClient 

TAG = 'CULEBRA' 

_s = 5 
_v = '--verbose' in sys.argv 


kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False} 
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1) 
kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True} 
vc = ViewClient(device, serialno, **kwargs2) 
#vc.dump(window='-1') # FIXME: seems not needed 

vc.dump(window=-1) 
vc.findViewByIdOrRaise("com.example.android.apis:id/username_edit").setText(u"hello culebra!") 
vc.sleep(_s) 
vc.dump(window=-1) 
vc.findViewWithTextOrRaise(u'OK').touch() 

運行時,它會在文本設置爲hello culebra!和觸摸OK。然後,您可以根據需要調整生成的腳本。

CulebraTester

CulebraTester是一個新的實現庫萊布拉作爲被測設備上運行的服務。 現在正在進行內測測試,但如果您有興趣參與,您可以在culebra.dtmilano.com(查詢支持)找到選擇參加表格。

其功能之一是能夠檢測虛擬鍵盤並將其視爲與其他視圖相同。

enter image description here

這張截圖顯示觸摸,B,C後生成的測試,以及下一步(這是你正在尋找)。

生成的測試是這樣

/** 
* @@Test comment [email protected]@ 
* 
* @throws Exception 
*/ 
@Test 
public void culebraGeneratedTest() throws Exception { 
    mDevice.findObject(By.clazz(Pattern.compile(".*")).desc("A").pkg("com.android.inputmethod.latin")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT); 
    mDevice.findObject(By.clazz(Pattern.compile(".*")).desc("b").pkg("com.android.inputmethod.latin")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT); 
    mDevice.findObject(By.clazz(Pattern.compile(".*")).desc("c").pkg("com.android.inputmethod.latin")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT); 
    mDevice.findObject(By.clazz(Pattern.compile(".*")).desc("Next").pkg("com.android.inputmethod.latin")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT); 
} 

,你可以編譯,安裝和運行任何其他UiAutomator測試。

作爲一個附加的例子,這個截圖顯示瞭如何爲你懸停在樹中的虛擬鍵盤瀏覽他們在設備代表性

enter image description here

+2

這不是虛擬鍵盤上的OK。請參閱我的澄清編輯。 –

+1

我支持。 AndroidViewClient依靠'uiautomator dump'來獲取屏幕上的視圖,並且它不包括鍵盤。但是,[CulebraTester](http://culebra.dtmilano.com/)提供了一種不同的方法,並且可以訪問鍵盤。 CulebraTester目前正在進行私人測試,並要求在設備上安裝應用程序。有一個**選擇加入表單**參加該頁面末尾的程序。 –

+0

如果有人提供了一些更簡單的方法,我會等待。例如,我已經看到有人在文本中跳過空格鍵(簡單的''不起作用),然後有人在字符串中使用了'%s',這將被'輸入替換爲空格'命令..你的腳本肯定會起作用,但這是一種非常迂迴的做法,可以通過單個shell命令來實現*應該* ... –

8

我相信你正在尋找adb shell input keyevent 66突出。
keyevent用於按下虛擬鍵盤按鍵,而代碼66用於ENTER按鍵。
你可以在這裏找到list of codes

編輯 鍵和代碼之間的映射可以在/system/usr/keylayout/qwerty.kl找到。你可以做adb shell cat /system/usr/keylayout/qwerty.kl並查看你需要的代碼。

+0

對於單行輸入來說,這一切都很好,但對於「換行」是合法輸入(例如,SMS條目)的輸入而言,它不起作用。這些具有單獨的「輸入」和「確認」按鈕。 –

+0

然後,你必須找到每個按鈕的正確的代碼。 – TDG

+0

好的。我該怎麼做呢? –

-1

最簡單的方法是使用UiAutomator,但下面的方法很簡單,這會有幫助嗎? 如果您的設備相同,請嘗試 - Android Record N Play。這將記錄屏幕,你可以稍後玩。還爲您的操作保存了一個shell腳本。如果您想在沒有該工具的情況下獨立播放(ui操作),請先使用該工具錄製,然後撥打adb shell sh script_name進行播放。