UiAutomator2.0中实现黏贴板操作

今天继续分享几个UiAutomator2.0中的小技巧,在移动端自动化测试中,有时候需要用到从黏贴板上获取内容,比如在界面上点了或触发了复制操作,后续想把复制的内容黏贴出来该如何操作?一般有2种方式:

  1. 第一种适合输入框、文本框等输入型控件,可以直接模拟键盘输入Ctrl+V,这样就把内容黏贴到对应控件了;
  2. 第二种我要获取的内容并不需要输入到某个控件,仅仅是就想获得之前复制的内容,这时候就适合操作黏贴板来获得复制的内容了。

代码很简单,如下:

public static String getClipboardContent(){
        Handler handler = new Handler(Looper.getMainLooper());
        final StringBuffer data = new StringBuffer();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                ClipboardManager myClipboard = (ClipboardManager)mAppContext.getSystemService(Context.CLIPBOARD_SERVICE);
                ClipData clipData = myClipboard.getPrimaryClip();
                if (clipData != null && clipData.getItemCount() > 0) {
                    // 从数据集中获取(粘贴)第一条文本数据
                    CharSequence text = clipData.getItemAt(0).getText();
                    data.append(text.toString());
                }
            }
        }, 500);
        sleep(800);//Thread.sleep(800)的异常封装而已
        return data.toString();
    }

需要特别说明的是:

  1. 在创建ClipboardManager 对象时需要传入一个Context对象,这个context不能用测试的context,而必须用测试应用的context,下面给出对应的定义差异:
Context mContext = InstrumentationRegistry.getContext(); //当前测试的Context
Context mAppContext = InstrumentationRegistry.getTargetContext(); //当前测试应用的Context
  1. 上面操作黏贴板的代码不能直接放在主线程,不然会抛出下面的异常,所以需要自己去开个线程,将操作黏贴板的代码放在新开的线程中即可。


    UiAutomator2.0中实现黏贴板操作_第1张图片

对于黏贴板的复制操作,上面的都搞定了,那就灰常简单了,至于要不要放到子线程里面,还木有尝试过,有需要的童鞋可以尝试一下。

ClipboardManager myClipboard = (ClipboardManager)mAppContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData myClip = ClipData.newPlainText("text", "your copy content");
myClipboard.setPrimaryClip(myClip);

原文来自下方公众号,转载请联系作者,并务必保留出处。
想第一时间看到更多原创技术好文和资料,请关注公众号:测试开发栈

你可能感兴趣的:(UiAutomator2.0中实现黏贴板操作)