Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
8705109e
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3172
Star
105
Fork
804
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
93
列表
看板
标记
里程碑
合并请求
67
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
93
Issue
93
列表
看板
标记
里程碑
合并请求
67
合并请求
67
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录