Android UiAutomator:如何使用UiAutomator实现粘贴操作?

Android UiAutomator:如何使用UiAutomator实现粘贴操作?,android,android-uiautomator,uidevice,Android,Android Uiautomator,Uidevice,我需要在EditText中输入非ASCII字符(如汉字),我发现该方法无法完成此工作 因此,我得到了一种方法:将字符复制到剪贴板,然后将其粘贴到编辑文本。现在我已经实现了,但是不知道如何使用代码实现粘贴操作 我在网上搜索,发现可以用热键实现操作:“菜单”+“v” 所以我转到api,找到了一个方法:pressKeycode(),但它一次只能按一个键代码 有人知道如何使用uiautomator同时按下“菜单”和“v”键吗?或者有一些原始代码可以实现这一点 非常感谢 您还有pressMenu()方法

我需要在EditText中输入非ASCII字符(如汉字),我发现该方法无法完成此工作

因此,我得到了一种方法:将字符复制到剪贴板,然后将其粘贴到编辑文本。现在我已经实现了,但是不知道如何使用代码实现粘贴操作

我在网上搜索,发现可以用热键实现操作:“菜单”+“v”

所以我转到api,找到了一个方法:pressKeycode(),但它一次只能按一个键代码

有人知道如何使用uiautomator同时按下“菜单”和“v”键吗?或者有一些原始代码可以实现这一点

非常感谢

您还有pressMenu()方法


我想您也可以用您复制的文本设置文本。

我已经解决了这个问题。见下面的代码:

public class MyTest  extends TestCase{

    /**
    * Paste text to an EditText feild which is currentlly get focused.
    *
    * @param: text the text(Non-ASCII) you want to paste into EditText feild. 
    */
    IClipboard clipboard = IClipboard.Stub.asInterface(ServiceManager.getService(Context.CLIPBOARD_SERVICE));
    IInputManager iInputManager = IInputManager.Stub.asInterface(ServiceManager.getService(Context.INPUT_SERVICE)); 
    private void pastText(String text) throws UiObjectNotFoundException{
        try {
            //copy the text to clipboard.
            clipboard.setPrimaryClip(ClipData.newPlainText("NonASCII", text), text);   

            //inject event: press Menu + V         
            iInputManager.injectInputEvent(
                new KeyEvent(android.os.SystemClock.uptimeMillis(), 
                             android.os.SystemClock.uptimeMillis(), 
                             KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MENU, 0),1); 
            iInputManager.injectInputEvent(
                new KeyEvent(android.os.SystemClock.uptimeMillis(), 
                             android.os.SystemClock.uptimeMillis(), 
                             KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_V, 0),1);              
            iInputManager.injectInputEvent(
                new KeyEvent(android.os.SystemClock.uptimeMillis(), 
                             android.os.SystemClock.uptimeMillis(), 
                             KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MENU, 0),1);
            iInputManager.injectInputEvent(
                new KeyEvent(android.os.SystemClock.uptimeMillis(), 
                             android.os.SystemClock.uptimeMillis(), 
                             KeyEvent.ACTION_UP, KeyEvent.KEYCODE_V, 0),1);              

            //After "Menu"+"V" pressed, A "Menu" will show if exist in current Activicy.
            //Then press menu again, to make it down just for bug fixing.
            sleep(300);
            iInputManager.injectInputEvent(
                new KeyEvent(android.os.SystemClock.uptimeMillis(), 
                             android.os.SystemClock.uptimeMillis(), 
                             KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MENU, 0),1); 
            iInputManager.injectInputEvent(
                new KeyEvent(android.os.SystemClock.uptimeMillis(), 
                             android.os.SystemClock.uptimeMillis(), 
                             KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MENU, 0),1);

        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

}
谢谢。

这对我很有用:


UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())。按KEYCODE(KeyEvent.KEYCODE\u V,KeyEvent.META\u CTRL\u MASK)

谢谢您的回复。但是setText()方法只能接受ASCII字符。如你所知,我必须测试其他语言,如中文(zh CN),因此我得到了一种方法:将字符复制到剪贴板,然后将其粘贴到编辑文本中。现在我已经完成了复制工作,但不知道如何使用命令粘贴。很抱歉问题描述不好,我已经丰富了。-:)嗯。。。我真的不知道如何同时按下两个键,我也不熟悉使用非ASCII字符。但是,我猜如果你长按EditText字段,就会出现一个弹出窗口,其中的选项是粘贴,你可以使用它。在这一点上,我从用户的角度考虑,这就是UiAutomator应该模拟的。所以我想这应该行得通。如果它确实告诉我并编辑了我的答案:)是的,它起作用了。我认为你是对的。我们应该在EditText上模拟长按,等待粘贴按钮出现,然后按下它。但是很难按下粘贴按钮,因为在uiautomatorviewer中找不到粘贴按钮:(我认为这可以帮助您