HarmonyOS Next UI測試框架API總結
HarmonyOS Next中UiTest提供模擬UI操作的能力,供開發者在測試場景使用,主要支持如點擊、雙擊、長按、滑動等UI操作能力,該模塊提供以下功能:
- On:提供控件特徵描述能力,用於控件篩選匹配查找。
- Component:代表UI界面上的指定控件,提供控件屬性獲取,控件點擊,滑動查找,文本注入等能力。
- Driver:入口類,提供控件匹配/查找,按鍵注入,座標點擊/滑動,截圖等能力。
- UiWindow:入口類,提供窗口屬性獲取,窗口拖動、調整窗口大小等能力。
- By(deprecated):提供控件特徵描述能力,用於控件篩選匹配查找。從API version 9開始不再維護,建議使用On。
- UiComponent(deprecated):代表UI界面上的指定控件,提供控件屬性獲取,控件點擊,滑動查找,文本注入等能力。從API version 9開始不再維護,建議使用Component。
- UiDriver(deprecated):入口類,提供控件匹配/查找,按鍵注入,座標點擊/滑動,截圖等能力。從API version 9開始不再維護,建議使用Driver。
這裏面可以看到很多API都已經被廢棄不在維護,UI自動測試框架主要提供了以下能力: - Driver:Ui測試的入口,提供查找控件,檢查控件存在性以及注入按鍵能力。
- On:用於描述目標控件特徵(文本、id、類型等),Driver根據On描述的控件特徵信息來查找控件。
- Component:Driver查找返回的控件對象,提供查詢控件屬性,滑動查找等觸控和檢視能力。
- UiWindow:Driver查找返回的窗口對象,提供獲取窗口屬性、操作窗口的能力。
UI自動化的原理不外乎是查找控件,操作控件,HarmonyOS Next通過上述幾個對象對外提供操作UI能力。
Driver
Driver類作為UiTest測試框架的總入口,提供查找控件,注入按鍵,單擊座標,滑動控件,手勢操作,截圖等能力。
| API | 功能描述 |
|---|---|
| create():Promise | 靜態方法,構造Driver。 |
| findComponent(on:On):Promise | 查找匹配控件。 |
| pressBack():Promise | 單擊BACK鍵。 |
| click(x:number, y:number):Promise | 基於座標點的單擊。 |
| swipe(x1:number, y1:number, x2:number, y2:number):Promise | 基於座標點的滑動。 |
| assertComponentExist(on:On):Promise | 斷言匹配的控件存在。 |
| delayMs(t:number):Promise | 延時。 |
| screenCap(s:path):Promise | 截屏。 |
| findWindow(filter: WindowFilter): Promise | 查找匹配窗口。 |
其中assertComponentExist接口是斷言API,用於斷言當前界面存在目標控件;如果控件不存在,該API將拋出JS異常,使當前測試用例失敗。
import { describe, it} from '@ohos/hypium';
import { Driver, ON } from '@kit.TestKit';
export default function assertComponentExistTest() {
describe('assertComponentExistTest', () => {
it('Uitest_demo0', 0, async (done: Function) => {
try{
// create Driver
let driver: Driver = Driver.create();
// assert text 'hello' exists on current Ui
await driver.assertComponentExist(ON.text('hello'));
} finally {
done();
}
})
})
}
On
Ui測試框架通過On類提供了豐富的控件特徵描述API,用來匹配查找要操作或檢視的目標控件。On提供的API能力具有以下特點:
- 支持匹配單屬性和匹配多屬性組合,例如同時指定目標控件text和id。
- 控件屬性支持多種匹配模式(等於,包含,
STARTS_WITH,ENDS_WITH,REG_EXP,REG_EXP_ICASE)。 - 支持相對定位控件,可通過
isBefore和isAfter等API限定鄰近控件特徵進行輔助定位。
| API | 功能描述 |
|---|---|
| id(i:string):On | 指定控件id。 |
| text(t:string, p?:MatchPattern):On | 指定控件文本,可指定匹配模式。 |
| type(t:string):On | 指定控件類型。 |
| enabled(e:bool):On | 指定控件使能狀態。 |
| clickable(c:bool):On | 指定控件可單擊狀態。 |
| longClickable(l:bool):On | 指定控件可長按狀態。 |
| focused(f:bool):On | 指定控件獲焦狀態。 |
| scrollable(s:bool):On | 指定控件可滑動狀態。 |
| selected(s:bool):On | 指定控件選中狀態。 |
| checked(c:bool):On | 指定控件選擇狀態。 |
| checkable(c:bool):On | 指定控件可選擇狀態。 |
| isBefore(b:On):On | 相對定位,限定目標控件位於指定特徵控件之前。 |
| isAfter(b:On):On | 相對定位,限定目標控件位於指定特徵控件之後。 |
| id(i:string,p?:MatchPattern:On | 指定控件id,可指定匹配模式。 |
| hint(h:string, p?:MatchPattern):On | 指定控件提示文本,可指定匹配模式。 |
| type(t:string,p?:MatchPattern):On | 指定控件類型,可指定匹配模式。 |
| description(d:string,p?:MatchPattern):On | 指定控件描述文本信息,可指定匹配模式。 |
Component
Component類代表了Ui界面上的一個控件,一般是通過Driver.findComponent(on)方法查找到的。通過該類的實例,用户可以獲取控件屬性,單擊控件,滑動查找,注入文本等操作。
Component包含的常用API:
| API | 功能描述 |
|---|---|
| click():Promise | 單擊該控件。 |
| inputText(t:string):Promise | 向控件中輸入文本(適用於文本框控件)。 |
| scrollSearch(s:On):Promise | 在該控件上滑動查找目標控件(適用於List等控件)。 |
| scrollToTop(s:number):Promise | 滑動到該控件頂部(適用於List等控件)。 |
| scrollTobottom(s:number):Promise | 滑動到該控件底部(適用於List等控件)。 |
| getText():Promise | 獲取控件text。 |
| getId():Promise | 獲取控件id。 |
| getType():Promise | 獲取控件類型。 |
| isEnabled():Promise | 獲取控件使能狀態。 |
UiWindow
UiWindow類代表了Ui界面上的一個窗口,一般是通過Driver.findWindow(WindowFilter)方法查找到的。通過該類的實例,用户可以獲取窗口屬性,並進行窗口拖動、調整窗口大小等操作。
UiWindow包含的常用API:
| API | 功能描述 |
|---|---|
| getBundleName(): Promise | 獲取窗口所屬應用包名。 |
| getTitle(): Promise | 獲取窗口標題信息。 |
| focus(): Promise | 使得當前窗口獲取焦點。 |
| moveTo(x: number, y: number): Promise | 將當前窗口移動到指定位置(適用於支持移動的窗口)。 |
| resize(wide: number, height: number, direction: ResizeDirection): Promise | 調整窗口大小(適用於支持調整大小的窗口)。 |
| split(): Promise | 將窗口模式切換為分屏模式(適用於支持分屏的窗口)。 |
| close(): Promise | 關閉當前窗口。 |
總結
本文介紹了HarmonyOS Next提供的UI自動化操作相關對象:Driver、On、Component、UiWindow對應的API能力,後續文章根據具體業務場景和頁面介紹這些API的具體操作步驟。