Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_36567140
unidocs-zh
提交
8705109e
U
unidocs-zh
项目概览
qq_36567140
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8705109e
编写于
7月 12, 2022
作者:
study夏羽
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增program使用说明
上级
9d010cac
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
430 addition
and
51 deletion
+430
-51
docs/worktile/auto/api.md
docs/worktile/auto/api.md
+430
-51
未找到文件。
docs/worktile/auto/api.md
浏览文件 @
8705109e
# API
### Page
## program
program 是uni-automator自动注入的全局对象
### 方法
#### program.pageStack
获取页面堆栈。
`program.pageStack(): Promise<Page[]> `
#### program.navigateTo
保留当前页面,跳转到应用内的某个页面,同
`uni.navigateTo`
。
`program.navigateTo(url: string): Promise<Page>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|url|string|是|-|需要跳转的应用内非 tabBar 的页面的路径|
示例代码:
```
const page = await program.navigateTo('/pages/index/index')
console.log(page.path)// -> 'page/index/index'
```
#### program.redirectTo
关闭当前页面,跳转到应用内的某个页面,同
`uni.redirectTo`
。
`program.redirectTo(url: string): Promise<Page>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|url|string|是|-|需要跳转的应用内非 tabBar 的页面的路径|
#### program.navigateBack
关闭当前页面,返回上一页面或多级页面,同
`uni.navigateBack`
。
`program.navigateBack(): Promise<Page>`
#### program.reLaunch
关闭所有页面,打开到应用内的某个页面,同
`uni.reLaunch`
。
`program.reLaunch(url: string): Promise<Page>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|url|string|是|-|需要跳转的应用内页面路径|
#### program.switchTab
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面,同
`uni.switchTab`
。
`program.switchTab(url: string): Promise<Page>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|url|string|是|-|需要跳转的 tabBar 页面的路径|
#### program.currentPage
获取当前页面。
`program.currentPage(): Promise<Page>`
#### program.systemInfo
获取系统信息,同
`uni.getSystemInfo`
。
`program.systemInfo(): Promise<Object>`
示例代码:
```
const systemInfo = await program.systemInfo()
if (systemInfo.uniPlatform === 'devtools') {
// Do something
}
```
#### program.pageScrollTo
将页面滚动到目标位置,同
`uni.pageScrollTo`
。
`program.pageScrollTo(scrollTop: number): Promise<void>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|scrollTop|number|是|-|滚动到页面的目标位置,单位 px|
示例代码:
```
const page = await program.currentPage()
await program.pageScrollTo(20)
console.log(await page.scrollTop())
```
#### program.callUniMethod
调用 uni 对象上的指定方法。
`program.callUniMethod(method: string, ...args: any[]): Promise<any>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|method|string|是|-|需要调用的方法名|
|...args|
`array<any>`
|否|-|方法参数|
调用异步方法时无需传入 success 及 fail 回调函数。
示例代码:
```
await program.callUniMethod('setStorage', {
key: 'test',
data: '123456'
})
const data = await program.callUniMethod('getStorageSync', 'test')
console.log(data) // -> '123456'
```
#### program.screenshot
对当前页面截图,目前只有开发者工具模拟器支持,客户端无法使用。
`program.screenshot(options?: Object): Promise<string | void>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|options|Object|否|-|截图选项|
如果不传 options,该方法返回图片数据的 base64 编码。
options 字段定义如下:
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|path|string|是|-|图片保存路径|
```
it('screenshot', async () => {
await program.screenshot({
path: "static/screenshot.png" // 默认项目根目录
})
});
```
#### program.mockUniMethod
覆盖 uni 对象上指定方法的调用结果。
利用该接口,你可以很方便地直接指定
`uni.chooseLocation`
等调用系统组件的返回结果。
`program.mockUniMethod(method: string, result: any): Promise<void> `
参数说明
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|method|string|是|-|需要覆盖的方法名|
|result|any|是|-|指定调用结果|
`program.mockUniMethod(method: string, fn: Function | string, ...args: any[]): Promise<void>`
参数说明
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|method|string|是|-|需要覆盖的方法名|
|fn|Function string|是|-|处理返回函数|
|...args|
`array<any>`
|否|-|传入参数|
> fn 同 program.evaluate 的 appFunction 参数一样,无法使用闭包来引用外部变量。此外,你还可以在方法内使用 this.origin 来调用原始方法。
示例代码:
```
await program.mockUniMethod('showModal', {
confirm: true,
cancel: false
})
await program.mockUniMethod(
'getStorageSync',
function(key, defVal) {
if (key === 'name') return 'redhoodsu'
if (key === 'sex') return 'male'
return defVal
},
'unknown',
)
// 调用 uni.getStorageSync('name') 返回 'redhoodsu'
// 更改 getSystemInfo 中的 platform 字段
await program.mockUniMethod(
'getSystemInfo',
function(obj, platform) {
return new Promise(resolve => {
// origin 指向原始方法
this.origin({
success(res) {
res.platform = platform
resolve(res)
},
})
})
},
'test',
)
```
#### program.restoreUniMethod
重置 uni 指定方法,消除 mockUniMethod 调用的影响。
`program.restoreUniMethod(method: string): Promise<void>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|method|string|是|-|需要覆盖的方法名|
示例代码:
```
console.log(await program.callUniMethod('getStorageSync', 'test')) // -> ''
await program.mockUniMethod('getStorageSync', 'mockValue')
console.log(await program.callUniMethod('getStorageSync', 'test')) // -> 'mockValue'
await program.restoreUniMethod('getStorageSync')
console.log(await program.callUniMethod('getStorageSync', 'test')) // -> ''
```
#### program.evaluate
注入代码片段并返回执行结果。(仅微信小程序支持)
`program.evaluate(appFunction: Function | string, ...args: any[]): Promise<any>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|appFunction|Function string|是|-|代码片段|
|...args|
`array<any>`
|否|-|执行时传入参数|
> appFunction 最终会被序列化传递到开发者工具,因此你无法在函数中利用闭包来引用外部变量。也就是说,传递 function () {} 函数事实上等同于传递其字符串。
示例代码:
```
let systemInfo = await program.evaluate(() => {
return new Promise(resolve => {
uni.getSystemInfo({
success(result) {
resolve(result)
}
})
})
})
systemInfo = await program.evaluate(() => {
return uni.getSystemInfoSync()
})
console.log(systemInfo)
await program.evaluate(key => {
uni.setStorageSync(key, 'test')
}, 'test')
const hasLogin = await program.evaluate(() => getApp().globalData.hasLogin)
console.log(hasLogin)
```
#### program.testAccounts
获取多账号调试中已添加的用户列表。(仅微信小程序支持)
`program.testAccounts(): Promise<Account[]>`
Account 字段定义如下:
|字段|类型|说明|
|:-:|:-:|:-:|
|nickName|string|用户昵称|
|openid|string|账号 openid|
示例代码:
```
const testAccounts = await program.testAccounts()
for (let i = 0, len = testAccounts.length; i < len; i++) {
const miniProgram = await automator.launch({
projectPath: 'path/to/project',
account: testAccounts[i].openid
})
// 控制多个用户登录的不同小程序
}
```
#### program.exposeFunction
在全局暴露方法,供小程序侧调用测试脚本中的方法(仅微信小程序支持)
`program.exposeFunction(name: string, bindingFunction: Function): Promise<void>`
|字段|类型|必填|默认值|说明|
|:-:|:-:|:-:|:-:|:-:|
|name|string|是|-|全局方法名|
|bindingFunction|Function|是|-|脚本方法|
> 你可以利用该方法来监听事件,不支持在小程序侧获取调用结果。
示例代码:
```
await program.exposeFunction('onAppShow', options => {
// Do something...
})
await program.evaluate(function() {
uni.onAppShow(function(options) {
onAppShow(options)
})
})
```
## Page
Page 模块提供了控制页面的方法。
###
#
属性
### 属性
page.path
####
page.path
页面路径。
`page.path: string`
page.query
####
page.query
页面参数。
`page.query: Object`
###
#
方法
### 方法
page.$
####
page.$
获取页面元素。
...
...
@@ -40,7 +420,7 @@ page.$
```
page.$$
####
page.$$
获取页面元素数组。
...
...
@@ -62,7 +442,7 @@ page.$$
console.log(elements.length)
```
page.waitFor
####
page.waitFor
等待直到指定条件成立。
...
...
@@ -93,7 +473,7 @@ page.waitFor
}) // 等待页面中 picker 元素数量大于 5
```
page.data
####
page.data
获取页面渲染数据。
...
...
@@ -113,7 +493,7 @@ page.data
```
page.setData
####
page.setData
设置页面渲染数据。
...
...
@@ -135,7 +515,7 @@ page.setData
```
page.size
####
page.size
获取页面大小。
...
...
@@ -158,7 +538,7 @@ page.size
```
page.scrollTop
####
page.scrollTop
获取页面滚动位置。
...
...
@@ -173,7 +553,7 @@ page.scrollTop
```
page.callMethod
####
page.callMethod
调用页面指定方法。
...
...
@@ -196,21 +576,21 @@ page.callMethod
##
#
Element
## Element
Element 模块提供了控制页面元素的方法。
###
#
属性
### 属性
element.tagName
####
element.tagName
标签名,小写。
`element.tagName: string`
###
#
方法
### 方法
element.$
####
element.$
在元素范围内获取元素。
...
...
@@ -232,7 +612,7 @@ element.$
```
element.$$
####
element.$$
在元素范围内获取元素数组。
...
...
@@ -254,7 +634,7 @@ element.$$
```
element.size
####
element.size
获取元素大小。
...
...
@@ -277,7 +657,7 @@ element.size
```
element.offset
####
element.offset
获取元素绝对位置。
...
...
@@ -303,7 +683,7 @@ element.offset
```
element.text
####
element.text
获取元素文本。
...
...
@@ -318,7 +698,7 @@ element.text
```
element.attribute
####
element.attribute
获取元素特性。
...
...
@@ -339,7 +719,7 @@ element.attribute
```
element.property
####
element.property
获取元素属性。
...
...
@@ -369,14 +749,14 @@ element.property
```
element.html
####
element.html
获取元素 HTML。
`element.html(): Promise<string>`
element.outerHtml
####
element.outerHtml
同 html,只是会获取到元素本身。
...
...
@@ -392,7 +772,7 @@ element.outerHtml
```
element.value
####
element.value
获取元素值。
...
...
@@ -407,7 +787,7 @@ element.value
```
element.style
####
element.style
获取元素样式值。
...
...
@@ -428,7 +808,7 @@ element.style
```
element.tap
####
element.tap
点击元素。
...
...
@@ -443,14 +823,14 @@ element.tap
```
element.longpress
####
element.longpress
长按元素。
`element.longpress(): Promise<void>`
element.touchstart
####
element.touchstart
手指开始触摸元素。
...
...
@@ -465,7 +845,7 @@ options 字段定义如下:
|changedTouches|array|是|-|触摸事件,当前变化的触摸点信息的数组|
element.touchmove
####
element.touchmove
手指触摸元素后移动。
...
...
@@ -474,7 +854,7 @@ element.touchmove
options 字段同 touchstart。
element.touchend
####
element.touchend
手指结束触摸元素。
...
...
@@ -515,7 +895,7 @@ options 字段同 touchstart。
```
element.trigger
####
element.trigger
触发元素事件。
...
...
@@ -538,7 +918,7 @@ element.trigger
该方法无法改变组件状态,仅触发响应方法,也无法触发用户操作事件,即
`tap`
,
`longpress`
等事件,请使用对应的其它方法调用。
element.input
####
element.input
输入文本,仅 input、textarea 组件可以使用。
...
...
@@ -559,7 +939,7 @@ element.input
```
element.callMethod
####
element.callMethod
调用组件实例指定方法,仅自定义组件可以使用。
...
...
@@ -581,7 +961,7 @@ element.callMethod
```
element.data
####
element.data
获取组件实例渲染数据,仅自定义组件可以使用。
...
...
@@ -602,7 +982,7 @@ element.data
```
element.setData
####
element.setData
设置组件实例渲染数据,仅自定义组件可以使用。
...
...
@@ -625,7 +1005,7 @@ element.setData
```
element.callContextMethod
####
element.callContextMethod
调用上下文 Context 对象方法,仅 video 组件可以使用。
...
...
@@ -648,21 +1028,21 @@ video 组件必须设置了 id 才能使用。
```
element.scrollWidth
####
element.scrollWidth
获取滚动宽度,仅 scroll-view 组件可以使用。
`element.scrollWidth(): Promise<number>`
element.scrollHeight
####
element.scrollHeight
获取滚动高度,仅 scroll-view 组件可以使用。
`element.scrollHeight(): Promise<number>`
element.scrollTo
####
element.scrollTo
滚动到指定位置,仅 scroll-view 组件可以使用。
...
...
@@ -685,7 +1065,7 @@ element.scrollTo
```
element.swipeTo
####
element.swipeTo
滑动到指定滑块,仅 swiper 组件可以使用。
...
...
@@ -706,7 +1086,7 @@ element.swipeTo
```
element.moveTo
####
element.moveTo
移动视图容器,仅 movable-view 组件可以使用。
...
...
@@ -728,7 +1108,7 @@ element.moveTo
```
element.slideTo
####
element.slideTo
滑动到指定数值,仅 slider 组件可以使用。
...
...
@@ -750,10 +1130,9 @@ element.slideTo
```
## 平台差异
**平台差异**
#### program(全局对象)
### program(全局对象)
|方法 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 |
|-- |-- |-- |-- |-- |-- |-- |
...
...
@@ -774,7 +1153,7 @@ element.slideTo
|evaluate |x |x |x |√ |x |注入代码片段并返回执行结果 |
|exposeFunction |x |x |x |√ |x |在全局暴露方法,供小程序侧调用测试脚本中的方法 |
###
#
Page
### Page
|属性 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 |
|-- |-- |-- |-- |-- |-- |-- |
...
...
@@ -792,7 +1171,7 @@ element.slideTo
|scrollTop |√ |√ |√ |√ |√ |获取页面滚动位置 |
|callMethod |√ |√ |√ |√ |√ |调用页面指定方法 |
###
#
Element
### Element
|属性 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 |
|-- |-- |-- |-- |-- |-- |-- |
|tagName|√ |√ |√ |√ |√ |标签名,小写 |
...
...
@@ -829,7 +1208,7 @@ element.slideTo
|slideTo |√ |√ |√ |√ |x |滑动到指定数值,仅 slider 组件可以使用 |
###
#
测试平台判断
### 测试平台判断
```
if (process.env.UNI_PLATFORM === "h5") {}
if (process.env.UNI_PLATFORM === "app-plus") {}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录