android apk与uiautomator2传参总结

作者: 早起有虫吃 | 来源:发表于2017-11-16 18:21 被阅读297次

    最近在研究android apk与uiautomator2脚本的传参,以此达到测试apk与脚本之间的交互。
    对此我总结了如下的方案:

    1.通过文件传值,写文件需要在manifest文件中添加文件相关权限:
    若apk传值到脚本中,可以在apk中写入参数到文件中,然后uiautomator脚本读取文件数据
    若脚本传值到apk中,可以在uiautomator脚本写入参数到文件中,然后apk中读取文件数据
    csv文件工具类如下:

    package com.example.administrator.yallatool.utils;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by Administrator on 2017/8/9.
     */
    
    public class FileUtils {
    
        // 判断文件是否存在,不存在则创建文件
        public static void judeDirExists(File file) {
    
            if (file.exists()&&file.isDirectory()) {
                    System.out.println("dir exists");
    
            } else {
                System.out.println("dir not exists, create it ...");
                file.mkdir();
            }
    
        }
        //写入到csv中
        public void writeTofile(String filepath,String content){
            String path=filepath;
            File writepath=new File(path);
            FileWriter writer=null;
            try {
                //"E:\\YallaTest\\YallaResult.csv"
                // 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
                writer = new FileWriter(writepath,false);
                writer.write(content);
                //\r\n表示换行
                //,表示换一格
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if(writer != null){
                        writer.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    //读取文件
        public String read(String path) throws IOException{
            BufferedReader br = new BufferedReader(new FileReader(path));
            StringBuffer sb = new StringBuffer();
            String line = null;
            while((line= br.readLine()) != null) {
                sb.append(line);
            }
    
            System.out.println(sb.toString()); //sb包含所有文本内容
            return sb.toString();
        }
    
    }
    

    2.通过Bundle传值(apk传值给脚本)
    apk运行脚本时执行如下shell命令,-es表示传过去的参数为String类型,icon表示传过去的键,QQ表示传过去的值

    adb shell am instrument -w -r -e debug false -es icon QQ -e class com.example.administrator.yalla_autotest.Testgetarg com.example.administrator.yalla_autotest.test/android.support.test.runner.AndroidJUnitRunner

    在脚本代码中如下方法获取传过来的参数:

    public String getBundle(){
            Bundle b=InstrumentationRegistry.getArguments();
            String values= (String) b.get("icon");
            return values;
        }
    

    3.通过广播传值(脚本传值给apk)
    脚本执行am命令发送广播:
    adb shell am broadcast -a com.example.administrator.yallatool --es data aa

    在apk里编写一个广播接受者,获取参数代码如下:

    package com.example.administrator.yallatool.BroadcastReceive;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    
    import com.example.administrator.yallatool.Activity.MainActivity;
    
    public class MyReceiver extends BroadcastReceiver {
        public MyReceiver() {
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO: This method is called when the BroadcastReceiver is receiving
            // an Intent broadcast.
            //adb shell am broadcast -a com.example.administrator.yallatool --es data aa
            String content=intent.getStringExtra("data");
            CharSequence string="收到信息:"+content;
            Toast.makeText(context, string,Toast.LENGTH_LONG).show();
      
        }
    }
    

    4.socket传值(脚本和apk互相穿参):
    eclipse编写socket代码,接收信息,并发送消息至所有连接的客户端:
    脚本和apk都连接上socket即可实现消息互传

    5.android的其他存储方式也可以作为穿参的方案,如sqlite,sharedpreferences,实现方式和第一种类似,在这里就不做详细描述了

    相关文章

      网友评论

        本文标题:android apk与uiautomator2传参总结

        本文链接:https://www.haomeiwen.com/subject/qrhrvxtx.html