跳到正文
云点iOS

工具

日志、等待、时间、随机数、Base64 和网络请求。三级日志都会上报到任务日志,在控制台里实时可见。

功能概览

  • ·logd / logi / loge 三级日志,网页日志面板里调试是灰色、错误是红色
  • ·randomInt / randomFloat / randomChoice 给等待、点击和文案加上随机性
  • ·httpGet / httpPost 出错不抛异常,统一返回 { ok, status, text, json, headers, error }

logd#

调试日志:排查问题时看的细节。也会上报,日志面板里显示为灰色。

typescript
logd(message: any): void;

参数

参数名类型是否必填默认值描述
messageany是—要记的内容。对象会转成 JSON,其余转成字符串。

注意事项

  • 循环里别打太多:服务端每个任务只留最近一段日志,打多了会把重要的挤掉。

示例

javascript
logd(client.windowSize());

参见 logi、loge

logi#

普通日志:脚本走到了哪一步、拿到了什么结果。

typescript
logi(message: any): void;

参数

参数名类型是否必填默认值描述
messageany是—要记的内容。对象会转成 JSON,其余转成字符串。

示例

javascript
logi('第一步完成');

参见 logd、loge

loge#

错误日志:出错、失败。日志面板里标红。

typescript
loge(message: any): void;

参数

参数名类型是否必填默认值描述
messageany是—要记的内容。对象会转成 JSON,其余转成字符串。

示例

javascript
loge('登录按钮一直没有出现');

参见 logi

setClickLog#

打开或关掉点击日志。clickElement / clickImage / clickText 默认会把点到、没找到记进任务日志;循环里点得多、不想刷屏时关掉。

typescript
setClickLog(on: boolean): boolean;

参数

参数名类型是否必填默认值描述
onboolean是—true 记,false 不记。

返回值

类型描述
boolean改之前是开还是关。

注意事项

  • 只管这三个函数。client.click 这类按坐标点的本来就不记日志。

示例

javascript
setClickLog(false);
for (var i = 0; i < 50; i++) {
  clickElement('label', '下一个', 1);
}
setClickLog(true);

参见 clickElement、clickImage、clickText

sleep#

等待指定的秒数。任务被停止时立即返回。

typescript
sleep(seconds: number): void;

参数

参数名类型是否必填默认值描述
secondsnumber是—等多少秒,可以是小数。

示例

javascript
sleep(1.5);

参见 randomFloat、shouldStop

getNowTimestamp#

现在的 Unix 时间戳,单位是秒(整数)。

typescript
getNowTimestamp(): number;

返回值

类型描述
number从 1970-01-01 00:00:00 UTC 到现在过了多少秒。

注意事项

  • 算过了多久:先记下开始时的时间戳,之后两次相减就是经过的秒数。要毫秒用 Date.now()。

示例

javascript
var start = getNowTimestamp();
sleep(2);
logi(getNowTimestamp() - start);

参见 getNowTime、sleep

getNowTime#

现在的时间,格式是 2026-10-01 14:05:09,按设备的本地时区。

typescript
getNowTime(): string;

返回值

类型描述
string「年-月-日 时:分:秒」,月、日、时、分、秒不足两位的补零。

注意事项

  • 只要日期取前 10 个字符:getNowTime().slice(0, 10);只要时分:getNowTime().slice(11, 16)。

示例

javascript
logi('开始于 ' + getNowTime());

参见 getNowTimestamp

randomInt#

随机整数,两端都能取到:randomInt(1, 6) 就像掷骰子。

typescript
randomInt(min: number, max: number): number;

参数

参数名类型是否必填默认值描述
minnumber是—下界(含)。
maxnumber是—上界(含)。

返回值

类型描述
number[min, max] 之间的整数。上下界写反也不会出错。

示例

javascript
var n = randomInt(1, 6);

参见 randomFloat、randomChoice

randomFloat#

随机小数,两端都能取到,默认保留 1 位小数:randomFloat(1.5, 3) 可能是 1.5、2.3、3。比如每轮之间随机停一会儿:sleep(randomFloat(1.5, 3))。

typescript
randomFloat(min: number, max: number, digits?: number): number;

参数

参数名类型是否必填默认值描述
minnumber是—下界(含)。
maxnumber是—上界(含)。
digitsnumber否1保留几位小数,0~10 的整数。

返回值

类型描述
number[min, max] 之间、保留 digits 位的小数。上下界写反也不会出错。

异常

异常类型触发条件
WDAErrorINVALID_ARGUMENTdigits 不是 0~10 的整数。

注意事项

  • 范围太窄、这个位数下取不出两个不同的值时,会自动多留几位:randomFloat(0.45, 0.55) 保留 1 位只有 0.5 一个值,所以得到的是 0.47、0.52 这样的两位小数。结果始终落在 [min, max] 里。
  • 按屏幕比例取坐标这类要细的值,记得写上位数:client.click(randomFloat(0.3, 0.7, 3), randomFloat(0.4, 0.6, 3))。只保留 1 位的话,落点只有 0.3、0.4 … 这几个。

示例

javascript
sleep(randomFloat(1.5, 3));
var x = randomFloat(0.2, 0.8, 3);

参见 randomInt、randomChoice、sleep

randomChoice#

从数组里随机挑一个,每一项机会均等。

typescript
randomChoice<T>(list: T[]): T | null;

参数

参数名类型是否必填默认值描述
listT[]是—候选项。

返回值

类型描述
T | null挑中的那一项;空数组返回 null。

异常

异常类型触发条件
WDAErrorINVALID_ARGUMENT传的不是数组,比如把候选项一个个写成了参数。

示例

javascript
var greeting = randomChoice(['你好', '早上好', '嗨']);
logi(greeting);

参见 randomInt、randomFloat

base64Encode#

把文字编码成 Base64,按 UTF-8,中文不乱码。

typescript
base64Encode(text: string): string;

参数

参数名类型是否必填默认值描述
textstring是—原文。

返回值

类型描述
stringBase64 字符串。

示例

javascript
var b64 = base64Encode('hello');

参见 base64Decode

base64Decode#

把 Base64 解码回文字(按 UTF-8)。

typescript
base64Decode(base64: string): string;

参数

参数名类型是否必填默认值描述
base64string是—Base64 字符串。

返回值

类型描述
string解码后的文字。

示例

javascript
var text = base64Decode('aGVsbG8=');

参见 base64Encode

httpGet#

发 GET 请求。

typescript
httpGet(url: string, timeoutSec?: number, headers?: Record<string, string>): HttpResult;

type HttpResult = {
  ok: boolean;
  status: number;
  text: string;
  json: any;
  headers: Record<string, string>;
  error: string;
};

参数

参数名类型是否必填默认值描述
urlstring是—完整地址,以 http:// 或 https:// 开头。参数直接写进地址,中文、空格会自动编码。
timeoutSecnumber否15最多等几秒。
headersRecord<string, string>否—请求头,例如 { Authorization: 'Bearer xxx' }。

返回值

类型描述
HttpResult{ ok, status, text, json, headers, error }。ok 表示 2xx;status 为 0 表示没拿到响应(网络不通、超时、任务被停止),原因在 error;响应是 JSON 时 json 已经解析好,否则为 null;headers 的名字一律小写。出错不抛异常,看 ok 判断。

异常

异常类型触发条件
WDAErrorINVALID_ARGUMENT地址不是 http(s) 开头、等待秒数不是数字或超过 600、请求头不是对象。

示例

javascript
var r = httpGet('https://api.example.com/items?page=1');
if (r.ok) {
  logi(r.json.items.length);
} else {
  loge(r.status + ' ' + r.error);
}

参见 httpPost

httpPost#

发 POST 请求。body 是字符串就原样发(像 'a=1&b=2' 按表单、像 JSON 按 JSON);是对象就转成 JSON 发。

typescript
httpPost(url: string, body?: string | object, timeoutSec?: number, headers?: Record<string, string>): HttpResult;

参数

参数名类型是否必填默认值描述
urlstring是—完整地址,以 http:// 或 https:// 开头。参数直接写进地址,中文、空格会自动编码。
bodystring | object否—请求体。自己写了 Content-Type 请求头就不会被覆盖。
timeoutSecnumber否15最多等几秒。
headersRecord<string, string>否—请求头,例如 { Authorization: 'Bearer xxx' }。

返回值

类型描述
HttpResult{ ok, status, text, json, headers, error }。ok 表示 2xx;status 为 0 表示没拿到响应(网络不通、超时、任务被停止),原因在 error;响应是 JSON 时 json 已经解析好,否则为 null;headers 的名字一律小写。出错不抛异常,看 ok 判断。

异常

异常类型触发条件
WDAErrorINVALID_ARGUMENT地址不是 http(s) 开头、等待秒数不是数字或超过 600、请求头不是对象。

注意事项

  • 脚本发出的请求会去往脚本里写的地址,由脚本作者负责这些数据的去向是否合规。

示例

javascript
var r = httpPost('https://example.com/report', 'device=' + getDeviceId() + '&status=ok');
if (!r.ok) {
  loge(r.status + ' ' + r.error);
}

参见 httpGet