WindowsBot手册

创建/关闭WindowsBot

主函数示例

const windowsBot = require('WindowsBot');//引用WindowsBot模块
async function mian(){
    let windowsBotPort = 9999;
    let proxyServer = "127.0.0.1:888";
    let ai_botLink = null;
    //初始化WindowsBot
    let wDriver = await windowsBot.InitWindowsBot(windowsBotPort, proxyServer = null, ai_botLink = null);
}
mian();
//主函数,初始化WindowsBot服务
//windowsBotPort 整型,WindowsBot服务端口,多开进程,端口不可重复
//proxyServer 字符串,可选参数。设置WebBot内置浏览器代理ip
//ai_botLink 字符串,可选参数。Ai-Bot环境包链接,用作打包机器人

关闭WindowsBot

await wDriver.CloseWindowsBot();
//关闭WindowsBot服务

等待超时

await wDriver.Sleep(3000);
//显示等待
//参数一 整型,等待时间,单位毫秒

await wDriver.SetImplicitTimeout(waitMS, intervalMS = 10);
//隐式等待
//参数一 整型,等待时间,单位毫秒
//参数二 整型,心跳间隔,单位毫秒。可选参数,默认10毫秒

操作模式

await wDriver.SetCurMode(true);
//参数一 布尔类型,true前台,false后台,WindowsBot默认前台操作

查找窗口句柄

await wDriver.FindWindowHandle("className", "windowName");
//查找窗口句柄
//参数一 字符串型,窗口类名
//参数二 字符串型,窗口标题
//成功返回句柄,失败返回null

await wDriver.FindWindowsHandle("className", "windowName");
//查找窗口句柄数组
//参数一 字符串型,窗口类名
//参数二 字符串型,窗口标题
//成功返回句柄数组,失败返回null

await wDriver.FindSubWindowHandle(hwndParent, "className", "windowName");
//查找子窗口句柄
//参数一 整型,父窗口句柄
//参数二 字符串型,窗口类名
//参数三 字符串型,窗口标题
//成功返回句柄,失败返回null

await wDriver.FindParentWindowHandle(hwndSub);
//查找父窗口句柄
//参数一 整型,窗口句柄
//成功返回句柄,失败返回null

await wDriver.ShowWindow(hwnd, isShow);
//显示/隐藏窗口
//参数一 整型,窗口句柄
//参数二 布尔类型,true显示窗口,false隐藏窗口
//成功返回true,失败返回false

await wDriver.FindWebBotHandle();
//查找WebBot内置浏览器句柄
//成功返回句柄,失败返回null

鼠标操作

await wDriver.MoveMouse(hwnd, x, y);
//移动鼠标
//参数一 整型,窗口句柄
//参数二 整型,x坐标
//参数三 整型,y坐标

await wDriver.RollMouse(hwnd, x, y, dwData);
//滚动鼠标
//参数一 整型,窗口句柄
//参数二 整型,x坐标
//参数三 整型,y坐标
//参数四 整型,鼠标滚动次数,负数下滚鼠标,正数上滚鼠标

await wDriver.ClickMouse(hwnd, x, y, msg);
//点击鼠标,后台模式下,控件独句柄与hwnd不一致时会失败
//参数一 整型,窗口句柄
//参数二 整型,x坐标
//参数三 整型,y坐标
//参数四,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7 双击右键:8

键盘操作

await wDriver.InputText(hwnd, text);
//输入文本,杀毒软件可能会拦截
//参数一 整型,窗口句柄
//参数二 字符串型,输入内容

await wDriver.InputKeyborad(bVk, msg);
//输入键盘VK值
//参数一 整型,VK键值
//参数二 整型,按下弹起:1 按下:2 弹起:3

截图保存

await wDriver.SaveScreenshot(hwnd, imagePath, x = 0, y =0, width = 0, height = 0);
//后台截图保存
//参数一 整型,窗口句柄
//参数二 字符串型,图片保存的路径,png格式
//参数三 整型,可选参数,顶点x坐标
//参数四 整型,可选参数,顶点y坐标
//参数五 整型,可选参数,图片宽度
//参数六 整型,可选参数,图片高度
//成功返回true,失败返回false

await wDriver.FrontSaveScreenshot(imagePath, x = 0, y =0, width = 0, height = 0);
//前台截图保存,当SaveScreenshot截图失效时,可用此函数
//参数一 字符串型,图片保存的路径,png格式
//参数二 整型,可选参数,顶点x坐标
//参数三 整型,可选参数,顶点y坐标
//参数四 整型,可选参数,图片宽度
//参数五 整型,可选参数,图片高度
//成功返回true,失败返回false

图色定位

await wDriver.FindColorCount(imagePath, R, G, B);
//查找图片颜色点的数量和坐标
//参数一 字符串型,图片的路径
//参数二 整型,红
//参数三 整型,绿
//参数四 整型,蓝
//返回指定rgb点的数量和坐标

await wDriver.FindColor(hwnd, imagePath, R, G, B, index = 0);
//查找指定色值在图片上的位置
//参数一 整型,窗口句柄
//参数二 字符串型,图片的路径
//参数三 整型,红
//参数四 整型,绿
//参数五 整型,蓝
//参数六 整型,可选参数,指定出现的次数,默认第一次查找到的坐标
//成功返回指定rgb点的坐标,失败返回 {x:-1, y:-1}

await wDriver.FindImage(hwnd, sourceImagePath, destImagePath, sim);
//查找图片,大图找小图
//参数一 整型,窗口句柄
//参数二 字符串型,大图路径
//参数三 字符串型,小图路径
//参数四 浮点型,相似度0.0-1.0
//成功返回指定rgb点的坐标,失败返回 {x:-1, y:-1}

系统剪切板

await wDriver.SetClipboardText(text);
//设置剪切板文本
//参数一 字符串型,设置的文本

await wDriver.GetClipboardText();
//获取剪切板文本
//返回剪切板文本

启动程序

await wDriver.StartProcess(commandLine, showWindow = true, isWait = false);
//启动指定程序
//参数一 字符串型,启动命令行
//参数二 布尔型,是否显示窗口。可选参数,默认显示窗口
//参数三 布尔型,是否等待程序结束。可选参数,默认不等待
//成功返回true,失败返回false

下载文件

await wDriver.DownloadFile(url, filePath, isWait);
//启动指定程序
//参数一 字符串型,文件地址
//参数二 字符串型,文件保存的路径
//参数三 布尔型,是否等待.为true时,等待下载完成

ocr系统

await wDriver.InitOcr(appId, apiKey, secretKey);
//初始化百度ocr
//参数一 字符串型,百度ocr提供
//参数二 字符串型,百度ocr提供
//参数三 字符串型,百度ocr提供

await wDriver.GetImageWords(imagePath, ocrType);
//百度ocr获取图片上的文字
//参数一 字符串型,图片路径
//参数二 整型,识别类型,通用文字识别:1 高精度版:2 网络图片文字识别:3 数字识别:4 手写文字识别:5 二维码识别:6
//成功返回获取的文字

await wDriver.FindImageWords(hwnd, imagePath, words, index = 0);
//百度ocr获取图片文字坐标
//参数一 整型,图片所属窗口的句柄,手机图片识别一般为null
//参数二 字符串型,图片路径
//参数三 字符串型,识别的文字
//参数四 整型,可选参数。文字出现的次数,默认为0,查找第一次出现的坐标
//成功返回文字坐标,失败返回{x:-1, y:-1}

验证码识别系统

await wDriver.InitCheckCode(userName, passWord);
//初始化验证码系统
//参数一 字符串型,用户名,第三方平台提供
//参数二 字符串型,用户密码,第三方平台提供

await wDriver.GetCheckCode(imagePath, codeType);
//获取验证码
//参数一 字符串型,验证码图片路径
//参数二 字符串型,验证码类型,参考第三方平台
//成功返回验证码,失败返回错误信息

await wDriver.SendErrorCode();
//发送验证码识出错
//成功返回"true",失败返回错误信息

窗口元素操作

注意:窗口元素操作未默认释放,必须手动释放,否则内存泄漏!

查找元素

await wDriver.FindRootElement(hwnd);
//查找窗口根元素
//参数一 整型,窗口句柄
//成功返回元素对象,失败返回null

await wDriver.FindFocusElement();
//查找焦点元素
//成功返回元素对象,失败返回null

await wDriver.FindElementByAutomationId(rootElement, automationId);
//通过automationId查找元素
//参数一 对象,根元素
//参数二 字符串,要查找元素的automationId值
//成功返回元素对象,失败返回null

await wDriver.FindElementsByAutomationId(rootElement, automationId);
//通过automationId查找元素数组
//参数一 对象,根元素
//参数二 字符串,要查找元素的automationId值
//成功返回元素对象数组,失败返回null

await wDriver.FindElementByName(rootElement, name);
//通过name查找元素
//参数一 对象,根元素
//参数二 字符串,要查找元素的name值
//成功返回元素对象,失败返回null

await wDriver.FindElementsByName(rootElement, name);
//通过name查找元素数组
//参数一 对象,根元素
//参数二 字符串,要查找元素的name值
//成功返回元素对象数组,失败返回null

await wDriver.FindElementByClassName(rootElement, className);
//通过className查找元素
//参数一 对象,根元素
//参数二 字符串,要查找元素的className值
//成功返回元素对象,失败返回null

await wDriver.FindElementsByClassName(rootElement, className);
//通过className查找元素数组
//参数一 对象,根元素
//参数二 字符串,要查找元素的className值
//成功返回元素对象数组,失败返回null

await wDriver.FindElementByControlType(rootElement, controlType);
//通过controlType查找元素
//参数一 对象,根元素
//参数二 字符串,要查找元素的controlType值
//成功返回元素对象,失败返回null

await wDriver.FindElementsByControlType(rootElement, controlType);
//通过controlType查找元素数组
//参数一 对象,根元素
//参数二 字符串,要查找元素的controlType值
//成功返回元素对象数组,失败返回null

await wDriver.FindElementByXpath(rootElement, xpath);
//通过xpath查找元素
//参数一 对象,根元素
//参数二 字符串,要查找元素的xpath值
//成功返回元素对象,失败返回null

await wDriver.FindParentElement(currentElement, isRelease = true);
//查找父元素
//参数一 对象,当前元素
//参数二 布尔型,可选参数。是否释放当前元素
//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素
//成功返回元素对象,失败返回null

await wDriver.FindNextSiblingElement(currentElement, isRelease = true);
//查找下一个兄弟元素
//参数一 对象,当前元素
//参数二 布尔型,可选参数。是否释放当前元素
//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素
//成功返回元素对象,失败返回null

await wDriver.FindPreviousSiblingElement(currentElement, isRelease = true);
//查找上一个兄弟元素
//参数一 对象,当前元素
//参数二 布尔型,可选参数。是否释放当前元素
//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素
//成功返回元素对象,失败返回null

await wDriver.FindFirstChildElement(currentElement, isRelease = true);
//查找第一个子元素
//参数一 对象,当前元素
//参数二 布尔型,可选参数。是否释放当前元素
//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素
//成功返回元素对象,失败返回null

await wDriver.FindLastChildElement(currentElement, isRelease = true);
//查找最后一个子元素
//参数一 对象,当前元素
//参数二 布尔型,可选参数。是否释放当前元素
//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素
//成功返回元素对象,失败返回null

元素方法

await wDriver.GetElementName(element, isRelease = true);
//获取指定元素name属性值
//参数一 对象,指定元素
//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回元素name属性值

await wDriver.GetElementBoundingRectangle(element, isRelease = true);
//获取指定元素矩形大小
//参数一 对象,指定元素
//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回元素矩形大小,失败返回{left:-1, top:-1, right:-1, bottom:-1}

await wDriver.GetElementValueValue(element, isRelease = true);
//获取指定元素ValueValue属性值
//参数一 对象,指定元素
//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回元素ValueValue属性值

await wDriver.GetControlType(element, isRelease = true);
//获取指定元素ControlType属性值
//参数一 对象,指定元素
//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回元素ControlType属性值

await wDriver.SetElementValue(element, value, isRelease = true);
//设置指定元素value
//参数一 对象,指定元素
//参数二 字符串型,设置的值
//参数三 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回true,失败返回false

await wDriver.SetElementValueEx(element, value, isRelease = true);
//通过元素窗口句柄设置指定元素value
//参数一 对象,指定元素
//参数二 字符串型,设置的值
//参数三 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回true,失败返回false.

await wDriver.InvokeElement(element, isRelease = true);
//执行元素默认操作,一般用作点击
//参数一 对象,指定元素
//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回true,失败返回false

await wDriver.SetElementFocus(element, isRelease = true);
//设置指定元素作为焦点
//参数一 对象,指定元素
//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回true,失败返回false

await wDriver.SetElementScroll(element, horizontalPercent, verticalPercent, isRelease = true);
//设置指定元素滚动条
//参数一 对象,指定元素
//参数二 浮点型,水平百分比0.0-1.0,为-1时不滚动
//参数三 浮点型,垂直百分比0.0-1.0,为-1时不滚动
//参数四 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回true,失败返回false

await wDriver.ClickElement(element, msg, isRelease = true);
//通过元素窗口句柄点击控件
//参数一 对象,指定元素
//参数二 整型,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7 双击右键:8
//参数三 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回true,失败返回false.后台模式无法点击非客户端区域

await wDriver.CloseWindow(element, isRelease = true);
//关闭指定元素窗口
//参数一 对象,指定元素
//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回true,失败返回false.

await wDriver.SetWindowState(element, state, isRelease = true);
//设置指定元素窗口状态
//参数一 对象,指定元素
//参数二 整型,正常:0 最大化:1 最小化:2
//参数三 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放
//成功返回true,失败返回false.

await wDriver.ReleaseElement(element);
//手动释放指定元素,windows元素操作必须要释放元素,否则内存泄漏
//参数一 对象,指定元素
//成功返回true,失败返回false.

await wDriver.ReleaseElements(elements);
//手动释放指定元素数组,元素数组不再使用时,必须调用此函数手动释放,否则大量内存泄漏
//参数一 对象,指定元素数组

内置浏览器(WebBot)

WebBot操作

await wDriver.openWebBot(url);
//打开内置浏览器WebBot
//参数一 字符串型,指定网址

await wDriver.switchPage(index);
//切换WebBot页面
//参数一 整型,索引号,0为起首页

await wDriver.closePage(index);
//关闭WebBot页面
//参数一 整型,索引号,0为起首页

获取元素

await wDriver.getElementById(id, iframe = null);
//通过id获取元素
//参数一 字符串型,元素id值
//参数二 对象,可选参数,元素所属的iframe
//成功返回元素对象,失败返回null

await wDriver.getElementsByClassName(classNames, iframe = null);
//通过class获取元素数组
//参数一 字符串型,元素class值
//参数二 对象,可选参数,元素所属的iframe
//成功返回元素对象数组,失败返回null

await wDriver.getElementsByName(elementName, iframe = null);
//通过name获取元素数组
//参数一 字符串型,元素name值
//参数二 对象,可选参数,元素所属的iframe
//成功返回元素对象数组,失败返回null

await wDriver.getElementsByTagName(localName, iframe = null);
//通过tagName获取元素数组
//参数一 字符串型,元素tagName值
//参数二 对象,可选参数,元素所属的iframe
//成功返回元素对象数组,失败返回null

await wDriver.getElementByXpath(xpath, iframe = null);
//通过xpath获取元素
//参数一 字符串型,元素xpath路径
//参数二 对象,可选参数,元素所属的iframe
//成功返回元素对象,失败返回null

await wDriver.querySelector(selector, iframe = null);
//通过ccs selector获取元素
//参数一 字符串型,元素selector路径
//参数二 对象,可选参数,元素所属的iframe
//成功返回元素对象,失败返回null

await wDriver.querySelectorAll(selectors, iframe = null);
//通过ccs selector获取元素数组
//参数一 字符串型,元素selector路径
//参数二 对象,可选参数,元素所属的iframe
//成功返回元素对象数组,失败返回null

元素方法

await wDriver.clickElement(element);
//点击元素
//参数一 对象,要点击的元素

await wDriver.clickElementEx(element, iframe);
//点击元素(windows api方式点击)
//参数一 对象,要点击的元素。 参数二 对象,可选参数,元素所属的iframe

await wDriver.setValue(element, value);
//设置元素value
//参数一 对象,设置的元素
//参数二 字符串型,设置的值

await wDriver.getValue(element);
//获取元素value
//参数一 对象,指定的元素
//成功返回value值

await wDriver.setTextConten(element, value);
//设置元素textConten
//参数一 对象,设置的元素
//参数二 字符串型,设置的值

await wDriver.getTextConten(element);
//获取元素textConten
//参数一 对象,指定的元素
//成功返回textConten值

await wDriver.setOuterText(element, value);
//设置元素outerText
//参数一 对象,设置的元素
//参数二 字符串型,设置的值

await wDriver.getOuterText(element);
//获取元素outerText
//参数一 对象,指定的元素
//成功返回outerText值
await wDriver.setOuterHTML(element, value);
//设置元素setOuterHTML
//参数一 对象,设置的元素
//参数二 字符串型,设置的值

await wDriver.getOuterHTML(element);
//获取元素outerText
//参数一 对象,指定的元素
//成功返回outerHTML值

await wDriver.setInnerText(element, value);
//设置元素setInnerText
//参数一 对象,设置的元素
//参数二 字符串型,设置的值

await wDriver.getInnerText(element);
//获取元素innerHTML
//参数一 对象,指定的元素
//成功返回innerHTML值

await wDriver.setAttribute(element, value, name);
//设置元素属性
//参数一 对象,设置的元素
//参数二 字符串型,设置的值
//参数三 字符串型,属性名称

await wDriver.getAttribute(element, name);
//获取元素属性值
//参数一 对象,指定的元素
//参数二 字符串型,属性名称
//成功返回name对应的属性值

await wDriver.setSelect(element, checkValue);
//选择下拉框值
//参数一 对象,指定的元素
//参数二 字符串型,选中的值
//成功返回name对应的属性值

await wDriver.getBoundingClientRect(element);
//获取元素矩形大小
//参数一 对象,指定的元素
//成功返矩形大小,失败返回null

注入JavaScript

await wDriver.executeScript(scriptCode);
//注入JavaScript代码在v8执行
//参数一 字符串型,JavaScript代码

node与V8数据共享

await wDriver.nodePipeScript(shareData = 'null');
//WebBot V8有同名称扩展函数,可在executeScript调用。shareData更新需要10-100毫秒
//参数一 字符串型,设置共享数据值,可选参数。
//返回node/v8 设置的shareData值。
await wDriver.ExportCookie(filePath, url);
//导出指定url的cookie
//参数一 字符串型,cookie文件路径
//参数二 字符串型,url 格式:http://www.ai-bot.net
//成功返回true,失败返回false

await wDriver.ImportCookie(filePath, url);
//导入cookie到指定url网页
//参数一 字符串型,cookie文件路径
//参数二 字符串型,url 格式:http://www.ai-bot.net
//成功返回true,失败返回false

await wDriver.ClearCookie(filePath, url);
//清除指定url网页内的cookie, 不会删除本地cookie文件
//参数一 字符串型,cookie文件路径
//参数二 字符串型,url 格式:http://www.ai-bot.net
//成功返回true,失败返回false

Word文档

await wDriver.wordCreate(options = {type: 'docx'});
/*创建Wrod文档
参数一 对象,Word文档格式,可选参数,options列表:
    type(字符串)'docx' 必要参数值
    author(字符串)-文档的作者
    creator(字符串)-别名。文档的作者
    description(字符串)-文档的属性注释
     keywords(字符串)-文档的关键字
     orientation(字符串)-横向'landscape'或纵向'portrait'。默认值为'portrait'
     pageMargins(对象)-设置文档页边距。默认值为{top: 1800, right: 1440, bottom: 1800, left: 1440}
     pageSize(字符串|对象)-设置文档页面大小。默认值为A4(支持值:'A4', 'A3', 'letterpaper')。或使用{width: 11906, height: 16838}设置自定义尺寸
     subject (字符串)-文档的主题
     title(字符串)-文档的标题
     columns(整型)-每页中的列数。默认值为1列。
返回word对象*/

await wDriver.wordAddPage(docxObject);
//添加word分页
//参数一 对象,word对象

await wDriver.wordCreateTable(docxObject, table, tableStyle);
//创建word表格
//参数一 对象,word对象
//参数二 对象,表格
//参数三 对象,表格样式

await wDriver.wordAddHeader(docxObject, text, options = '');
//添加页眉
//参数一 对象,word对象
//参数二 字符串,要添加的文本
//参数三 字符串,可选参数,要更改的页面 'even'更改偶数页。'first'仅更改首页

await wDriver.wordAddFooter(docxObject, text, options = '');
//添加页脚
//参数一 对象,word对象
//参数二 字符串,要添加的文本
//参数三 字符串,可选参数,要更改的页面 'even'更改偶数页。'first'仅更改首页

await wDriver.wordCreateParagraph(docxObject, options = {align: 'left'});
/*创建段落
参数一 对象,word对象
参数二 对象, 可选参数,段落格式,options列表:
    align(字符串)-水平对齐,可以是'left'(认),'right','center'或'justify'
    textAlignment(字符串)-垂直对齐方式,'center', 'top', 'bottom'或'baseline'
    indentLeft(数字)- 向左缩进
    indentFirstLine(数字)- 缩进第一行
    backline(字符串)-颜色代码,例如:'ffffff'(白色)或'000000'黑色)
成功返回段落对象*/

await wDriver.wordCreateListOfDots(docxObject, options = {align:'left'});
//创建无作序号的段落
//参数一 对象,word对象
//参数二 对象, 可选参数,段落格式,options列表:参考wordCreateParagraph
//成功返回段落对象

await wDriver.wordCreateListOfNumbers(docxObject, options = {align: 'left'});
//创建有序号数字的段落
//参数一 对象,word对象
//参数二 对象, 可选参数,段落格式,options列表:参考wordCreateParagraph
//成功返回段落对象

await wDriver.wordCreateNestedUnOrderedList(docxObject, options = {"level":2});
//创建有等级的无序号段落
//参数一 对象,word对象
//参数二 对象, 可选参数,段落格式,options列表:参考wordCreateParagraph
//成功返回段落对象

await wDriver.wordCreateNestedOrderedList(docxObject, options = {"level":2});
//创建有等级的序号段落
//参数一 对象,word对象
//参数二 对象, 可选参数,段落格式,options列表:参考wordCreateParagraph
//成功返回段落对象

await wDriver.wordAddText(paragraphObject, text, sytle = {});
/*将文本添加到段落
  参数一 对象,段落对象对象
  参数二 字符串, 要添加的文本
  参数三 对象,可选参数,文本样式,sytle列表:
    back(字符串)-背景颜色代码,例如:'ffffff'(白色)或'000000'黑色)
    shdType(字符串)-要使用的可选模式代码:'clear'(无模式),'pct10','pct12','pct15','diagCross','diagStripe','horzCross', 'horzStripe','nil' ,'thinDiagCross','solid'等
    shdColor(字符串)-模式的前部颜色(与shdType一起使用)
    bold(布尔)-为true时文本变为粗体
    border(字符串)-边框类型:'single','dashDotStroked','dashed','dashSmallGap','dotDash','dotDotDash','dotted','double','thick'
    color(字符串)-字体颜色代码,例如:“ ffffff”(白色)或“ 000000”(黑色)
    italic(布尔值)-设置为斜体时为true
    underline(布尔值)-为true表示要添加下划线
    font_face(字符串)-要使用的字体,例如:'Arial'
    font_face_east(字符串)-高级设置:用于东亚的字体。您还必须设置font_face
    font_face_cs(字符串)-高级设置:要使用的字体(cs)。您还必须设置font_face
    font_face_h(字符串)-高级设置:要使用的字体(hAnsi)。您还必须设置font_face
    font_hint(字符串)-可选。'ascii'(默认),'eastAsia','cs'或'hAnsi'
    font_size(数字)-以磅为单位的字体大小
    rtl(布尔值)-将其添加到rtl语言的任何文本中
    highlight (字符串) - 高亮颜色。'black', 'blue', 'cyan', 'darkBlue', 'darkCyan','darkGray', 'darkGreen', 'darkMagenta', 'darkRed', 'darkYellow', 'green', 'lightGray', 'magenta', 'none', 'red', 'white','yellow'
    strikethrough(布尔值)-添加删除线时为true。
    superscript(布尔值)-如果可以使用较小的尺寸,则为true可以将此次运行中的文本降低到基线以下,并将其更改为较小的尺寸。
    subscript(布尔值)-为true时,如果可以使用较小的尺寸,则将运行中的文本升高到基线以上,并将其更改为较小的尺寸
    link(字符串)-超连接
    hyperlink(字符串)向书签的超链接*/

await wDriver.wordAddImage(paragraphObject, imagePath, area = {});
//将图像添加到段落
//参数一 对象,段落对象
//参数二 字符串, 图片路径
//参数三 对象, 可选参数, 图片宽高 {cx: 300, cy: 200}

await wDriver.wordBreak(paragraphObject);
//段落换行
//参数一 对象,段落对象

await wDriver.wordAddHorizontalLine(paragraphObject);
//添加一条水平线,看上去与换行相似?
//参数一 对象,段落对象

await wDriver.wordStartBookmark(paragraphObject, markName);
//添加书签
//参数一 对象,段落对象
//参数二 字符串,标签名

await wDriver.wordEndBookmark(paragraphObject);
//书签结束位置
//参数一 对象,段落对象

await wDriver.wordSave(docxObject, filePath);
//保存word文件
//参数一 对象,word对象
//参数二 字符串,保存的路径

await wDriver.wordReadText(filePath);
//读取word内容
//参数一 字符串,保存的路径
//成功返回读取到的内容,失败返回null

Excel文档

await wDriver.OpenExcel(excelPath);
//打开excel文档
//参数一 字符串,excle路径
//成功返回excel对象,失败返回null

await wDriver.OpenExcelSheet(excelObject, sheetName);
//打开excel表格
//参数一 对象,excel对象
//参数二 字符串,表名
//成功返回sheet对象,失败返回null

await wDriver.SaveExcel(excelObject);
//保存excel文档
//参数一 对象,excel对象
//成功返回true,失败返回false

await wDriver.WriteExcelNum(sheetObject, row, col, value);
//写入数字到excel表格
//参数一 对象,sheet对象
//参数二 整型,行
//参数三 整型,列
//参数四 数字型,写入的值
//成功返回true,失败返回false

await wDriver.WriteExcelStr(sheetObject, row, col, strValue);
//写入字串到excel表格
//参数一 对象,sheet对象
//参数二 整型,行
//参数三 整型,列
//参数四 字符串,写入的值
//成功返回true,失败返回false

await wDriver.ReadExcelNum(sheetObject, row, col);
//读取excel表格数字
//参数一 对象,sheet对象
//参数二 整型,行
//参数三 整型,列
//返回读取到的数字

await wDriver.ReadExcelStr(sheetObject, row, col);
//读取excel表格字串
//参数一 对象,sheet对象
//参数二 整型,行
//参数三 整型,列
//返回读取到的字符

邮件收发

await wDriver.SendMail(smtpServer, smtpPort, authCode, sendMailer, sendName, recvMailer, subject, text, html = null, attachments = null);
/*发送邮件
  参数一 字符串,SMTP服务地址
  参数二 整型,SMTP服务端号
  参数三 字符串,第三方邮箱平台授权码
  参数四 字符串,发送人邮箱
  参数五 字符串,发送人名称
  参数六 字符串,接收人邮箱,多人逗号分开
  参数七 字符串,邮箱主题
  参数八 字符串,发送的正文 文本格式
  参数九 字符串,发送的正文 html格式,可选参数,默认为null
  参数十 字符串, 发送的附件,可选参数,默认为null 示例:
  let attachments = [
      { // utf-8字符串作为附件
        filename: 'text1.txt',
        content: 'hello world!'
      },
      { //磁盘上的文件作为附件
        filename: 'text3.txt',
        path: '/path/to/file.txt'
      },
      { //文件名和内容类型是从路径生成
        path: '/path/to/file.txt'
      },
      { //使用URL作为附件
        filename: 'WindowsDoc.pdf',
        path: 'http://www.ai-bot.net/WindowsDoc.pdf'
      }
  ]
成功返回"邮件发送成功!",失败返回错误信息*/

await wDriver.GetMail(imapServer, imapPort, authCode, mailAccount,criteria);
//获取邮件
//参数一 字符串,IMAP服务地址
//参数二 整型,IMAP服务端号
//参数三 字符串,第三方邮箱平台授权码
//参数四 字符串,邮箱账号
//参数五 字符串,获取哪类邮件,所有邮件'ALL' 未读邮件'UNSEEN' 已读邮件'SEEN' 第1-3封'1:3'
//成功返回邮件信息对象,失败返回错误信息

PDF转PNG图片

await wDriver.PdfToImage(pdfPath, quality = 100);
//获取邮件
//参数一 字符串,pdf路径
//参数二 整型,图片品质,可选参数,默认100
//成功返回true,失败返回false.图片生成在当前目录下,以pdf文件命名,多页Pdf会生成多个图片

获取主板识别码

await wDriver.GetBoisId();
//一般用作脚本授权
//成功返回BoisId,失败返回null

语音合成

await wDriver.Tts(saveFile, appkey, keyId, keySecret, text, voice = "ruoxi",ttsArgs = {"format":"wav", "sampleRate":24000, "volume":50, "speechRate":0, "pitchRate":0});
/*支持一次性合成300字符以内的文字,超过300个字符的内容会被截断。
参数1 字符串类型,音频保存文件路径
参数2 字符串类型,appkey
参数3 字符串类型,accessKeyId
参数4 字符串类型,accessKeySecret
参数5 字符串类型,待合成的文本,需要为UTF-8编码,支持SSML,例如:<speak>我<break time="2000ms"/>停顿了两秒</speak> time范围[50, 10000]的整数。
参数6 字符串类型,发音人,可选参数,默认"ruoxi"。支持以下音种:
    ruoxi(温柔女声) siqi(温柔女声) sijia(标准女声) sicheng(标准男声)ninger(标准女声)
    ruilin(标准女声) siyue(温柔女声) xiaomei(甜美女声) yina(浙普女声) sijing(严厉女声)
    sitong(儿童音) xiaobei(萝莉女声) wendy(英音女声) william(英音男声) olivia(英音女声) shanshan(粤语女声)
参数7 JSON类型,可选,默认值为:
    {"format":"wav", "sampleRate":24000, "volume":50, "speechRate":0, "pitchRate":0}
    "format":音频编码格式,支持pcm/wav/mp3格式,默认"wav"。
    "sampleRate":音频采样率,支持24000/16000/8000(Hz),默认24000。
    "volume":音量,范围是0~100,默认50。
    "speechRate":语速,范围是-500~500,默认是0。
    "pitchRate":语调,范围是-500~500,默认是0。
成功返回true,失败返回false*/

await wDriver.LongTts(saveFile, appkey, keyId, keySecret, text, voice = "zhiqi", ttsArgs = {"format":"wav", "sampleRate":48000, "volume":50, "speechRate":0, "pitchRate":0});
/*长语音合成,支持一次性合成最高10万字符,支持精品音质
参数1 字符串类型,音频保存文件路径
参数2 字符串类型,appkey
参数3 字符串类型,accessKeyId
参数4 字符串类型,accessKeySecret
参数5 字符串类型,待合成的文本,需要为UTF-8编码,支持SSML,例如:<speak>我<break time="2000ms"/>停顿了两秒</speak> time范围[50, 10000]的整数。
参数6 字符串类型,发音人,可选参数,默认"zhiqi"。支持以下音种:
    超高清场景
        zhiqi(温柔女声) zhichu(舌尖男声) zhixiang(磁性男声) zhijia(标准女声) zhinan(广告男声) zhiqian(资讯女声)
        zhiru(新闻女声) zhide(新闻男声) zhifei(激昂解说) zhilun(悬疑解说) zhiwei(萝莉女声)
    文学场景
        aiyuan(知心姐姐) aiying(软萌童声) aixiang(磁性男声) aimo(情感男声) aiye(青年男声) aiting(电台女声) 
        aifan(情感女声) aide(新闻男声) ainan(广告男声) aihao(资讯男声) aiming(诙谐男声) aixiao(资讯女声) 
        aichu(舌尖男声) aiqian(资讯女声) aishu(资讯男声) airu(新闻女声) 除以上值外,还支持语音合成所有的发音人
参数7 JSON类型,可选,默认值为:
    {"format":"wav", "sampleRate":48000, "volume":50, "speechRate":0, "pitchRate":0}
    "format":音频编码格式,支持pcm/wav/mp3格式,默认"wav"。
    "sampleRate":音频采样率,支持48000/24000/16000/8000(Hz),默认48000。
    "volume":音量,范围是0~100,默认50。
    "speechRate":语速,范围是-500~500,默认是0。
    "pitchRate":语调,范围是-500~500,默认是0。
成功返回true,失败返回false*/

语音识别转换文字

await wDriver.voiceTrans(filePath, appKey, keyId, keySecret,)
//参数1 字符串类型,要识别的音频文件,支持 .wav、.mp3、.m4a、.wma、.aac、.ogg、.amr、.flac格式
//参数2 字符串类型,appkey
//参数3 字符串类型,accessKeyId
//参数4 字符串类型,accessKeySecret
//成功返回识别到的文字,失败返回false

坐标转换

await wDriver.ClientToScreen(hwnd, x, y);
//客户端坐标转换屏幕坐标(忽略标题栏的高度)
//参数1整型,窗口句柄
//参数2整型,x坐标
//参数3整型,y坐标
//返回客户端对应的屏幕坐标{x:number, y:number}

视频流操作

await wDriver.YoutubeDownload(url, filePath, maxSize, options);
/*视频流资源下载
参数1 字符串,视频资源链接
参数2 字符串,保存的mp4文件
参数3 整型,最大分辨率(高度) 1920
参数4 JSON对象,
    {"subLang":'zh-Hans', "thumbnail":true, "proxy": 'https://127.0.0.1:19180/',  "embed": false}
    "subLang" 视频字幕 zh-Hans中文
    "thumbnail" 是否下载视频封面
    "proxy" 代理服务器
    "embed" 是否嵌入字幕*/

await wDriver.MergeVideo(srcVideos, destVideo);
//合并视频
//参数一 字符串数组,要合并的视频文件集合
//参数二 字符串,合并完成,要保存的文件名

await wDriver.SplitVideo(srcVideo, destVideo, startTime, endTime);
//分割视频
//参数一 字符串,视频源文件
//参数二 字符串,分割完成,要保存的文件名。格式必须和 srcVideo 一致
//参数三 字符串,分割起始时间
//参数四 字符串,分割持续时间 参数格式为"23.189"(23.189秒)或者 0:0:50

await wDriver.ExportAudio(videoFile, audioFile);
//导出音频
//参数一 字符串,视频文件
//参数二 字符串,导出的音频文件

await wDriver.ExportVideo(videoFile, naVideoFile);
//导出视频(无声音)
//参数一 字符串,视频文件
//参数二 字符串,导出的视频文件(无声音),导出格式必须和 videoFile 一致

await wDriver.ConvertVideo(srcVideo, destVideo);
//转换视频格式
//参数一 字符串,源视频
//参数二 字符串,转换后的视频

await wDriver.ConvertAudio(srcAudio, destAudio);
//转换音频格式
//参数一 字符串,源音频
//参数二 字符串,转换后的音频

await wDriver.ConvertSubtitle(srcSubtitle, destSubtitle);
//转换字幕格式
//参数一 字符串,源字幕
//参数二 字符串,转换后的字幕

await wDriver.EmbedSubtitle(srcVideo, subtitleFile, destVideo);
//视频嵌入字幕
//参数一 字符串,要嵌入字幕的视频文件
//参数二 字符串,字幕文件
//参数三 字符串,嵌入字幕完成的文件

await wDriver.EmbedSoftSubtitle(srcVideo, subtitleFile);
//视频嵌入软字幕
//参数一 字符串,要嵌入字幕的视频文件
//参数二 字符串,字幕文件
//成功,自动保存同名.mkv格式

await wDriver.VideoToImage(srcVideo, destImage, time);
//视频提取图片
//参数一 字符串,视频文件
//参数二 字符串,要提取的图片
//参数三 字符串,截图时间点 00:01:20

await wDriver.DelogoVideo(srcVideo, destVideo, rect, startTime = 0, endTime = 0);
//视频去水印
//参数一 字符串,源视频文件
//参数二 字符串,去水印后的视频文件
//参数三 JSON对象,去水印的矩形位置 {x:10, y:20, width:100, height:200}
//参数四 整型,可选参数,删除水印起始时间
//参数五 整型,可选参数,删除水印结束时间

await wDriver.AdlogoVideo(srcVideo, destVideo, logoImage, point);
//视频去水印
//参数一 字符串,源视频文件
//参数二 字符串,添加印后的视频文件
//参数三 字符串,水印图片
//参数四 JSON对象,水印摆放的位置{x:10, y:20}

BrowserBot手册

创建/关闭BrowserBot

主函数示例

const {browserBot, By, Key, until} = require('BrowserBot');//注意browserBot大小写
async function mian(){
    //初始化BrowserBot
    let browserName = 'chrome';
    let version = null;//指定浏览器版本号
    let startArgs = [], switchArgs = [];
    let bDriver = await browserBot.InitBrowserBot(browserName, version, startArgs, switchArgs);
    await bDriver.get('https://www.baidu.com/');
    await bDriver.sleep(5000);
    await bDriver.quit();//关闭BrowserBot
}
 mian();
/*主函数,初始化BrowserBot服务
browserName 字符串,浏览器名称 "edge" "chrome"
version 字符串,可选参数,浏览器版本号,第一次使用或更换版本,必须指定版本号
startArgs 字符串数组,可选参数。启动参数
    无头模式:["headless"]
    设置UA:["user-agent='UA'"]
    设置代理:["proxy-server=127.0.0.1:888"]
    数据目录:["--user-data-dir=C:\\Users\\ASUS\\AppData\\Local\\Google\\Chrome\\User Data"]
//switchArgs 字符串数组,可选参数其他参数选项*/

关闭浏览器

await bDriver.quit();
//退出

等待超时

await bDriver.sleep(3000);
//显示等待
//参数一 整型,等待时间,单位毫秒

await bDriver.manage().setTimeouts({implicit: 5000});
//隐式等待,设置5秒

元素操作

查找元素

await bDriver.findElement(locator: Locator);
//查找单个元素
//locator,查找元素的方式有
//By.className、By.css、By.id、By.linkText、By.name、By.xpath、By.partialLinkText、By.js
//成功返回元素对象,失败程序终止。封装try...catch...处理返回失败
//示例,通过By.id 查找元素
    let element = await bDriver.findElement(By.id("kw"));
//By.js 基于JavaScript的定位方式,参数可以是字符串也可以是js函数,如果是函数 , 则返回 return 的值。无论是字符表达式还是js函数,结果必须是元素或元素列表

await bDriver.findElements(locator: Locator);
//查找元素数组

元素方法

await element.click();
//点击元素

await element.sendKeys("ai-bot");
//参数一 字符串型,设置元素的值,也可以发送键值
//示例:
    await element.sendKeys("ai-bot", Key.ENTER);//输入ai-bot 并且回车

await element.clear();
//清除元素值

await element.submit();
//提交表单

await element.getText();
//获取innerText值

await element.getAttribute("attributeName");
//获取元素指定属性值
//参数一 字符串型,指定属性名
//成功返回对应属性的值

await element.getRect();
//获取元素矩形位置
//成功返回元素矩形位置 {height: number, width: number, x: number, y: number}

await element.isDisplayed();
//判断该元素是否可见

await element.isEnabled();
//判断该元素是启用

await element.isSelected();
//判断该元素是选中

await element.findElement(locator);
//查找此元素后代元素

await element.findElements(locator);
//查找此元素后代元素数组

IFrame

await bDriver.switchTo().frame(iframe);
//切换到指定iframe

await bDriver.switchTo().frame(1);
//通过索引号切换iframe

await bDriver.switchTo().parentFrame();
//切换到当前iframe的 父iframe

await bDriver.switchTo().defaultContent();
//切换到最顶层默认框架

鼠标键盘指令

await bDriver.actions().sendKeys("ai-bot").perform();
//发送文本,也可以是键值

await bDriver.actions().click(element).perform();
//左键点击元素,点击之前鼠标先移到目标中心位置

await bDriver.actions().contextClick(element).perform();
//右键点击元素,点击之前鼠标先移到目标中心位置

await bDriver.actions().doubleClick(element).perform();
//左键双击元素,点击之前鼠标先移到目标中心位置

await bDriver.actions().dragAndDrop(element, destLocation).perform();
//按下左键从参数一(元素)中间位置,移动到参数二(元素或坐标) 并释放左键

await bDriver.actions().keyDown(Key.ENTER).perform();
//按下指定键值

await bDriver.actions().keyUp(Key.ENTER).perform();
//释放指定键值

await bDriver.actions().move(options).perform();
//移动鼠标, options 参数可以是坐标{x: 100, y:100}或者元素

await bDriver.actions().pause(3000).perform();
//暂停执行动作,等待3秒

await bDriver.actions().press(0).perform();
//在鼠标当前位置按下按钮, 左键0 中键1 右键2

await bDriver.actions().release(0).perform();
//在鼠标当前位置释放按钮, 左键0 中键1 右键2

await bDriver.actions().clear().perform();
//释放所有键、指针并清除内部状态。
//必须调用perform() 执行动作序列,以上指令可以组合使用

浏览器操作

页面和导航

await bDriver.get('http://www.ai-bot.net/');
//打开指定URL,http://或者 https://开头

await bDriver.navigate().back();
//后退

await bDriver.navigate().forward();
//前进

await bDriver.navigate().refresh();
//刷新

await bDriver.navigate().to(url);
//跳转指定url ,http://或者 https://开头

await bDriver.getCurrentUrl();
//获取当前URL

await bDriver.getTitle();
//获取当前页面标题

await bDriver.getPageSource();
//获取当前页面源码

选项卡(含窗口)

await bDriver.getWindowHandle();
//获取当前窗口句柄,此处窗口句柄与我们WindowsBot窗口句柄不是同一个概念

await bDriver.getAllWindowHandles();
//获取所有窗口句柄
//返回窗口句柄数组,此处窗口句柄与我们WindowsBot窗口句柄不是同一个概念

await bDriver.switchTo().window(handle);
//切换到指令选项卡或窗口

await bDriver.switchTo().newWindow('tab');
//创建新选项卡并切换

await bDriver.switchTo().newWindow('window');
//创建新窗口卡并切换

await bDriver.close();
//关闭当前窗口/选项卡

窗口操作

await bDriver.manage().window().getRect();
//获取窗口大小
//成功返回{height: number, width: number, x: number, y: number}

await bDriver.manage().window().setRect({x: 0, y: 0, width:100, height:100});
//设置窗口和位置大小,可以单独指定x y或者 width, height

await bDriver.manage().window().maximize();
//最大化窗口

await bDriver.manage().window().minimize();
//最小化窗口

截图

await element.takeScreenshot(scroll = false);
//元素截图
//参数一 布尔类型,可以选参数,截图之前是否将元素滚动到视图中。默认为false。
//成功返回字符串 base-64 编码。 PNG 格式

await bDriver.takeScreenshot();
//全屏截图
//成功返回字符串 base-64 编码。 PNG 格式

警告框操作

await bDriver.wait(until.alertIsPresent());
//等待警告框显示

let alert = await bDriver.switchTo().alert();
//切换弹窗警告框
//成功返回警告框操作对象,失败程序报错try...catch...处理返回失败

await alert.accept();
//点击确定按钮

await alert.dismiss();
//点击取消按钮

await alert.sendKeys("ai-bot是一款优秀的RPA框架");
//设置弹窗(prompt)输入框内容

await alert.getText();
//获取弹窗文本

注入JavaScript

await bDriver.executeScript(script);
//参数一 可以是字符串 也可以是js 函数
//如果是函数 , 则返回 return 的值。返回值解析规则:
//HTML 元素,该值将解析为WebElement
//Null 和 undefined 返回值将解析为 null
//布尔值、数字和字符串将按原样解析
//函数将解析为它们的字符串表示
//对于数组和对象,每个成员项都会按照上面的规则进行转换
//示例:
await bDriver.executeScript(function(){return 'Ai-Bot'}); //function
await bDriver.executeScript("alert('Ai-Bot是一款非常优秀的RPA')");//string

await bDriver.executeAsyncScript(script);
//异步注入
await bDriver.manage().getCookie("name")
//获取指定name的cookie

await bDriver.manage().getCookies()
//获取所有cookie

await bDriver.manage().addCookie(spec);
//添加cookie
//代码示例:
        await bDriver.manage().addCookie({name: 'foo', value: 'bar'});
//除name、value 还有domain、expiry、httpOnly、path、secure属性

await bDriver.manage().deleteCookie("name");
//删除指定name的cookie

await bDriver.manage().deleteAllCookies()
//删除所有cookie

AndroidBot手册

创建/删除AndroidBot

主函数示例

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 aDriver = 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对象

获取/设置参数

await aDriver.capabilities;
//获取启动参数

await aDriver.getSettings();
//获取设定值

await aDriver.updateSettings({ignoreUnimportantViews: true});
//更改设定值,例如ignoreUnimportantViews: true 忽略其他不相关元素

删除会话

await aDriver.deleteSession();
//删除aDriver对象

超时设置

await aDriver.pause(5000);
//显示等待 5秒

await aDriver.setImplicitTimeout(5000);
//设置隐式等待超时(全局生效),脚本在搜索元素时等待的时间,默认隐式等待为0ms

await aDriver.setAsyncTimeout(5000);
//设置允许由 executeAsync 执行的异步脚本的等待超时(以毫秒为单位)

屏幕操作

await aDriver.getOrientation();
//获取当前设备横竖屏状态。
//返回值 字符串 LANDSCAPE(横屏) PORTRAIT(竖屏)

await aDriver.setOrientation("LANDSCAPE");
//设置横竖屏,LANDSCAPE(横屏) PORTRAIT(竖屏)

await aDriver.startRecordingScreen();
//开始录制屏幕

await aDriver.stopRecordingScreen();
//停止录制屏幕;
//返回值:Base64 编码的字符串

await aDriver.lock();
//锁定设备

await aDriver.unlock();
//解锁设备

await aDriver.isLocked();
//判断设备是否被锁定,如果设备已锁定,返回True,否则为false

await aDriver.rotateDevice(100, 100);
//三维旋转设备

await aDriver.shake();
//摇动设备

获取系统状态

await aDriver.getPerformanceDataTypes();
//返回允许读取的系统状态的信息类型,例如cpu,内存,网络流量和电池

await aDriver.getPerformanceData('my.app.package', 'cpuinfo', 5);
//参数1,应用程序的软件包名称
//参数2,要读取的系统状态的类型。性能数据类型(cpuinfo|batteryinfo|networkinfo|memoryinfo)
//参数3,尝试读取的次数(可选)
//返回 字符串数组类型,读取的系统状态信息,例如cpu,内存,网络流量和电池

电源设置

await aDriver.powerAC('on');
//将电池充电器的状态设置为已连接('on')或未连接('off')(仅模拟器)延迟1秒-2秒

await aDriver.powerCapacity(50);
//设置电池百分比(仅模拟器)

网络操作

await aDriver.toggleAirplaneMode();
//切换飞行模式(部分设备不可用)

await aDriver.toggleData();
//切换数据服务状态(部分设备不可用)

await aDriver.toggleWiFi();
//切换WiFi服务的状态

await aDriver.toggleLocationServices();
//切换位置服务的状态

await aDriver.sendSms('123456789', 'rpa');
//发送短信(仅模拟器)

await aDriver.gsmCall('123456789', 'call');
//拨打GSM 电话(仅模拟器)

await aDriver.gsmSignal(3);
//设置GSM 信号强大,信号强度在[0,4]范围内

await aDriver.gsmVoice('home');
//设置GSM 语音状态(仅模拟器)
//参数1 GSM 语音状态'unregistered'(未注册), 'home'(家庭), 'roaming'(漫游), 'searching'(搜索), 'denied'(被拒绝), 'off'(关闭),'on'(打开)

await aDriver.toggleNetworkSpeed('lte');
//设置网络速度(仅模拟器)
//参数1 网络类型'full','gsm','edge','hscsd','gprs','umts','hsdpa','lte','evdo'

键盘操作

await aDriver.pressKeyCode(10);
//按Android 设备上的特定键
//参数一,特定按键码值,4 为返回键。其他键值,自行百度搜索

await aDriver.longPressKeyCode(10);
//长按Android 设备上的特定键

await aDriver.hideKeyboard();
//隐藏软键盘

await aDriver.isKeyboardShown();
//判断是否显示软键盘,如果显示键盘,返回True

栏目相关

await aDriver.openNotifications();
//打开通知栏

await aDriver.getSystemBars();
//返回状态栏和导航栏的可见性信息

await aDriver.getDeviceTime();
//获取系统时间,返回系统时间(字符串)

await aDriver.getDisplayDensity();
//返回整型,设备pid(像素密度)

await aDriver.fingerPrint(1);
//指纹识别(仅模拟器)
//存储在Android Keystore 系统中的指纹(从1 到10)

触屏/鼠标操作

鼠标操作(部分设备不可用)

moveTo(10, 10);
//将鼠标移动指定元素的偏移位置

click();
//在当前鼠标坐标处单击任意鼠标

doubleClick();
//双击元素

buttonDown();
//当前鼠标坐标处单击并按住鼠标左键

buttonUp();
//释放先前按住的鼠标按钮

触屏操作

await aDriver.touchAction({
    action: 'tap',
    x: 30,
    y: 20
});
//触摸xy指定坐标点

await aDriver.touchDoubleClick(element.elementId);
//在指定元素上触摸双击
//参数,元素id

await aDriver.touchPerform([
    {action: 'press', options: {x: 100, y: 250}},
    {action: 'wait',options: {ms: 100}},
    {action: 'moveTo', options: {x: 300, y: 100}},
    {action: 'release'}
]);
/*options:
    {element: element.} 元素id
    {x: 100, y: 200}     X坐标, Y坐标
    {count: 2}             tap次数
    {ms: 100}             毫秒
action:
    tap         点击
    press         短按
    longPress     长按
    wait         等待
    moveTo         滑动
    release     释放
此函数涵盖鼠标和触屏操作,建议使用。*/

地理位置

await aDriver.getGeoLocation();
//获取地理位置,返回值整型 纬度 经度 高度

await aDriver.setGeoLocation({latitude: "121.21", longitude: "11.56", altitude: "94.23"});
//设置地理位置,latitude纬度 longitude经度 altitude高度

系统剪切板

await aDriver.getClipboard();
//获取系统剪贴板的内容 返回值,base64编码的字符串,如果剪贴板为空,则为空 字符串

var data = new Buffer.from("Ai-Bot").toString('base64');
await aDriver.setClipboard(data, 'plaintext');
//设置系统剪贴板的内容,仅设置plaintext纯文本
//参数1 字符串 base64编码

App操作

await aDriver.startActivity("com.example", "ActivityName");
//通过app包名称和活动名称来启动app 一般用于多个app控制

await aDriver.getCurrentActivity();
//返回当前app活动窗口的名称

await aDriver.getCurrentPackage();
//返回当前app包的名称

await aDriver.installApp("D: \\test.apk");
//安装app

await aDriver.removeApp("com.example.AppName");
//通过包名 卸载应用

await aDriver.isAppInstalled('com.example.AppName');
//检查设备上是否安装了指定的应用程序,如果已安装,返回true;否则,返回 false

await aDriver.launchApp();
//如果被测应用关闭或在后台运行 ,它将启动被测应用

await aDriver.background(10);
//将此会话当前运行的应用程序发送到后台,参数时间单位为秒

await aDriver.closeApp();
//关闭应用

await aDriver.reset();
//重置此会话的正在运行的应用

await aDriver.activateApp("com.example.AppName");
//通过包名 激活应用

await aDriver.terminateApp('com.example.AppName');
//终止设备上指定的应用

await aDriver.queryAppState('com.example.AppName');
//获取设备上应用状态。
//返回值,0未安装。1没有运行。2在后台运行或已暂停。 3在后台运行。4正在前台运行。

await aDriver.getStrings("en");
//获取应用程序所有的字符串。

await aDriver.getContext();
//获取当前app是在NATIVE还是WEBVIEW环境
//返回当前环境的名称

await aDriver.getContexts();
//获取app环境集合
//返回所有环境的名称 Array<String>

await aDriver.switchContext(contexts[1]);
//切换NATIVE或者WEBVIEW环境
//参数为 要更改环境的名称

await aDriver.getPageSource();
//获取当前的App层次结构XML(应用程序)或页面源码(Web)
//此方法获取App层次结构,便于元素定位

元素操作

元素定位

await aDriver.$("~content-desc");
/*元素定位支持content-desc、className、UiSelector、XPath等方式
    content-desc,UI元素的唯一标识符,该方式需在属性前加 "~" 波浪号
    className,类名定位,className属性值重复较多
    UiSelector,使用UI Automator API定位,可设定多个条件定位,建议使用
    XPath定位,效率较低,但它是通用的定位方式
查找元素失败元素属性elementId值为undefined,可用作是否查找成功*/
//示例代码:
//content-desc
await aDriver.$("~content-desc");
//className
await aDriver.$("className");
//UiSelector1
var selector ='new UiSelector().resourceId("resourceId")';
await aDriver.$(`android=${selector}`);
//UiSelector2
var selector ='new UiSelector().text("text").className("className").resourceId("resourceId")';
await aDriver.$(`android=${selector}`);
//XPath
await aDriver.$("//android.widget.TextView[@text='Ai-Bot']");

元素数组

await aDriver.$$("className");
//查找相同元素属性值数组,查找方式同上

元素方法

click();
//点击元素中心点

addValue("Ai-Bot");
//发送字符串到元素

setValue("Ai-Bot");
//设置元素值

clearValue();
//清除元素值

await aDriver.elementSubmit(formElement.elementId);
//提交表单元素
//参数一,元素id

元素属性

getText();
//返回元素的可见文本

getTagName();
//获取标签名称

getAttribute("content-desc");
//获取元素指定属性的值,如果未设置返回 null

isSelected();
//判断元素是否被选择,返回值,boolean类型

isEnabled();
//判断当前元素是否可用,返回值,boolean类型

isDisplayed();
//判断当前元素是否可见,返回值,boolean类型

getLocation();
//获取元素在页面或屏幕上的顶点坐标,返回x、y,整型

getSize();
//获取元素宽和高,返回width、heigh

await aDriver.getElementRect(element.elementId);
//获取元素位置,返回x、y、width、height,矩形位置和大小
//参数1,元素id

getCSSProperty("style");
//获取元素指定的CSS属性值

await aDriver.getElementLocationInView(element.elementId);
//获取元素在页面或屏幕上的顶点坐标,返回x、y坐标,整型

await aDriver.getActiveElement();
//获取当前会话的活动元素

isEqual(element);
//判断指定元素与参数一是否引用同一个元素,返回值,boolean类型
//参数一,元素object

文件操作

var data = new Buffer.from("Hello World").toString('base64');
await aDriver.pushFile('/data/local/tmp/file.txt', data);
//上文件到设备
//参数一,文件路径
//参数二,base64格式的字符串

await aDriver.pullFile('/data/local/tmp/file.txt');
//获取设备上文件内容,返回值base64格式的字符串

await aDriver.pullFolder('/data/local/tmp/');
//获取设备指定文件夹,返回 Base64编码的字符串,文件格式为zip

执行adb

await aDriver.executeAsync('mobile: shell', {'command':'screencap -p /sdcard/app.png'});
//异步执行命令

await aDriver.execute('mobile: shell', {'command':'screencap -p /sdcard/app.png'});
//执行adb命令示例

批量执行

const script = `
                let destElement = await driver.$('//android.widget.TextView[@text='移动网络']');
                await destElement.click();`;
await aDriver.driverScript(script);
//执行多条命令
//此指令能提高脚本效率

web/窗口操作

await aDriver.switchToWindow("handle");
//将焦点切换另一个窗口

await aDriver.closeWindow();
//关闭当前窗口

await aDriver.getWindowHandle();
//获取当前窗口句柄

await aDriver.getWindowHandles();
//获取所有窗口句柄列表

await aDriver.getTitle();
//获取当前页面标题

await aDriver.getWindowRect();
//获取窗口的位置

await aDriver.setWindowRect(0, 0, 800, 600);
//设置窗口位置

await aDriver.getWindowSize();
//获取窗口大小

await aDriver.setWindowSize(10, 10);
//设置窗口大小

await aDriver.maximizeWindow();
//最大化窗口

await aDriver.url("http://www.ai-bot.net");
//打开新的URL

await aDriver.getUrl();
//获取当前页面url

await aDriver.back();
//返回

await aDriver.forward();
//前一页

await aDriver.refresh();
//刷新

await aDriver.getCookies();
//获取cookie

await aDriver.setCookies([{
    name: 'myCookie',
    value: 'some content'
}]);
//设置Cookie

await aDriver.deleteCookies("cookie_name");
//删除指定名称的cookie

await aDriver.deleteCookies();
//删除当前页面所有的cookie

await aDriver.switchToFrame(3);
//切换指定iframe

await aDriver.switchToParentFrame();
//切换父iframe

手机截图

await aDriver.saveScreenshot(imagePath);
//截屏保存
//参数一,保存到电脑上的路径

await aDriver.takeScreenshot();
//截屏
//成功返回字符串,base64编码(PNG格式)

await aDriver.takeElementScreenshot(elementId, scroll);
//元素截图
//参数一,要截取的元素id
//参数二,布尔类型,可选参数,滚动到元素可见位置
//成功返回字符串,base64编码(PNG格式)