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