提交 8705109e 编写于 作者: study夏羽's avatar study夏羽

新增program使用说明

上级 9d010cac
# API # 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 模块提供了控制页面的方法。
#### 属性 ### 属性
page.path #### page.path
页面路径。 页面路径。
`page.path: string` `page.path: string`
page.query #### page.query
页面参数。 页面参数。
`page.query: Object` `page.query: Object`
#### 方法 ### 方法
page.$ #### page.$
获取页面元素。 获取页面元素。
...@@ -40,7 +420,7 @@ page.$ ...@@ -40,7 +420,7 @@ page.$
``` ```
page.$$ #### page.$$
获取页面元素数组。 获取页面元素数组。
...@@ -62,7 +442,7 @@ page.$$ ...@@ -62,7 +442,7 @@ page.$$
console.log(elements.length) console.log(elements.length)
``` ```
page.waitFor #### page.waitFor
等待直到指定条件成立。 等待直到指定条件成立。
...@@ -93,7 +473,7 @@ page.waitFor ...@@ -93,7 +473,7 @@ page.waitFor
}) // 等待页面中 picker 元素数量大于 5 }) // 等待页面中 picker 元素数量大于 5
``` ```
page.data #### page.data
获取页面渲染数据。 获取页面渲染数据。
...@@ -113,7 +493,7 @@ page.data ...@@ -113,7 +493,7 @@ page.data
``` ```
page.setData #### page.setData
设置页面渲染数据。 设置页面渲染数据。
...@@ -135,7 +515,7 @@ page.setData ...@@ -135,7 +515,7 @@ page.setData
``` ```
page.size #### page.size
获取页面大小。 获取页面大小。
...@@ -158,7 +538,7 @@ page.size ...@@ -158,7 +538,7 @@ page.size
``` ```
page.scrollTop #### page.scrollTop
获取页面滚动位置。 获取页面滚动位置。
...@@ -173,7 +553,7 @@ page.scrollTop ...@@ -173,7 +553,7 @@ page.scrollTop
``` ```
page.callMethod #### page.callMethod
调用页面指定方法。 调用页面指定方法。
...@@ -196,21 +576,21 @@ page.callMethod ...@@ -196,21 +576,21 @@ page.callMethod
### Element ## Element
Element 模块提供了控制页面元素的方法。 Element 模块提供了控制页面元素的方法。
#### 属性 ### 属性
element.tagName #### element.tagName
标签名,小写。 标签名,小写。
`element.tagName: string` `element.tagName: string`
#### 方法 ### 方法
element.$ #### element.$
在元素范围内获取元素。 在元素范围内获取元素。
...@@ -232,7 +612,7 @@ element.$ ...@@ -232,7 +612,7 @@ element.$
``` ```
element.$$ #### element.$$
在元素范围内获取元素数组。 在元素范围内获取元素数组。
...@@ -254,7 +634,7 @@ element.$$ ...@@ -254,7 +634,7 @@ element.$$
``` ```
element.size #### element.size
获取元素大小。 获取元素大小。
...@@ -277,7 +657,7 @@ element.size ...@@ -277,7 +657,7 @@ element.size
``` ```
element.offset #### element.offset
获取元素绝对位置。 获取元素绝对位置。
...@@ -303,7 +683,7 @@ element.offset ...@@ -303,7 +683,7 @@ element.offset
``` ```
element.text #### element.text
获取元素文本。 获取元素文本。
...@@ -318,7 +698,7 @@ element.text ...@@ -318,7 +698,7 @@ element.text
``` ```
element.attribute #### element.attribute
获取元素特性。 获取元素特性。
...@@ -339,7 +719,7 @@ element.attribute ...@@ -339,7 +719,7 @@ element.attribute
``` ```
element.property #### element.property
获取元素属性。 获取元素属性。
...@@ -369,14 +749,14 @@ element.property ...@@ -369,14 +749,14 @@ element.property
``` ```
element.html #### element.html
获取元素 HTML。 获取元素 HTML。
`element.html(): Promise<string>` `element.html(): Promise<string>`
element.outerHtml #### element.outerHtml
同 html,只是会获取到元素本身。 同 html,只是会获取到元素本身。
...@@ -392,7 +772,7 @@ element.outerHtml ...@@ -392,7 +772,7 @@ element.outerHtml
``` ```
element.value #### element.value
获取元素值。 获取元素值。
...@@ -407,7 +787,7 @@ element.value ...@@ -407,7 +787,7 @@ element.value
``` ```
element.style #### element.style
获取元素样式值。 获取元素样式值。
...@@ -428,7 +808,7 @@ element.style ...@@ -428,7 +808,7 @@ element.style
``` ```
element.tap #### element.tap
点击元素。 点击元素。
...@@ -443,14 +823,14 @@ element.tap ...@@ -443,14 +823,14 @@ element.tap
``` ```
element.longpress #### element.longpress
长按元素。 长按元素。
`element.longpress(): Promise<void>` `element.longpress(): Promise<void>`
element.touchstart #### element.touchstart
手指开始触摸元素。 手指开始触摸元素。
...@@ -465,7 +845,7 @@ options 字段定义如下: ...@@ -465,7 +845,7 @@ options 字段定义如下:
|changedTouches|array|是|-|触摸事件,当前变化的触摸点信息的数组| |changedTouches|array|是|-|触摸事件,当前变化的触摸点信息的数组|
element.touchmove #### element.touchmove
手指触摸元素后移动。 手指触摸元素后移动。
...@@ -474,7 +854,7 @@ element.touchmove ...@@ -474,7 +854,7 @@ element.touchmove
options 字段同 touchstart。 options 字段同 touchstart。
element.touchend #### element.touchend
手指结束触摸元素。 手指结束触摸元素。
...@@ -515,7 +895,7 @@ options 字段同 touchstart。 ...@@ -515,7 +895,7 @@ options 字段同 touchstart。
``` ```
element.trigger #### element.trigger
触发元素事件。 触发元素事件。
...@@ -538,7 +918,7 @@ element.trigger ...@@ -538,7 +918,7 @@ element.trigger
该方法无法改变组件状态,仅触发响应方法,也无法触发用户操作事件,即 `tap``longpress` 等事件,请使用对应的其它方法调用。 该方法无法改变组件状态,仅触发响应方法,也无法触发用户操作事件,即 `tap``longpress` 等事件,请使用对应的其它方法调用。
element.input #### element.input
输入文本,仅 input、textarea 组件可以使用。 输入文本,仅 input、textarea 组件可以使用。
...@@ -559,7 +939,7 @@ element.input ...@@ -559,7 +939,7 @@ element.input
``` ```
element.callMethod #### element.callMethod
调用组件实例指定方法,仅自定义组件可以使用。 调用组件实例指定方法,仅自定义组件可以使用。
...@@ -581,7 +961,7 @@ element.callMethod ...@@ -581,7 +961,7 @@ element.callMethod
``` ```
element.data #### element.data
获取组件实例渲染数据,仅自定义组件可以使用。 获取组件实例渲染数据,仅自定义组件可以使用。
...@@ -602,7 +982,7 @@ element.data ...@@ -602,7 +982,7 @@ element.data
``` ```
element.setData #### element.setData
设置组件实例渲染数据,仅自定义组件可以使用。 设置组件实例渲染数据,仅自定义组件可以使用。
...@@ -625,7 +1005,7 @@ element.setData ...@@ -625,7 +1005,7 @@ element.setData
``` ```
element.callContextMethod #### element.callContextMethod
调用上下文 Context 对象方法,仅 video 组件可以使用。 调用上下文 Context 对象方法,仅 video 组件可以使用。
...@@ -648,21 +1028,21 @@ video 组件必须设置了 id 才能使用。 ...@@ -648,21 +1028,21 @@ video 组件必须设置了 id 才能使用。
``` ```
element.scrollWidth #### element.scrollWidth
获取滚动宽度,仅 scroll-view 组件可以使用。 获取滚动宽度,仅 scroll-view 组件可以使用。
`element.scrollWidth(): Promise<number>` `element.scrollWidth(): Promise<number>`
element.scrollHeight #### element.scrollHeight
获取滚动高度,仅 scroll-view 组件可以使用。 获取滚动高度,仅 scroll-view 组件可以使用。
`element.scrollHeight(): Promise<number>` `element.scrollHeight(): Promise<number>`
element.scrollTo #### element.scrollTo
滚动到指定位置,仅 scroll-view 组件可以使用。 滚动到指定位置,仅 scroll-view 组件可以使用。
...@@ -685,7 +1065,7 @@ element.scrollTo ...@@ -685,7 +1065,7 @@ element.scrollTo
``` ```
element.swipeTo #### element.swipeTo
滑动到指定滑块,仅 swiper 组件可以使用。 滑动到指定滑块,仅 swiper 组件可以使用。
...@@ -706,7 +1086,7 @@ element.swipeTo ...@@ -706,7 +1086,7 @@ element.swipeTo
``` ```
element.moveTo #### element.moveTo
移动视图容器,仅 movable-view 组件可以使用。 移动视图容器,仅 movable-view 组件可以使用。
...@@ -728,7 +1108,7 @@ element.moveTo ...@@ -728,7 +1108,7 @@ element.moveTo
``` ```
element.slideTo #### element.slideTo
滑动到指定数值,仅 slider 组件可以使用。 滑动到指定数值,仅 slider 组件可以使用。
...@@ -750,10 +1130,9 @@ element.slideTo ...@@ -750,10 +1130,9 @@ element.slideTo
``` ```
## 平台差异
**平台差异** ### program(全局对象)
#### program(全局对象)
|方法 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 | |方法 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 |
|-- |-- |-- |-- |-- |-- |-- | |-- |-- |-- |-- |-- |-- |-- |
...@@ -774,7 +1153,7 @@ element.slideTo ...@@ -774,7 +1153,7 @@ element.slideTo
|evaluate |x |x |x |√ |x |注入代码片段并返回执行结果 | |evaluate |x |x |x |√ |x |注入代码片段并返回执行结果 |
|exposeFunction |x |x |x |√ |x |在全局暴露方法,供小程序侧调用测试脚本中的方法 | |exposeFunction |x |x |x |√ |x |在全局暴露方法,供小程序侧调用测试脚本中的方法 |
#### Page ### Page
|属性 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 | |属性 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 |
|-- |-- |-- |-- |-- |-- |-- | |-- |-- |-- |-- |-- |-- |-- |
...@@ -792,7 +1171,7 @@ element.slideTo ...@@ -792,7 +1171,7 @@ element.slideTo
|scrollTop |√ |√ |√ |√ |√ |获取页面滚动位置 | |scrollTop |√ |√ |√ |√ |√ |获取页面滚动位置 |
|callMethod |√ |√ |√ |√ |√ |调用页面指定方法 | |callMethod |√ |√ |√ |√ |√ |调用页面指定方法 |
#### Element ### Element
|属性 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 | |属性 |APP-NVUE |APP-VUE|H5 |微信小程序 |百度小程序 |说明 |
|-- |-- |-- |-- |-- |-- |-- | |-- |-- |-- |-- |-- |-- |-- |
|tagName|√ |√ |√ |√ |√ |标签名,小写 | |tagName|√ |√ |√ |√ |√ |标签名,小写 |
...@@ -829,7 +1208,7 @@ element.slideTo ...@@ -829,7 +1208,7 @@ element.slideTo
|slideTo |√ |√ |√ |√ |x |滑动到指定数值,仅 slider 组件可以使用 | |slideTo |√ |√ |√ |√ |x |滑动到指定数值,仅 slider 组件可以使用 |
#### 测试平台判断 ### 测试平台判断
``` ```
if (process.env.UNI_PLATFORM === "h5") {} if (process.env.UNI_PLATFORM === "h5") {}
if (process.env.UNI_PLATFORM === "app-plus") {} if (process.env.UNI_PLATFORM === "app-plus") {}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册