zoukankan      html  css  js  c++  java
  • Ai-Bot 之AndroidBot方法介绍

     1.创建/删除AndroidBot
    (1)主函数示例
    const androidBot = require('AndroidBot');//引用AndroidBot模块
    async function mian()
    {
    let devicesId = "da32u4";
    let serverPort = 4723;
    let package = "com.example";
    let activity = "activityName";
    let version = "10";
    //初始化AndroidBot
    var driver = await androidBot.InitAndroidBot(devicesId, serverPort, package, activity, version);
    }
    mian();
    //AndroidBot主函数调用InitAndroidBot初始化。返回值driver调用其他函数,必须使用await关键字
    //devicesId 字符串,设备ID,Ai-Bot工具 安卓——设备列表 选项获取
    //serverPort 整型,服务端口,多进程端口必须间隔1,比如 4723、4725、4727
    //package 字符串,应用程序包名,Ai-Bot工具 安卓——查看包名 选项获取
    //activity 字符串,应用程序活动窗口名,Ai-Bot工具 安卓——查看包名 选项获取
    //version 字符串,安卓系统版本号
    //成功返回AndroidBot对象
    (2)获取/设置参数
    await driver.capabilities;
    //获取启动参数
    await driver.getSettings();
    //获取设定值
    await driver.updateSettings({ignoreUnimportantViews: true});
    //更改设定值,例如ignoreUnimportantViews: true 忽略其他不相关元素
    (3)删除会话
    await driver.deleteSession();
    //删除driver对象
    2.超时设置
    await driver.pause(5000);
    //显示等待 5秒
    await driver.setImplicitTimeout(5000);
    //设置隐式等待超时(全局生效),脚本在搜索元素时等待的时间,默认隐式等待为0ms
    await driver.setAsyncTimeout(5000);
    //设置允许由 executeAsync 执行的异步脚本的等待超时(以毫秒为单位)
    3.屏幕操作
    await driver.getOrientation();
    //获取当前设备横竖屏状态。
    //返回值 字符串 LANDSCAPE(横屏) PORTRAIT(竖屏)
    await driver.setOrientation("LANDSCAPE");
    //设置横竖屏,LANDSCAPE(横屏) PORTRAIT(竖屏)
    await driver.startRecordingScreen();
    //开始录制屏幕
    await driver.stopRecordingScreen();
    //停止录制屏幕;
    //返回值:Base64 编码的字符串
    await driver.lock();
    //锁定设备
    await driver.unlock();
    //解锁设备
    await driver.isLocked();
    //判断设备是否被锁定,如果设备已锁定,返回True,否则为false
    await driver.rotateDevice(100, 100);
    //三维旋转设备
    await driver.shake();
    //摇动设备
    4.获取系统状态
    await driver.getPerformanceDataTypes();
    //返回允许读取的系统状态的信息类型,例如cpu,内存,网络流量和电池
    await driver.getPerformanceData('my.app.package', 'cpuinfo', 5);
    //参数1,应用程序的软件包名称
    //参数2,要读取的系统状态的类型。性能数据类型(cpuinfo|batteryinfo|networkinfo|memoryinfo)
    //参数3,尝试读取的次数(可选)
    //返回 字符串数组类型,读取的系统状态信息,例如cpu,内存,网络流量和电池
    5.电源设置
    await driver.powerAC('on');
    //将电池充电器的状态设置为已连接('on')或未连接('off')(仅模拟器)延迟1秒-2秒
    await driver.powerCapacity(50);
    //设置电池百分比(仅模拟器)
    6.网络操作
    await driver.toggleAirplaneMode();
    //切换飞行模式(部分设备不可用)
    await driver.toggleData();
    //切换数据服务状态(部分设备不可用)
    await driver.toggleWiFi();
    //切换WiFi服务的状态
    await driver.toggleLocationServices();
    //切换位置服务的状态
    await driver.sendSms('123456789', 'rpa');
    //发送短信(仅模拟器)
    await driver.gsmCall('123456789', 'call');
    //拨打GSM 电话(仅模拟器)
    await driver.gsmSignal(3);
    //设置GSM 信号强大,信号强度在[0,4]范围内
    await driver.gsmVoice('home');
    //设置GSM 语音状态(仅模拟器)
    //参数1 GSM 语音状态'unregistered'(未注册), 'home'(家庭), 'roaming'(漫游),
    'searching'(搜索), 'denied'(被拒绝), 'off'(关闭),'on'(打开).
    await driver.toggleNetworkSpeed('lte');
    //设置网络速度(仅模拟器)
    //参数1 网络类型'full','gsm','edge','hscsd','gprs','umts','hsdpa','lte','evdo'
    7.键盘操作
    await driver.pressKeyCode(10);
    //按Android 设备上的特定键
    //参数一,特定按键码值,4 为返回键。其他键值,自行百度搜索
    await driver.longPressKeyCode(10);
    //长按Android 设备上的特定键
    await driver.hideKeyboard();
    //隐藏软键盘
    await driver.isKeyboardShown();
    //判断是否显示软键盘,如果显示键盘,返回True
    8.栏目相关
    await driver.openNotifications();
    //打开通知栏
    await driver.getSystemBars();
    //返回状态栏和导航栏的可见性信息
    await driver.getDeviceTime();
    //获取系统时间,返回系统时间(字符串)
    await driver.getDisplayDensity();
    //返回整型,设备pid(像素密度)
    await driver.fingerPrint(1);
    //指纹识别(仅模拟器)
    //存储在Android Keystore 系统中的指纹(从1 到10)
    9.触屏/鼠标操作
    (1)鼠标操作(部分设备不可用)
    moveTo(10, 10);
    //将鼠标移动指定元素的偏移位置
    click();
    //在当前鼠标坐标处单击任意鼠标
    doubleClick();
    //双击元素
    buttonDown();
    //当前鼠标坐标处单击并按住鼠标左键
    buttonUp();
    //释放先前按住的鼠标按钮
    (2).触屏操作
    await driver.touchAction({
    action: 'tap',
    x: 30,
    y: 20
    });
    //触摸xy指定坐标点
    await driver.touchDoubleClick(element.elementId);
    //在指定元素上触摸双击
    //参数,元素id
    await driver.touchPerform([
    { action: 'press', options: { x: 100, y: 250 }},
    { action: 'wait',options: {ms: 100}},
    { action: 'moveTo', options: { x: 300, y: 100 }},
    { action: 'release' }
    ]);
    //options:opts.element 元素id opts.x X坐标 opts.y Y坐标 opts.count Tap次数 opts.ms 毫秒
    //action:tap 点击 press 短按 longPress 长按 wait 等待 moveTo滑动 release 释放
    //此函数涵盖鼠标和触屏操作,建议使用。
    10.地理位置
    await driver.getGeoLocation();
    //获取地理位置,返回值整型 纬度 经度 高度
    await driver.setGeoLocation({latitude: "121.21", longitude: "11.56", altitude: "94.23"});
    //设置地理位置,latitude纬度 longitude经度 altitude高度
    11.系统剪切板
    await driver.getClipboard();
    //获取系统剪贴板的内容 返回值,base64编码的字符串,如果剪贴板为空,则为空 字符串
    var data = new Buffer.from("Ai-Bot").toString('base64');
    await driver.setClipboard(data, 'plaintext');
    //设置系统剪贴板的内容,仅设置plaintext纯文本
    //参数1 字符串 base64编码
    12.App操作
    await driver.startActivity("com.example", "ActivityName");
    //通过app包名称和活动名称来启动app 一般用于多个app控制
    await driver.getCurrentActivity();
    //返回当前app活动窗口的名称
    await driver.getCurrentPackage();
    //返回当前app包的名称
    await driver.installApp("D: \test.apk");
    //安装app
    await driver.removeApp("com.example.AppName");
    //通过包名 卸载应用
    await driver.isAppInstalled('com.example.AppName');
    //检查设备上是否安装了指定的应用程序,如果已安装,返回true;否则,返回 false
    await driver.launchApp();
    //如果被测应用关闭或在后台运行 ,它将启动被测应用
    await driver.background(10);
    //将此会话当前运行的应用程序发送到后台,参数时间单位为秒
    await driver.closeApp();
    //关闭应用
    await driver.reset();
    //重置此会话的正在运行的应用
    await driver.activateApp("com.example.AppName");
    //通过包名 激活应用
    await driver.terminateApp('com.example.AppName');
    //终止设备上指定的应用
    await driver.queryAppState('com.example.AppName');
    //获取设备上应用状态。
    //返回值,0未安装。1没有运行。2在后台运行或已暂停。 3在后台运行。4正在前台运行。
    await driver.getStrings("en");
    //获取应用程序所有的字符串。
    await driver.getContext();
    //获取当前app是在NATIVE还是WEBVIEW环境
    //返回当前环境的名称
    await driver.getContexts();
    //获取app环境集合
    //返回所有环境的名称(Array<String>
    await driver.switchContext(contexts[1]);
    //切换NATIVE或者WEBVIEW环境
    //参数为 要更改环境的名称
    await driver.getPageSource();
    //获取当前的App层次结构XML(应用程序)或页面源码(Web)
    //此方法获取App层次结构,便于元素定位
    13.元素操作
    (1)元素定位
    await driver.$("~content-desc");
    //元素定位支持content-desc、className、UiSelector、XPath等方式
    //content-desc,UI元素的唯一标识符,该方式需在属性前加 "~" 波浪号
    //className,类名定位,className属性值重复较多
    //UiSelector,使用UI Automator API定位,可设定多个条件定位,建议使用
    //XPath定位,效率较低,但它是通用的定位方式
    //查找元素失败元素属性elementId值为undefined,可用作是否查找成功
    示例代码:
    //content-desc
    await driver.$("~content-desc");
    //className
    await driver.$("className");
    //UiSelector1
    var selector ='new UiSelector().resourceId("resourceId")';
    await driver.$(`android=${selector}`);
    //UiSelector2
    var selector ='new UiSelector().text("text").className("className").resourceId("resourceId")';
    await driver.$(`android=${selector}`);
    //XPath
    await driver.$("//android.widget.TextView[@text='Ai-Bot']");
    (2)元素数组
    await driver.$$("className");
    //查找相同元素属性值数组,查找方式同上
    (3)元素方法
    click();
    //点击元素中心点
    addValue("Ai-Bot");
    //发送字符串到元素
    setValue("Ai-Bot");
    //设置元素值
    clearValue();
    //清除元素值
    await driver.elementSubmit(formElement.elementId);
    //提交表单元素
    //参数一,元素id
    (4)元素属性
    getText();
    //返回元素的可见文本
    getTagName();
    //获取标签名称
    getAttribute("content-desc");
    //获取元素指定属性的值,如果未设置返回 null
    isSelected();
    //判断元素是否被选择,返回值,boolean类型
    isEnabled();
    //判断当前元素是否可用,返回值,boolean类型
    isDisplayed();
    //判断当前元素是否可见,返回值,boolean类型
    getLocation();
    //获取元素在页面或屏幕上的顶点坐标,返回x、y,整型
    getSize();
    //获取元素宽和高,返回width、heigh
    await driver.getElementRect(element.elementId);
    //获取元素位置,返回x、y、width、height,矩形位置和大小
    //参数1,元素id
    getCSSProperty("style");
    //获取元素指定的CSS属性值
    await driver.getElementLocationInView(element.elementId);
    //获取元素在页面或屏幕上的顶点坐标,返回x、y坐标,整型
    await driver.getActiveElement();
    //获取当前会话的活动元素
    isEqual(element);
    //判断指定元素与参数一是否引用同一个元素,返回值,boolean类型
    //参数一,元素object
    14.文件操作
    var data = new Buffer.from("Hello World").toString('base64');
    await driver.pushFile('/data/local/tmp/file.txt', data);
    //上文件到设备
    //参数一,文件路径
    //参数二,base64格式的字符串
    await driver.pullFile('/data/local/tmp/file.txt');
    //获取设备上文件内容,返回值base64格式的字符串
    await driver.pullFolder('/data/local/tmp/');
    //获取设备指定文件夹,返回 Base64编码的字符串,文件格式为zip
    15.执行adb
    await driver.executeAsync('mobile: shell', {'command':'screencap -p /sdcard/app.png'});
    //异步执行命令
    await driver.execute('mobile: shell', {'command':'screencap -p /sdcard/app.png'});
    //执行adb命令示例
    16.批量执行
    const script = `
    let destElement = await driver.$('//android.widget.TextView[@text='移动网络']');
    await destElement.click();`;
    await driver.driverScript(script);
    //执行多条命令
    //此指令能提高脚本效率
    17.web/窗口操作
    await driver.switchToWindow("handle");
    //将焦点切换另一个窗口
    await driver.closeWindow();
    //关闭当前窗口
    await driver.getWindowHandle();
    //获取当前窗口句柄
    await driver.getWindowHandles();
    //获取所有窗口句柄列表
    await driver.getTitle();
    //获取当前页面标题
    await driver.getWindowRect();
    //获取窗口的位置
    await driver.setWindowRect(0, 0, 800, 600);
    //设置窗口位置
    await driver.getWindowSize();
    //获取窗口大小
    await driver.setWindowSize(10, 10);
    //设置窗口大小
    await driver.maximizeWindow();
    //最大化窗口
    await driver.url("http://www.ai-bot.net");
    //打开新的URL
    await driver.getUrl();
    //获取当前页面url
    await driver.back();
    //返回
    await driver.forward();
    //前一页
    await driver.refresh();
    //刷新
    await driver.getCookies();
    //获取cookie
    await driver.setCookies([{
    name: 'myCookie',
    value: 'some content'
    }]);
    //设置Cookie
    await driver.deleteCookies("cookie_name");
    //删除指定名称的cookie
    await driver.deleteCookies();
    //删除当前页面所有的cookie
    await driver.switchToFrame(3);
    //切换指定iframe
    await driver.switchToParentFrame();
    //切换父iframe
    18.手机截图
    await driver.saveScreenshot(imagePath);
    //截屏保存
    //参数一,保存到电脑上的路径
    await driver.takeScreenshot();
    //截屏
    //成功返回字符串,base64编码(PNG格式)
    await driver.takeElementScreenshot(elementId, scroll);
    //元素截图
    //参数一,要截取的元素id
    //参数二,布尔类型,可选参数,滚动到元素可见位置
    //成功返回字符串,base64编码(PNG格式)
  • 相关阅读:
    Apache Hadoop 英文官方参考文档及中文文档
    谷歌大数据那三篇论文-中文版
    Java学习笔记(一):基础概念和语法
    Java基础概念、知识点整理
    TensorFlow基础知识
    Kafka集群环境配置
    Sqoop数据迁移工具的使用
    HBase的安装和使用
    Flume日志采集框架的使用
    zookeeper的安装和使用
  • 原文地址:https://www.cnblogs.com/mys6/p/15072653.html
Copyright © 2011-2022 走看看