如何使用adb shell输入文本输入OK键?

时间:2016-06-10 17:43:21

标签: android adb

我可以将文本输入到Intent i = new Intent(SourceActiviti.this,TargetActivity.class); i.putExtra("id","string data"); startActivity(i) 的对话框中。文字出现了......就在那里。

我可以在OK按钮的坐标上发送一个水龙头,实际让文字在我输入的任何对话框中生效 - 如果我认为屏幕方向正确,适应当前分辨率,适应当前的键盘变体和等等。非常笨重。

是否有一些魔法字符或键码或其他一些巧妙的方法让shell执行相当于按下" OK"?

example

在上面的屏幕截图中,它是绿色Intent i = new Intent(SourceActiviti.this,TargetActivity.class); String strData = i.getStringExtra("id");  右下角的图标。它有时会随着使用的确切字段而变化,但含义总是相同的:关闭键盘然后继续。

3 个答案:

答案 0 :(得分:9)

我相信你正在寻找adb shell input keyevent 66 keyevent用于按下虚拟键盘键,代码66用于ENTER键 你可以在这里找到list of codes

修改 密钥和代码之间的映射可以在/system/usr/keylayout/qwerty.kl找到。您可以执行adb shell cat /system/usr/keylayout/qwerty.kl并查看所需的代码。

答案 1 :(得分:2)

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

例如,我们要输入文字并在此对话框中按确定(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!并触摸确定。然后,您可以根据需要调整生成的脚本。

CulebraTester

CulebraTester是 culebra 的新实现,作为在被测设备上运行的服务。 它目前处于封闭式测试阶段,但如果您有兴趣参与,可以在culebra.dtmilano.com找到选择加入表单(在支持下查看)。

它的一个功能是能够检测虚拟键盘并将其视为与其他视图相同。

enter image description here

此屏幕截图显示了触摸A,b,c和Next(这是您正在寻找的)后生成的测试。

生成的测试就像这样

/**
 * @@Test comment here@@
 *
 * @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 :(得分:-1)

最好的方法是使用UiAutomator,但是下面的方法很简单,这会有帮助吗? 如果您的设备相同,请尝试 - Android Record N Play。这将记录屏幕,您可以稍后播放。还为您的操作保存了一个shell脚本。如果您想在没有该工具的情况下独立播放(ui动作),请先使用该工具进行录制,然后拨打adb shell sh script_name进行播放。