• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import { Component, Driver, ON } from '@kit.TestKit';
2import { expect } from '@ohos/hypium';
3import { curves } from '@kit.ArkUI';
4import { Point } from '@ohos.UiTest';
5
6const driver = Driver.create();
7const TAG = 'utils'
8
9export class KeyStruct {
10  public key: string;
11  public type: JsonType;
12
13  constructor(key: string, type: JsonType) {
14    this.key = key;
15    this.type = type;
16  }
17}
18
19export enum JsonType {
20  value,
21  obj,
22  array
23}
24
25export enum ToggleClick {
26  Open,
27  Close,
28}
29
30export enum Slide {
31  start = 1,
32  end = 0,
33}
34
35export interface toggleClickType {
36  toggleClickType: ToggleClick
37  toggleClickObj: number
38}
39
40export interface radioOperateType {
41  radioClickObj: number
42  toggleClick?: toggleClickType
43  id?: string
44  arr?: Array<KeyStruct>
45  assertEqual?: string
46}
47
48export interface sliderOperateType {
49  slideStar: Slide,
50  toggleClick?: toggleClickType
51  id?: string,
52  arr?: Array<KeyStruct>
53  assertEqual?: string
54}
55
56export interface buttonOperateType {
57  buttonClickObj: number,
58  toggleClick?: toggleClickType
59  id?: string
60  arr?: Array<KeyStruct>
61  assertEqual?: string
62}
63
64// 通过id验证有没有这个组件 有的话点击一下
65export async function checkButtonAndClickWithID(text: string) {
66  let atom = text;
67  await driver.assertComponentExist(ON.id(atom));
68  let button = await driver.findComponent(ON.id(atom));
69  await button.click();
70  await driver.delayMs(1000);
71  console.info(TAG, atom);
72}
73
74// 向下滑动一个Block的距离
75export async function swipeColumn() {
76  let toggle:Component[] = await driver.findComponents(ON.type('Toggle'))
77  let width:Point = await toggle[0].getBoundsCenter()
78  let width2:Point = await toggle[1].getBoundsCenter()
79
80  let scroller: Scroller | undefined = AppStorage.get('scroller')
81
82  let curve = curves.interpolatingSpring(10, 1, 228, 30)
83
84  if (scroller) {
85    const yOffset: number = scroller.currentOffset().yOffset;
86    scroller.scrollTo({
87      xOffset: 0,
88      yOffset: yOffset + px2vp(width2.y - width.y),
89      animation: { duration: 1000, curve: curve }
90    })
91  }
92
93
94  await driver.delayMs(1000);
95}
96
97// 获取组件属性具体值
98export function getJson(arr: Array<KeyStruct> | undefined, json: string) {
99  if (!arr) {
100    return undefined
101  }
102
103  let obj: object = JSON.parse(json);
104  let lastType = JsonType.obj;
105
106  for (let i = 0; i < arr.length; i++) {
107    const keyStruct: KeyStruct = arr[i];
108    try {
109      if (JsonType.array == lastType) {
110        obj = obj[parseInt(keyStruct.key)];
111      } else {
112        obj = obj[keyStruct.key];
113      }
114    } catch (e) {
115      console.error(e);
116      return undefined;
117    }
118    lastType = keyStruct.type;
119  }
120  return obj;
121
122}
123
124// 根据参数点击RadioBlock项
125export async function radioClick(radioOperate: radioOperateType) {
126
127  if (radioOperate.toggleClick?.toggleClickType != undefined &&
128    radioOperate.toggleClick?.toggleClickType == ToggleClick.Open) {
129
130    let toggle:Component[] = await driver.findComponents(ON.type('Toggle').within(ON.type('Scroll')))
131    await toggle[radioOperate.toggleClick.toggleClickObj].click()
132    await driver.delayMs(1000);
133
134  }
135
136  if (radioOperate.radioClickObj != undefined) {
137    let radio:Component[] = await driver.findComponents(ON.type('Radio').within(ON.type('Scroll')).clickable(true))
138    await radio[radioOperate.radioClickObj].click(); // 等待点击操作完成
139    await driver.delayMs(1000);
140  }
141
142  if (radioOperate.id) {
143
144    let idValue = getInspectorByKey(radioOperate.id)
145
146    console.log(idValue)
147
148    let result = getJson(radioOperate.arr, idValue)
149
150    expect(result).assertEqual(radioOperate.assertEqual);
151
152    console.log(TAG, result, 'expect', radioOperate.assertEqual)
153
154  }
155
156  if (radioOperate.toggleClick?.toggleClickType != undefined &&
157    radioOperate.toggleClick?.toggleClickType == ToggleClick.Close) {
158    let toggle:Component[] = await driver.findComponents(ON.type('Toggle').within(ON.type('Scroll')))
159    await toggle[radioOperate.toggleClick.toggleClickObj].click()
160    await driver.delayMs(1000);
161  }
162
163}
164
165// 根据参数滑动SliderBlock
166export async function sliderDrag(sliderOperate: sliderOperateType) {
167
168  if (sliderOperate.toggleClick?.toggleClickType != undefined &&
169    sliderOperate.toggleClick?.toggleClickType == ToggleClick.Open) {
170    let toggle:Component[] = await driver.findComponents(ON.type('Toggle').within(ON.type('Scroll')))
171    await toggle[sliderOperate.toggleClick.toggleClickObj].click()
172    await driver.delayMs(1000);
173  }
174
175  let slider:Component = await driver.findComponent(ON.type('Slider').within(ON.type('Scroll')).scrollable(true))
176  let point = await slider.getBoundsCenter();
177  let rect = await slider.getBounds();
178
179  if (sliderOperate.slideStar) {
180    await driver.drag(rect.left, point.y, rect.right, point.y)
181    await driver.delayMs(1000);
182  } else {
183    await driver.drag(rect.right, point.y, rect.left, point.y)
184    await driver.delayMs(1000);
185  }
186
187  if (sliderOperate.id) {
188    let idValue = getInspectorByKey(sliderOperate.id)
189
190    let result = getJson(sliderOperate.arr, idValue)
191
192    expect(result).assertEqual(sliderOperate.assertEqual);
193    console.log(TAG, result, 'expect', sliderOperate.assertEqual)
194  }
195
196  if (sliderOperate.toggleClick?.toggleClickType != undefined &&
197    sliderOperate.toggleClick.toggleClickType == ToggleClick.Close) {
198    let toggle:Component[] = await driver.findComponents(ON.type('Toggle').within(ON.type('Scroll')))
199    await toggle[sliderOperate.toggleClick.toggleClickObj].click()
200    await driver.delayMs(1000);
201  }
202
203}
204
205// 根据参数点击ButtonBlock项
206export async function buttonClick(buttonOperate: buttonOperateType) {
207
208  if (buttonOperate.toggleClick?.toggleClickType != undefined &&
209    buttonOperate.toggleClick?.toggleClickType == ToggleClick.Open) {
210    let toggle:Component[] = await driver.findComponents(ON.type('Toggle').within(ON.type('Scroll')))
211    await toggle[buttonOperate.toggleClick.toggleClickObj].click()
212    await driver.delayMs(1000);
213  }
214  let button:Component[] = await driver.findComponents(ON.type('Button').within(ON.type('Scroll')).clickable(true))
215
216  await button[buttonOperate.buttonClickObj].click()
217  await driver.delayMs(1000);
218
219  if (buttonOperate.id) {
220    let idValue = getInspectorByKey(buttonOperate.id)
221
222    let result = getJson(buttonOperate.arr, idValue)
223
224    expect(result).assertEqual(buttonOperate.assertEqual);
225
226    console.log(TAG, result, 'expect', buttonOperate.assertEqual)
227  }
228
229  if (buttonOperate.toggleClick?.toggleClickType != undefined &&
230    buttonOperate.toggleClick?.toggleClickType == ToggleClick.Close) {
231    let toggle:Component[] = await driver.findComponents(ON.type('Toggle').within(ON.type('Scroll')))
232    await toggle[buttonOperate.toggleClick.toggleClickObj].click()
233    await driver.delayMs(1000);
234  }
235
236}
237