今天继续分享几个UiAutomator2.0中的小技巧,在移动端自动化测试中,有时候需要用到从黏贴板上获取内容,比如在界面上点了或触发了复制操作,后续想把复制的内容黏贴出来该如何操作?一般有2种方式:
- 第一种适合输入框、文本框等输入型控件,可以直接模拟键盘输入Ctrl+V,这样就把内容黏贴到对应控件了;
- 第二种我要获取的内容并不需要输入到某个控件,仅仅是就想获得之前复制的内容,这时候就适合操作黏贴板来获得复制的内容了。
代码很简单,如下:
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();
}
需要特别说明的是:
- 在创建ClipboardManager 对象时需要传入一个Context对象,这个context不能用测试的context,而必须用测试应用的context,下面给出对应的定义差异:
Context mContext = InstrumentationRegistry.getContext(); //当前测试的Context
Context mAppContext = InstrumentationRegistry.getTargetContext(); //当前测试应用的Context
-
上面操作黏贴板的代码不能直接放在主线程,不然会抛出下面的异常,所以需要自己去开个线程,将操作黏贴板的代码放在新开的线程中即可。
对于黏贴板的复制操作,上面的都搞定了,那就灰常简单了,至于要不要放到子线程里面,还木有尝试过,有需要的童鞋可以尝试一下。
ClipboardManager myClipboard = (ClipboardManager)mAppContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData myClip = ClipData.newPlainText("text", "your copy content");
myClipboard.setPrimaryClip(myClip);
原文来自下方公众号,转载请联系作者,并务必保留出处。
想第一时间看到更多原创技术好文和资料,请关注公众号:测试开发栈