js-apis-uitest.md 32.3 KB
Newer Older
1 2
# UiTest

R
ry 已提交
3 4 5 6
UiTest提供模拟UI操作的能力,供开发者在测试场景使用,主要支持如点击、双击、长按、滑动等UI操作能力。

该模块提供以下功能:

R
modify  
ry 已提交
7
- [By](#by):提供控件特征描述能力,用于控件筛选匹配查找。
R
modify  
ry 已提交
8
- [UiComponent](#uicomponent):代表UI界面上的指定控件,提供控件属性获取,控件点击,滑动查找,文本注入等能力。
R
modify  
ry 已提交
9
- [UiDriver](#uidriver):入口类,提供控件匹配/查找,按键注入,坐标点击/滑动,截图等能能力。
R
ry 已提交
10

11 12 13 14 15 16 17 18 19 20 21 22 23
>**说明:**
>
>本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。


## 导入模块 

```
import {UiDriver,BY,MatchPattern} from '@ohos.uitest'
```

## By

R
ry 已提交
24
UiTest框架通过By类提供了丰富的控件特征描述API,用于进行控件筛选来匹配/查找出目标控件。<br>
25
By提供的API能力具有以下几个特点:<br>1、支持单属性匹配和多属性组合匹配,例如同时指定目标控件text和id。<br>2、控件属性支持多种匹配模式。<br>3、支持控件绝对定位,相对定位,可通过[By.isBefore](#byisbefore)[By.isAfter](#byisafter)等API限定邻近控件特征进行辅助定位。<br>By类提供的所有API均为同步接口,建议使用者通过静态构造器BY来链式创建By对象。
26 27 28 29

```js
BY.text('123').type('button')
```
30 31 32

### By.text

33
text(txt: string, pattern?: MatchPattern): By
34 35 36 37 38 39 40

指定目标控件文本属性,支持多种匹配模式,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

41 42 43 44
| 参数名  | 类型         | 必填 | 说明                                              |
| ------- | ------------ | ---- | ------------------------------------------------- |
| txt     | string       | 是   | 指定控件文本,用于匹配目标控件文本。              |
| pattern | MatchPattern | 否   | 指定的文本匹配模式,默认为[EQUALS](#matchpattern) |
45 46 47 48 49 50 51 52 53

**返回值:**

| 类型 | 说明           |
| ---- | -------------- |
| By   | 返回By对象自身 |

**示例:**

54 55
```js
let by = BY.text('123') //使用静态构造器BY创建by对象,指定目标控件的text属性。
56 57 58 59 60
```


### By.key

61
key(key: string): By
62 63 64 65 66 67 68

指定目标控件key值属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

69 70 71
| 参数名 | 类型   | 必填 | 说明              |
| ------ | ------ | ---- | ----------------- |
| key    | string | 是   | 指定控件的Key值。 |
72 73 74

**返回值:**

75 76 77
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
78 79 80

**示例:**

81 82
```js
let by = BY.key('123') //使用静态构造器BY创建by对象,指定目标控件的key值属性。
83 84 85 86 87
```


### By.id

88
id(id: number): By
89 90 91 92 93 94 95

指定目标控件id属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

96 97 98
| 参数名 | 类型   | 必填 | 说明             |
| ------ | ------ | ---- | ---------------- |
| id     | number | 是   | 指定控件的id值。 |
99 100 101

**返回值:**

102 103 104
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
105 106 107

**示例:**

108 109
```js
let by = BY.id(123) //使用静态构造器BY创建by对象,指定目标控件的id属性。
110 111 112 113 114
```


### By.type

115
type(tp: string): By
116 117 118 119 120 121 122

指定目标控件的控件类型属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

123 124 125
| 参数名 | 类型   | 必填 | 说明           |
| ------ | ------ | ---- | -------------- |
| tp     | string | 是   | 指定控件类型。 |
126 127 128

**返回值:**

129 130 131
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
132 133 134

**示例:**

135 136
```js
let by = BY.type('button') //使用静态构造器BY创建by对象,指定目标控件的控件类型属性。
137 138 139 140 141
```


### By.clickable

142
clickable(b?: bool): By
143 144 145 146 147 148 149

指定目标控件的可点击状态属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

150 151 152
| 参数名 | 类型 | 必填 | 说明                             |
| ------ | ---- | ---- | -------------------------------- |
| b      | bool | 否   | 指定控件可点击状态,默认为true。 |
153 154 155

**返回值:**

156 157 158
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
159 160 161

**示例:**

162 163
```js
let by = BY.clickable(true) //使用静态构造器BY创建by对象,指定目标控件的可点击状态属性。
164
```
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189

### By.longClickable<sup>9+</sup>

longClickable(b?: bool): By

指定目标控件的可长按点击状态属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

| 参数名 | 类型 | 必填 | 说明                                 |
| ------ | ---- | ---- | ------------------------------------ |
| b      | bool | 否   | 指定控件可长按点击状态,默认为true。 |

**返回值:**

| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |

**示例:**

```js
let by = BY.longClickable(true) //使用静态构造器BY创建by对象,指定目标控件的可长按点击状态属性。
190 191 192 193 194
```


### By.scrollable

195
scrollable(b?: bool): By
196 197 198 199 200 201 202

指定目标控件的可滑动状态属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

203 204 205
| 参数名 | 类型 | 必填 | 说明                         |
| ------ | ---- | ---- | ---------------------------- |
| b      | bool | 否   | 控件可滑动状态,默认为true。 |
206 207 208

**返回值:**

209 210 211
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
212 213 214

**示例:**

215 216
```js
let by = BY.scrollable(true) //使用静态构造器BY创建by对象,指定目标控件的可滑动状态属性。
217 218 219 220
```

### By.enabled

221
enabled(b?: bool): By
222 223 224 225 226 227 228

指定目标控件的使能状态属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

229 230 231
| 参数名 | 类型 | 必填 | 说明                           |
| ------ | ---- | ---- | ------------------------------ |
| b      | bool | 否   | 指定控件使能状态,默认为true。 |
232 233 234

**返回值:**

235 236 237
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
238 239 240

**示例:**

241 242
```js
let by = BY.enabled(true) //使用静态构造器BY创建by对象,指定目标控件的使能状态属性。
243 244 245 246
```

### By.focused

247
focused(b?: bool): By
248 249 250 251 252 253 254

指定目标控件的获焦状态属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

255 256 257
| 参数名 | 类型 | 必填 | 说明                       |
| ------ | ---- | ---- | -------------------------- |
| b      | bool | 否   | 控件获焦状态,默认为true。 |
258 259 260

**返回值:**

261 262 263
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
264 265 266

**示例:**

267 268
```js
let by = BY.focused(true) //使用静态构造器BY创建by对象,指定目标控件的获焦状态属性。
269 270 271 272
```

### By.selected

273
selected(b?: bool): By
274 275 276

指定目标控件的被选中状态属性,返回By对象自身。

277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301
**系统能力**:SystemCapability.Test.UiTest

**参数:**

| 参数名 | 类型 | 必填 | 说明                             |
| ------ | ---- | ---- | -------------------------------- |
| b      | bool | 否   | 指定控件被选中状态,默认为true。 |

**返回值:**

| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |

**示例:**

```js
let by = BY.selected(true) //使用静态构造器BY创建by对象,指定目标控件的被选中状态属性。
```

### By.checked<sup>9+</sup>

checked(b?: bool): By

指定目标控件的被勾选状态属性,返回By对象自身。
302 303 304 305 306

**系统能力**:SystemCapability.Test.UiTest

**参数:**

307 308 309
| 参数名 | 类型 | 必填 | 说明                              |
| ------ | ---- | ---- | --------------------------------- |
| b      | bool | 否   | 指定控件被勾选状态,默认为false。 |
310 311 312 313 314 315 316 317 318

**返回值:**

| 类型 | 说明           |
| ---- | -------------- |
| By   | 返回By对象自身 |

**示例:**

319 320
```js
let by = BY.checked(true) //使用静态构造器BY创建by对象,指定目标控件的被勾选状态属性
321
```
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346

### By.checkable<sup>9+</sup>

checkable(b?: bool): By

指定目标控件能否被勾选状态属性,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

| 参数名 | 类型 | 必填 | 说明                                  |
| ------ | ---- | ---- | ------------------------------------- |
| b      | bool | 否   | 指定控件能否被勾选状态,默认为false。 |

**返回值:**

| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |

**示例:**

```js
let by = BY.checkable(true) //使用静态构造器BY创建by对象,指定目标控件的能否被勾选状态属性。
347 348
```

349
### By.isBefore
350

351
isBefore(by: By): By
352 353 354 355 356 357 358

指定目标控件位于给出的特征属性控件之前,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

359 360 361
| 参数名 | 类型 | 必填 | 说明             |
| ------ | ---- | ---- | ---------------- |
| by     | By   | 是   | 特征控件的属性。 |
362 363 364

**返回值:**

365 366 367
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
368 369 370

**示例:**

371 372
```js
let by = BY.isBefore(BY.text('123')) //使用静态构造器BY创建by对象,指定目标控件位于给出的特征属性控件之前。
373 374
```

375
### By.isAfter
376

377
isAfter(by: By): By
378 379 380 381 382 383 384

指定目标控件位于给出的特征属性控件之后,返回By对象自身。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

385 386 387
| 参数名 | 类型 | 必填 | 说明             |
| ------ | ---- | ---- | ---------------- |
| by     | By   | 是   | 特征控件的属性。 |
388 389 390

**返回值:**

391 392 393
| 类型 | 说明             |
| ---- | ---------------- |
| By   | 返回By对象自身。 |
394 395 396

**示例:**

397 398
```js
let by = BY.isAfter(BY.text('123')) //使用静态构造器BY创建by对象,指定目标控件位于给出的特征属性控件之后。
399 400 401 402 403 404 405
```

## UiComponent

UiTest中,UiComponent类代表了UI界面上的一个控件,提供控件属性获取,控件点击,滑动查找,文本注入等API。
该类提供的所有方法都使用Promise方式作为异步方法,需使用await调用。

406 407 408 409 410 411 412 413 414 415 416 417 418
### Rect<sup>9+</sup>

控件的边框信息。

**系统能力**:SystemCapability.Test.UiTest 

| 名称    | 参数类型 | 可读 | 可写 | 描述                      |
| ------- | -------- | ---- | ---- | ------------------------- |
| leftX   | number   | 是   | 否   | 控件边框的左上角的X坐标。 |
| topY    | number   | 是   | 否   | 控件边框的左上角的Y坐标。 |
| rightX  | number   | 是   | 否   | 控件边框的右下角的X坐标。 |
| bottomY | number   | 是   | 否   | 控件边框的右下角的Y坐标。 |

419 420
### UiComponent.click

421
click(): Promise\<void>
422 423 424 425 426 427 428

控件对象进行点击操作。

**系统能力**:SystemCapability.Test.UiTest

**示例:**

429
```js
430 431 432 433 434
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    await button.click()
}
435 436 437 438
```

### UiComponent.doubleClick

439
doubleClick(): Promise\<void>
440 441 442 443 444 445 446

控件对象进行双击操作。

**系统能力**:SystemCapability.Test.UiTest

**示例:**

447
```js
448 449 450
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
451
    await button.doubleClick()
452
}
453 454 455 456
```

### UiComponent.longClick

457
longClick(): Promise\<void>
458 459 460 461 462 463 464

控件对象进行长按操作。

**系统能力**:SystemCapability.Test.UiTest

**示例:**

465
```js
466 467 468 469 470
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    await button.longClick()
}
471 472 473 474
```

### UiComponent.getId

475
getId(): Promise\<number>
476 477 478 479 480 481 482

获取控件对象的id值。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

483 484 485
| 类型             | 说明                            |
| ---------------- | ------------------------------- |
| Promise\<number> | 以Promise形式返回的控件的id值。 |
486 487 488

**示例:**

489
```js
490 491 492 493 494
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    let num = await button.getId()
}
495 496 497 498
```

### UiComponent.getKey

499
getKey(): Promise\<string>
500 501 502 503 504 505 506

获取控件对象的key值。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

507 508 509
| 类型             | 说明                           |
| ---------------- | ------------------------------ |
| Promise\<string> | 以Promise形式返回控件的key值。 |
510 511 512

**示例:**

513
```js
514 515 516 517 518
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    let str_key = await button.getKey()
}
519 520 521 522
```

### UiComponent.getText

523
getText(): Promise\<string>
524 525 526 527 528 529 530

获取控件对象的文本信息。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

531 532 533
| 类型             | 说明                              |
| ---------------- | --------------------------------- |
| Promise\<string> | 以Promise形式返回控件的文本信息。 |
534 535 536

**示例:**

537
```js
538 539 540 541 542
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    let text = await button.getText()
}
543 544 545 546
```

### UiComponent.getType

547
getType(): Promise\<string>
548 549 550 551 552 553 554

获取控件对象的控件类型。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

555 556 557
| 类型             | 说明                          |
| ---------------- | ----------------------------- |
| Promise\<string> | 以Promise形式返回控件的类型。 |
558 559 560

**示例:**

561
```js
562 563 564 565 566
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    let type = await button.getType()
}
567 568
```

569 570
### UiComponent.getBounds<sup>9+</sup>

571
getBounds(): Promise\<Rect>
572 573 574 575 576 577 578

获取控件对象的边框信息。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

579 580 581
| 类型           | 说明                                  |
| -------------- | ------------------------------------- |
| Promise\<Rect> | 以Promise形式返回控件对象的边框信息。 |
582 583 584 585 586 587 588 589 590 591 592

**示例:**

```js
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    let rect = await button.getBounds()
}
```

593 594
### UiComponent.isClickable

595
isClickable(): Promise\<bool>
596 597 598 599 600 601 602

获取控件对象可点击状态。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

603 604 605
| 类型           | 说明                                  |
| -------------- | ------------------------------------- |
| Promise\<bool> | 以Promise形式返回控件对象可点击状态。 |
606 607 608

**示例:**

609
```js
610 611 612 613 614 615 616 617 618 619
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    if(await button.isClickable()) {
        console.info('This button can be Clicked')
    }
    else{
        console.info('This button can not be Clicked')
    }
}
620 621
```

622
### UiComponent.isLongClickable<sup>9+</sup>
623

624
isLongClickable(): Promise\<bool> 
625

626 627 628 629 630 631
获取控件对象可长按点击状态。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

632 633 634
| 类型           | 说明                                        |
| -------------- | ------------------------------------------- |
| Promise\<bool> | 以Promise形式返回控件对象能否长按点击状态。 |
635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652

**示例:**

```js
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    if(await button.isLongClickable()) {
        console.info('This button can longClick')
    }
    else{
        console.info('This button can not longClick')
    }
}
```

### UiComponent.isChecked<sup>9+</sup>

653
isChecked(): Promise\<bool>
654 655 656 657 658 659 660

获取控件对象被勾选状态。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

661 662 663
| 类型           | 说明                                  |
| -------------- | ------------------------------------- |
| Promise\<bool> | 以Promise形式返回控件对象被勾选状态。 |
664

665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681
**示例:**

```js
async function demo() {
    let driver = UiDriver.create()
    let checkBox = await driver.findComponent(BY.type('Checkbox'))
    if(await checkBox.isChecked) {
        console.info('This checkBox is checked')
    }
    else{
        console.info('This checkBox is not checked')
    }
}
```

### UiComponent.isCheckable<sup>9+</sup>

682
isCheckable(): Promise\<bool>
683 684

获取控件对象能否被勾选的属性。
685 686 687 688 689

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

690 691 692
| 类型           | 说明                                        |
| -------------- | ------------------------------------------- |
| Promise\<bool> | 以Promise形式返回控件对象能否被勾选的属性。 |
693 694 695

**示例:**

696 697 698 699 700 701 702 703 704 705 706
```js
async function demo() {
    let driver = UiDriver.create()
    let checkBox = await driver.findComponent(BY.type('Checkbox'))
    if(await checkBox.isCheckable) {
        console.info('This checkBox is checkable')
    }
    else{
        console.info('This checkBox is not checkable')
    }
}
707
```
708 709 710

### UiComponent.isScrollable

711
isScrollable(): Promise\<bool>
712 713 714 715 716 717 718

获取控件对象可滑动状态。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

719 720 721
| 类型           | 说明                                  |
| -------------- | ------------------------------------- |
| Promise\<bool> | 以Promise形式返回控件对象可滑动状态。 |
722 723 724 725

**示例:**

```js
726 727 728 729 730 731 732 733 734 735
async function demo() {
    let driver = UiDriver.create()
    let scrollBar = await driver.findComponent(BY.scrollable(true))
    if(await scrollBar.isScrollable()) {
        console.info('This scrollBar can be operated')
    }
    else{
        console.info('This scrollBar can not be operated')
    }
}
736 737 738 739 740
```


### UiComponent.isEnabled

741
isEnabled(): Promise\<bool>
742 743 744 745 746 747 748

获取控件使能状态。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

749 750 751
| 类型           | 说明                            |
| -------------- | ------------------------------- |
| Promise\<bool> | 以Promise形式返回控件使能状态。 |
752 753 754

**示例:**

755
```js
756 757 758 759 760 761 762 763 764 765 766
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    if(await button.isEnabled()) {
        console.info('This button can be operated')
    }
    else{
        console.info('This button can not be operated')
    }
}

767 768 769 770
```

### UiComponent.isFocused

771
isFocused(): Promise\<bool>
772 773 774 775 776 777 778

判断控件对象是否获焦。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

779 780 781
| 类型           | 说明                                |
| -------------- | ----------------------------------- |
| Promise\<bool> | 以Promise形式返回控件对象是否获焦。 |
782 783 784

**示例:**

785
```js
786 787 788 789 790 791 792 793 794 795
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    if(await button.isFocused()) {
        console.info('This button is focused')
	}
    else{
        console.info('This button is not focused')
	}
}
796 797 798 799
```

### UiComponent.isSelected

800
isSelected(): Promise\<bool>
801 802 803 804 805 806 807

获取控件对象被选中状态。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

808 809 810
| 类型           | 说明                 |
| -------------- | -------------------- |
| Promise\<bool> | 控件对象被选中的状态 |
811 812 813

**示例:**

814
```js
815 816 817 818 819 820 821 822 823 824
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
    if(await button.isSelected()) {
        console.info('This button is selected')
	}
    else{
        console.info('This button is not selected')
    }
}
825 826 827 828
```

### UiComponent.inputText

829
inputText(text: string): Promise\<void>
830 831 832 833 834 835 836

向控件中输入文本(适用于文本框控件)。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

837 838 839
| 参数名 | 类型   | 必填 | 说明             |
| ------ | ------ | ---- | ---------------- |
| text   | string | 是   | 输入的文本信息。 |
840 841 842

**示例:**

843 844 845 846 847 848
```js
async function demo() {
    let driver = UiDriver.create()
    let text = await driver.findComponent(BY.text('hello world'))
    await text.inputText('123')
}
849
```
850 851 852

### UiComponent.clearText<sup>9+</sup>

853
clearText(): Promise\<void>
854 855 856 857 858 859 860 861

清除控件的文本信息(适用于文本框控件)。

**系统能力**:SystemCapability.Test.UiTest

**示例:**

```js
862 863
async function demo() {
    let driver = UiDriver.create()
864 865
    let text = await driver.findComponent(BY.text('hello world'))
    await text.clearText()
866
}
867 868 869 870
```

### UiComponent.scrollSearch

871
scrollSearch(by: By): Promise\<UiComponent>
872

873
在控件上滑动查找目标控件(适用于List等支持滑动的控件)。
874 875 876 877 878

**系统能力**:SystemCapability.Test.UiTest

**参数:**

879 880 881
| 参数名 | 类型 | 必填 | 说明                 |
| ------ | ---- | ---- | -------------------- |
| by     | By   | 是   | 目标控件的属性要求。 |
882 883 884

**返回值:**

885 886 887
| 类型                  | 说明                                  |
| --------------------- | ------------------------------------- |
| Promise\<UiComponent> | 以Promise形式返回找到的目标控件对象。 |
888 889 890

**示例:**

891
```js
892 893
async function demo() {
    let driver = UiDriver.create()
894
    let scrollBar = await driver.findComponent(BY.type('Scroll'))
895 896
    let button = await scrollBar.scrollSearch(BY.text('next page'))
}
897 898
```

899 900
### UiComponent.scrollToTop<sup>9+</sup>

901
scrollToTop(): Promise\<void>
902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918

在控件上滑动到顶部(适用于List等支持滑动的控件)。

**系统能力**:SystemCapability.Test.UiTest

**示例:**

```js
async function demo() {
    let driver = UiDriver.create()
    let scrollBar = await driver.findComponent(BY.type('Scroll'))
    await scrollBar.scrollToTop()
}
```

### UiComponent.scrollToBottom<sup>9+</sup>

919
scrollToBottom(): Promise\<void>
920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936

在控件上滑动到底部(适用于List等支持滑动的控件)。

**系统能力**:SystemCapability.Test.UiTest

**示例:**

```js
async function demo() {
    let driver = UiDriver.create()
    let scrollBar = await driver.findComponent(BY.type('Scroll'))
    await scrollBar.scrollToBottom()
}
```

### UiComponent.dragTo<sup>9+</sup>

937
dragTo(target: UiComponent): Promise\<void>
938 939 940 941 942 943 944

将控件拖拽至目标控件处。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

945 946 947
| 参数名 | 类型        | 必填 | 说明       |
| ------ | ----------- | ---- | ---------- |
| target | UiComponent | 是   | 目标控件。 |
948 949 950 951 952 953 954

**示例:**

```js
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.type('button'))
955 956
    let text = await driver.findComponent(BY.text('hello world'))
    await button.dragTo(text)
957 958 959
    }
```

960 961 962 963 964 965 966
## UiDriver

UiDriver类为uitest测试框架的总入口,提供控件匹配/查找,按键注入,坐标点击/滑动,截图等API。
该类提供的方法除UiDriver.create()以外的所有方法都使用Promise方式作为异步方法,需使用await调用。

### UiDriver.create

967
static create(): UiDriver
968 969 970 971 972 973 974

静态方法,构造一个UiDriver对象,并返回该对象。

**系统能力**:SystemCapability.Test.UiTest

**返回值:**

975 976 977
| 类型    | 说明                     |
| ------- | ------------------------ |
| UiDrive | 返回构造的UiDriver对象。 |
978 979 980

**示例:**

981
```js
982 983 984
async function demo() {
    let driver = UiDriver.create()
}
985 986 987 988
```

### UiDriver.delayMs

989
delayMs(duration: number): Promise\<void>
990 991 992 993 994 995 996

UiDriver对象在给定的时间内延时。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

997 998 999
| 参数名   | 类型   | 必填 | 说明         |
| -------- | ------ | ---- | ------------ |
| duration | number | 是   | 给定的时间。 |
1000 1001 1002

**示例:**

1003
```js
1004 1005 1006 1007
async function demo() {
    let driver = UiDriver.create()
    await driver.delayMs(1000)
}
1008 1009 1010 1011
```

### UiDriver.findComponent

1012
findComponent(by: By): Promise\<UiComponent>
1013 1014 1015 1016 1017 1018 1019

在UiDriver对象中,根据给出的目标控件属性要求查找目标控件。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1020 1021 1022
| 参数名 | 类型 | 必填 | 说明                 |
| ------ | ---- | ---- | -------------------- |
| by     | By   | 是   | 目标控件的属性要求。 |
1023 1024 1025

**返回值:**

1026 1027 1028
| 类型                  | 说明                              |
| --------------------- | --------------------------------- |
| Promise\<UiComponent> | 以Promise形式返回找到的控件对象。 |
1029 1030 1031

**示例:**

1032
```js
1033 1034 1035 1036
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.findComponent(BY.text('next page'))
}
1037 1038 1039 1040
```

### UiDriver.findComponents

1041
findComponents(by: By): Promise\<Array\<UiComponent>>
1042 1043 1044 1045 1046 1047 1048

在UiDriver对象中,根据给出的目标控件属性要求查找出所有匹配控件,以列表保存。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1049 1050 1051
| 参数名 | 类型 | 必填 | 说明                 |
| ------ | ---- | ---- | -------------------- |
| by     | By   | 是   | 目标控件的属性要求。 |
1052 1053 1054

**返回值:**

1055 1056 1057
| 类型                          | 说明                                    |
| ----------------------------- | --------------------------------------- |
| Promise\<Array\<UiComponent>> | 以Promise形式返回找到的控件对象的列表。 |
1058 1059 1060

**示例:**

1061
```js
1062 1063 1064 1065
async function demo() {
    let driver = UiDriver.create()
    let buttonList = await driver.findComponents(BY.text('next page'))
}
1066 1067
```

1068 1069
### UiDriver.waitForComponent<sup>9+</sup>

1070
waitForComponent(by: By, time: number): Promise\<UiComponent>
1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084

在UiDriver对象中,在用户给定的时间内,持续查找满足控件属性要求的目标控件。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

| 参数名 | 类型   | 必填 | 说明                             |
| ------ | ------ | ---- | -------------------------------- |
| by     | By     | 是   | 目标控件的属性要求。             |
| time   | number | 是   | 查找目标控件的持续时间。单位ms。 |

**返回值:**

1085 1086 1087
| 类型                  | 说明                              |
| --------------------- | --------------------------------- |
| Promise\<UiComponent> | 以Promise形式返回找到的控件对象。 |
1088 1089 1090 1091 1092 1093 1094 1095 1096 1097

**示例:**

```js
async function demo() {
    let driver = UiDriver.create()
    let button = await driver.waitForComponent(BY.text('next page'),500)
}
```

1098 1099
### UiDriver.assertComponentExist   

1100
assertComponentExist(by: By): Promise\<void>
1101 1102 1103 1104 1105 1106 1107

断言API,用于断言当前界面存在满足给出的目标控件属性的控件; 如果控件不存在,该API将抛出JS异常,使当前测试用例失败。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1108 1109 1110
| 参数名 | 类型 | 必填 | 说明                 |
| ------ | ---- | ---- | -------------------- |
| by     | By   | 是   | 目标控件的属性要求。 |
1111 1112 1113

**示例:**

1114
```js
1115 1116 1117 1118
async function demo() {
    let driver = UiDriver.create()
    await driver.assertComponentExist(BY.text('next page'))
}
1119 1120 1121 1122
```

### UiDriver.pressBack

1123
pressBack(): Promise\<void>
1124 1125 1126 1127 1128 1129 1130

UiDriver对象进行点击BACK键的操作。

**系统能力**:SystemCapability.Test.UiTest

**示例:**

1131
```js
1132 1133 1134 1135
async function demo() {
    let driver = UiDriver.create()
    await driver.pressBack()
}
1136 1137 1138 1139
```

### UiDriver.triggerKey

1140
triggerKey(keyCode: number): Promise\<void>
1141 1142 1143 1144 1145 1146 1147

UiDriver对象采取如下操作:通过key值找到对应键并点击。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1148 1149 1150
| 参数名  | 类型   | 必填 | 说明          |
| ------- | ------ | ---- | ------------- |
| keyCode | number | 是   | 指定的key值。 |
1151 1152 1153

**示例:**

1154
```js
1155 1156 1157 1158
async function demo() {
    let driver = UiDriver.create()
    await driver.triggerKey(123)
}
1159 1160 1161 1162
```

### UiDriver.click

1163
click(x: number, y: number): Promise\<void>
1164 1165 1166 1167 1168 1169 1170

UiDriver对象采取如下操作:在目标坐标点单击。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1171 1172 1173 1174
| 参数名 | 类型   | 必填 | 说明                                   |
| ------ | ------ | ---- | -------------------------------------- |
| x      | number | 是   | 以number的形式传入目标点的横坐标信息。 |
| y      | number | 是   | 以number的形式传入目标点的纵坐标信息。 |
1175 1176 1177

**示例:**

1178
```js
1179 1180 1181 1182
async function demo() {
    let driver = UiDriver.create()
    await driver.click(100,100)
}
1183 1184 1185 1186
```

### UiDriver.doubleClick

1187
doubleClick(x: number, y: number): Promise\<void>
1188 1189 1190 1191 1192 1193 1194

UiDriver对象采取如下操作:在目标坐标点双击。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1195 1196 1197 1198
| 参数名 | 类型   | 必填 | 说明                                   |
| ------ | ------ | ---- | -------------------------------------- |
| x      | number | 是   | 以number的形式传入目标点的横坐标信息。 |
| y      | number | 是   | 以number的形式传入目标点的纵坐标信息。 |
1199 1200 1201

**示例:**

1202
```js
1203 1204 1205 1206
async function demo() {
    let driver = UiDriver.create()
    await driver.doubleClick(100,100)
}
1207 1208 1209 1210
```

### UiDriver.longClick

1211
longClick(x: number, y: number): Promise\<void>
1212 1213 1214 1215 1216 1217 1218

UiDriver对象采取如下操作:在目标坐标点长按下鼠标左键。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1219 1220 1221 1222
| 参数名 | 类型   | 必填 | 说明                                   |
| ------ | ------ | ---- | -------------------------------------- |
| x      | number | 是   | 以number的形式传入目标点的横坐标信息。 |
| y      | number | 是   | 以number的形式传入目标点的纵坐标信息。 |
1223 1224 1225

**示例:**

1226
```js
1227 1228 1229 1230
async function demo() {
    let driver = UiDriver.create()
    await driver.longClick(100,100)
}
1231 1232 1233 1234
```

### UiDriver.swipe

1235
swipe(startx: number, starty: number, endx: number, endy: number): Promise\<void>
1236 1237 1238 1239 1240 1241 1242

UiDriver对象采取如下操作:从给出的起始坐标点滑向给出的目的坐标点。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1243 1244 1245 1246 1247 1248
| 参数名 | 类型   | 必填 | 说明                                   |
| ------ | ------ | ---- | -------------------------------------- |
| startx | number | 是   | 以number的形式传入起始点的横坐标信息。 |
| starty | number | 是   | 以number的形式传入起始点的纵坐标信息。 |
| endx   | number | 是   | 以number的形式传入目的点的横坐标信息。 |
| endy   | number | 是   | 以number的形式传入目的点的纵坐标信息。 |
1249 1250 1251

**示例:**

1252
```js
1253 1254 1255 1256
async function demo() {
    let driver = UiDriver.create()
    await driver.swipe(100,100,200,200)
}
1257 1258
```

1259 1260
### UiDriver.drag<sup>9+</sup>

1261
drag(startx: number, starty: number, endx: number, endy: number): Promise\<void>
1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284

UiDriver对象采取如下操作:从给出的起始坐标点拖拽至给出的目的坐标点。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

| 参数名 | 类型   | 必填 | 说明                                   |
| ------ | ------ | ---- | -------------------------------------- |
| startx | number | 是   | 以number的形式传入起始点的横坐标信息。 |
| starty | number | 是   | 以number的形式传入起始点的纵坐标信息。 |
| endx   | number | 是   | 以number的形式传入目的点的横坐标信息。 |
| endy   | number | 是   | 以number的形式传入目的点的纵坐标信息。 |

**示例:**

```js
async function demo() {
    let driver = UiDriver.create()
    await driver.drag(100,100,200,200)
}
```

1285 1286
### UiDriver.screenCap

1287
screenCap(savePath: string): Promise\<bool>
1288 1289 1290 1291 1292 1293 1294

UiDriver对象采取如下操作:捕获当前屏幕,并保存为PNG格式的图片至给出的保存路径中。

**系统能力**:SystemCapability.Test.UiTest

**参数:**

1295 1296 1297
| 参数名   | 类型   | 必填 | 说明           |
| -------- | ------ | ---- | -------------- |
| savePath | string | 是   | 文件保存路径。 |
1298

1299 1300 1301 1302 1303 1304
**返回值:**

| 类型           | 说明                                   |
| -------------- | -------------------------------------- |
| Promise\<bool> | 截图操作是否成功完成。成功完成为true。 |

1305 1306
**示例:**

1307
```js
1308 1309 1310 1311
async function demo() {
    let driver = UiDriver.create()
    await driver.screenCap('/local/tmp/')
}
1312
```
1313

1314
## MatchPattern
1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325

控件属性支持的匹配模式。

**系统能力**:以下各项对应的系统能力均为SystemCapability.Test.UiTest

| 名称        | 值   | 说明           |
| ----------- | ---- | -------------- |
| EQUALS      | 0    | 等于给定值。   |
| CONTAINS    | 1    | 包含给定值。   |
| STARTS_WITH | 2    | 从给定值开始。 |
| ENDS_WITH   | 3    | 以给定值结束。 |