Automasi UI dan Aksesibilitas Aktif
Microsoft Active Accessibility adalah API warisan yang diperkenalkan di Windows 95, dan dirancang untuk membuat aplikasi Windows dapat diakses. Microsoft UI Automation adalah model aksesibilitas baru untuk Windows dan dimaksudkan untuk memenuhi kebutuhan produk teknologi bantuan dan alat pengujian otomatis. Automasi UI menawarkan banyak peningkatan atas Aksesibilitas Aktif Microsoft. Topik ini menjelaskan perbedaan antara kedua teknologi tersebut.
Topik ini berisi bagian berikut.
- Bahasa Pemrograman
- Server dan Klien
- Elemen UI
- Tampilan dan Navigasi Pohon
- Peran dan Jenis Kontrol
- Status dan Properti
- Peristiwa
- Mengakses Properti Aksesibilitas Aktif dan Objek dari Automasi UI
- Topik terkait
Bahasa Pemrograman
Microsoft Active Accessibility didasarkan pada Model Objek Komponen (COM) dengan dukungan untuk antarmuka ganda, dan oleh karena itu, dapat diprogram dalam bahasa C/C++ dan pembuatan skrip.
Ketika Automasi UI diperkenalkan, API klien terbatas pada kode terkelola, sementara API penyedia menyertakan implementasi terkelola dan tidak terkelola. Dengan Windows 7, API klien berbasis COM baru diperkenalkan untuk mempermudah program aplikasi klien Automation UI di C/C++.
Server dan Klien
Di Microsoft Active Accessibility, server dan klien berkomunikasi secara langsung, sebagian besar melalui implementasi server antarmuka IAccessible.
Di Automasi UI, layanan inti terletak antara server (penyedia) dan klien. Layanan inti melakukan panggilan ke antarmuka yang diterapkan oleh penyedia dan menyediakan layanan tambahan, seperti menghasilkan pengidentifikasi run-time unik untuk elemen UI. Aplikasi klien mendapatkan akses ke layanan inti ini dengan membuat objek CUIAutomation. Objek ini mendukung serangkaian antarmuka klien yang terpisah dari antarmuka penyedia. Untuk informasi selengkapnya, lihat Membuat Objek CUIAutomation.
Penyedia Automation UI dapat memberikan informasi kepada klien Microsoft Active Accessibility, dan server Microsoft Active Accessibility dapat memberikan informasi ke aplikasi klien Automation UI. Namun, karena Microsoft Active Accessibility tidak mengekspos informasi sebanyak Automasi UI, kedua model tidak sepenuhnya kompatibel.
Elemen UI
Microsoft Active Accessibility menyajikan elemen UI sebagai antarmuka IAccessible yang dipasangkan dengan pengidentifikasi anak. Sulit untuk membandingkan dua pointer IAccessible untuk menentukan apakah mereka merujuk ke elemen yang sama.
Dalam Automasi UI, setiap elemen direpresentasikan sebagai objek yang mengekspos antarmuka IUIAutomationElement kepada klien. Elemen dapat dibandingkan dengan pengidentifikasi run-time mereka, yang diambil dengan menggunakan IUIAutomationElement::GetRuntimeId.
Tampilan dan Navigasi Pohon
Elemen UI pada layar dapat dilihat sebagai struktur pohon dengan desktop sebagai akar, jendela aplikasi sebagai turunan langsung, dan elemen dalam aplikasi sebagai turunan lebih lanjut.
Dalam Microsoft Active Accessibility, banyak elemen UI yang tidak relevan dengan pengguna akhir yang terekspos dalam struktur pohon. Aplikasi klien harus memeriksa semua elemen di pohon untuk menentukan elemen mana yang bermakna.
Aplikasi klien UI Automation melihat UI melalui tampilan yang difilter. Tampilan hanya berisi elemen yang memberikan informasi kepada pengguna atau yang dapat berinteraksi dengan pengguna. Tampilan yang telah ditentukan sebelumnya yang hanya menyertakan elemen kontrol dan hanya elemen konten yang tersedia, dan aplikasi klien dapat menentukan tampilan kustom. Automasi UI memudahkan untuk menggambarkan UI kepada pengguna, dan untuk membantu pengguna berinteraksi dengan aplikasi.
Di Microsoft Active Accessibility, navigasi antar elemen bersifat spasial, misalnya, berpindah ke elemen yang terletak di sebelah kiri layar, logis, misalnya, berpindah ke item menu berikutnya atau item berikutnya dalam urutan tab dalam kotak dialog, atau hierarkis, misalnya, pindah ke elemen turunan pertama dalam kontainer atau dari elemen turunan ke elemen induknya. Navigasi hierarkis rumit oleh fakta bahwa elemen anak tidak selalu merupakan objek yang mengimplementasikan IAccessible.
Dalam Automasi UI, semua elemen UI adalah objek COM yang mengekspos antarmuka IUIAutomationElement dan mendukung fungsionalitas dasar yang sama. Dari sudut depan penyedia, objek COM mengimplementasikan antarmuka yang diwarisi dari IRawElementProviderSimple. Navigasi terutama hierarkis; yaitu, dari orang tua ke anak-anak, dan dari satu saudara kandung ke saudara berikutnya. Namun, navigasi antar saudara memiliki elemen logis, karena dapat mengikuti urutan tab. Klien dapat menavigasi dari titik awal mana pun, menggunakan tampilan pohon yang difilter, dengan menggunakan IUIAutomationTreeWalker. Klien juga dapat menavigasi ke turunan atau turunan tertentu dengan menggunakan IUIAutomationElement::FindFirst dan IUIAutomationElement::FindAll. Misalnya, mudah untuk mengambil semua elemen dalam kotak dialog yang mendukung pola kontrol tertentu.
Navigasi di Automasi UI lebih konsisten daripada di Microsoft Active Accessibility. Beberapa elemen, seperti daftar drop-down dan jendela pop-up, muncul dua kali di pohon Aksesibilitas Aktif Microsoft, dan navigasi dari elemen-elemen tersebut mungkin memiliki hasil yang tidak terduga. Sulit untuk menerapkan Microsoft Active Accessibility dengan benar untuk kontrol rebar. Automasi UI memungkinkan reparenting dan reposisi, sehingga elemen dapat ditempatkan di mana saja di pohon, meskipun hierarki diberlakukan oleh kepemilikan jendela.
Peran dan Jenis Kontrol
Microsoft Active Accessibility menggunakan properti accRole (IAccessible::get_accRole) untuk mengambil deskripsi peran elemen di UI, seperti ROLE_SYSTEM_SLIDER atau ROLE_SYSTEM_MENUITEM. Peran elemen adalah petunjuk utama untuk fungsionalitas yang tersedia. Interaksi dengan kontrol dicapai dengan menggunakan metode tetap seperti IAccessible::accSelect dan IAccessible::accDoDefaultAction. Interaksi antara aplikasi klien dan UI terbatas pada apa yang dapat dilakukan melalui IAccessible.
Sebaliknya, Automasi UI memisahkan jenis kontrol elemen, yang dijelaskan oleh properti IUIAutomationElement::CurrentControlType (atau IUIAutomationElement::CachedControlType), dari fungsionalitas yang diharapkan. Fungsionalitas ditentukan oleh pola kontrol yang didukung oleh penyedia melalui implementasi antarmuka khususnya. Pola kontrol dapat dikombinasikan untuk menjelaskan serangkaian fungsionalitas lengkap yang didukung oleh elemen UI tertentu. Beberapa penyedia diperlukan untuk mendukung pola kontrol tertentu. Misalnya, penyedia untuk kotak centang harus mendukung pola Kontrol pengalih. Penyedia lain diperlukan untuk mendukung satu atau beberapa set pola kontrol. Misalnya, tombol harus mendukung Tombol atau pola kontrol Panggil . Masih yang lain tidak mendukung pola kontrol. Misalnya, panel yang tidak dapat dipindahkan, diubah ukurannya, atau ditampung tidak memiliki pola kontrol.
Automasi UI mendukung kontrol kustom, yang diidentifikasi oleh konstanta UIA_CustomControlTypeId dan dapat dijelaskan oleh properti IUIAutomationElement::CurrentLocalizedControlType (atau IUIAutomationElement::CachedLocalizedControlType).
Tabel berikut memetakan peran objek Aksesibilitas Aktif Microsoft ke jenis kontrol Automation UI.
Item dan Properti
Elemen Aksesibilitas Aktif Microsoft mendukung serangkaian properti umum. Beberapa properti, seperti accState, harus menjelaskan kondisi yang berbeda, tergantung pada peran elemen. Server harus menerapkan semua metode IAccessible yang mengembalikan properti, bahkan properti yang tidak relevan dengan elemen .
Automasi UI mendefinisikan properti tambahan, beberapa di antaranya sesuai dengan status di Microsoft Active Accessibility. Beberapa properti umum untuk semua elemen, tetapi properti lain khusus untuk mengontrol jenis dan pola kontrol. Penyedia Automasi UI tidak harus menerapkan properti yang tidak relevan, tetapi dapat mengembalikan nilai null untuk properti apa pun yang tidak didukungnya. Layanan inti Automation UI dapat memperoleh beberapa properti dari penyedia jendela default, dan ini digambarkan dengan properti yang diimplementasikan secara eksplisit oleh penyedia.
Selain mendukung lebih banyak properti, Automation UI memungkinkan performa yang lebih baik dengan memungkinkan properti di-cache.
Tabel berikut menunjukkan korespondensi antara beberapa properti dalam dua model. Untuk deskripsi ID properti Automation UI, lihat Pengidentifikasi Properti Elemen Automation.
Aksesor properti Aksesibilitas Aktif | Properti ID UI Automation | Keterangan |
---|---|---|
get_accKeyboardShortcut | UIA_AccessKeyPropertyId atau UIA_AcceleratorKeyPropertyId | UIA_AccessKeyPropertyId diutamakan jika keduanya ada. |
get_accName | UIA_NamePropertyId | |
get_accRole | UIA_ControlTypePropertyId | Lihat tabel sebelumnya untuk memetakan peran untuk mengontrol jenis. |
get_accValue | UIA_ValueValuePropertyId atau UIA_RangeValueValuePropertyId | Hanya berlaku untuk jenis kontrol yang mendukung IUIAutomationValuePattern atau IUIAutomationRangeValuePattern. Nilai rentang dinormalisasi menjadi 0-100, agar konsisten dengan perilaku Aksesibilitas Aktif Microsoft. Nilai direpresentasikan sebagai string. |
get_accHelp | UIA_HelpTextPropertyId | |
accLocation | UIA_BoundingRectanglePropertyId | |
get_accDescription | Tidak didukung. | accDescription tidak memiliki spesifikasi yang jelas dalam Microsoft Active Accessibility, yang mengakibatkan server menempatkan berbagai informasi dalam properti ini. |
get_accHelpTopic | Tidak didukung. |
Tabel berikut ini memperlihatkan ID properti Automation UI yang sesuai dengan konstanta status objek Aksesibilitas Aktif Microsoft.
Status Aksesibilitas Aktif | Properti UI Automation | Memicu perubahan status WinEvent? |
---|---|---|
STATE_SYSTEM_CHECKED | UIA_ToggleToggleStatePropertyId untuk kotak centang. UIA_SelectionItemIsSelectedPropertyId untuk tombol radio. | Y |
STATE_SYSTEM_COLLAPSED | UIA_ExpandCollapseExpandCollapseStatePropertyId (nilai = ExpandCollapseState_Collapsed). | Y |
STATE_SYSTEM_EXPANDED | UIA_ExpandCollapseExpandCollapseStatePropertyId (nilai = ExpandCollapseState_Expanded atau ExpandCollapseState_PartiallyExpanded). | Y |
STATE_SYSTEM_FOCUSABLE | UIA_IsKeyboardFocusablePropertyId. | N |
STATE_SYSTEM_FOCUSED | UIA_HasKeyboardFocusPropertyId. | N |
STATE_SYSTEM_HASPOPUP | UIA_ExpandCollapseExpandCollapseStatePropertyId untuk item menu. | N |
STATE_SYSTEM_INVISIBLE | UIA_IsOffscreenPropertyId (nilai = True dan IUIAutomationElement::GetClickablePoint gagal). | N |
STATE_SYSTEM_LINKED | UIA_ControlTypePropertyId (nilai = UIA_HyperlinkControlTypeId). | N |
STATE_SYSTEM_MIXED | UIA_ToggleToggleStatePropertyId (nilai = ToggleState_Indeterminate. | N |
STATE_SYSTEM_MOVEABLE | UIA_TransformCanMovePropertyId. | N |
STATE_SYSTEM_MULTISELECTABLE | UIA_SelectionCanSelectMultiplePropertyId. | N |
STATE_SYSTEM_OFFSCREEN | UIA_IsOffscreenPropertyId. | N |
STATE_SYSTEM_PROTECTED | UIA_IsPasswordPropertyId. | N |
STATE_SYSTEM_READONLY | UIA_RangeValueIsReadOnlyPropertyId dan UIA_ValueIsReadOnlyPropertyId. | N |
STATE_SYSTEM_SELECTABLE | UIA_IsSelectionItemPatternAvailablePropertyId . | N |
STATE_SYSTEM_SELECTED | UIA_SelectionItemIsSelectedPropertyId. | N |
STATE_SYSTEM_SIZEABLE | UIA_TransformCanResizePropertyId. | N |
STATE_SYSTEM_UNAVAILABLE | UIA_IsEnabledPropertyId. | Y |
Untuk daftar lengkap ID properti, lihat Pengidentifikasi Properti.
Acara
Tidak seperti Microsoft Active Accessibility, mekanisme peristiwa di Automation UI, tidak bergantung pada perutean peristiwa Windows, yang terkait erat dengan handel jendela, dan tidak mengharuskan aplikasi klien untuk menyiapkan kait. Langganan peristiwa dapat disempurnakan ke bagian pohon tertentu, bukan hanya untuk peristiwa tertentu. Penyedia juga dapat menyempurnakan acara penambahan dengan melacak peristiwa mana yang sedang didengarkan.
Klien juga lebih mudah untuk mengambil elemen yang meningkatkan peristiwa karena ini diteruskan langsung ke panggilan balik peristiwa. Properti elemen diambil sebelumnya secara otomatis, jika permintaan cache disediakan saat klien berlangganan peristiwa.
Tabel berikut ini memperlihatkan korespondensi konstanta peristiwa Aksesibilitas Aktif Microsoft dan ID peristiwa Automation UI.
WinEvent | ID Peristiwa Automasi UI |
---|---|
EVENT_OBJECT_ACCELERATORCHANGE | UIA_AcceleratorKeyPropertyId perubahan properti. |
EVENT_OBJECT_CONTENTSCROLLED | UIA_ScrollVerticalScrollPercentPropertyId atau UIA_ScrollHorizontalScrollPercentPropertyId perubahan properti pada bilah gulir terkait. |
EVENT_OBJECT_CREATE | UIA_StructureChangedEventId. |
EVENT_OBJECT_DEFACTIONCHANGE | Tidak ada yang setara. |
EVENT_OBJECT_DESCRIPTIONCHANGE | Tidak ada yang sama persis; mungkin perubahan properti UIA_HelpTextPropertyId atau UIA_LocalizedControlTypePropertyId. |
EVENT_OBJECT_DESTROY | UIA_StructureChangedEventId. |
EVENT_OBJECT_FOCUS | UIA_AutomationFocusChangedEventId. |
EVENT_OBJECT_HELPCHANGE | UIA_HelpTextPropertyId berubah. |
EVENT_OBJECT_HIDE | UIA_StructureChangedEventId. |
EVENT_OBJECT_LOCATIONCHANGE | UIA_BoundingRectanglePropertyId perubahan properti. |
EVENT_OBJECT_NAMECHANGE | UIA_NamePropertyId perubahan properti. |
EVENT_OBJECT_PARENTCHANGE | UIA_StructureChangedEventId. |
EVENT_OBJECT_REORDER | Tidak secara konsisten digunakan dalam Microsoft Active Accessibility. Tidak ada peristiwa yang sesuai secara langsung yang didefinisikan dalam UI Automation. |
EVENT_OBJECT_SELECTION | UIA_SelectionItem_ElementSelectedEventId. |
EVENT_OBJECT_SELECTIONADD | UIA_SelectionItem_ElementAddedToSelectionEventId. |
EVENT_OBJECT_SELECTIONREMOVE | UIA_SelectionItem_ElementRemovedFromSelectionEventId. |
EVENT_OBJECT_SELECTIONWITHIN | Tidak ada yang setara. |
EVENT_OBJECT_SHOW | UIA_StructureChangedEventId. |
EVENT_OBJECT_STATECHANGE | Berbagai peristiwa yang diubah properti. |
EVENT_OBJECT_VALUECHANGE | UIA_RangeValueValuePropertyId dan UIA_ValueValuePropertyId berubah. |
EVENT_SYSTEM_ALERT | Tidak ada yang setara. |
EVENT_SYSTEM_CAPTUREEND | Tidak ada yang setara. |
EVENT_SYSTEM_CAPTURESTART | Tidak ada yang setara. |
EVENT_SYSTEM_CONTEXTHELPEND | Tidak ada yang setara. |
EVENT_SYSTEM_CONTEXTHELPSTART | Tidak ada yang setara. |
EVENT_SYSTEM_DIALOGEND | UIA_Window_WindowClosedEventId. |
EVENT_SYSTEM_DIALOGSTART | UIA_Window_WindowOpenedEventId. |
EVENT_SYSTEM_DRAGDROPEND | Tidak ada yang setara. |
EVENT_SYSTEM_DRAGDROPSTART | Tidak ada yang setara. |
EVENT_SYSTEM_FOREGROUND | UIA_AutomationFocusChangedEventId. |
EVENT_SYSTEM_MENUEND | UIA_MenuModeEndEventId. |
EVENT_SYSTEM_MENUPOPUPEND | UIA_MenuClosedEventId. |
EVENT_SYSTEM_MENUPOPUPSTART | UIA_MenuOpenedEventId. |
EVENT_SYSTEM_MENUSTART | UIA_MenuModeStartEventId. |
EVENT_SYSTEM_MINIMIZEEND | UIA_WindowWindowVisualStatePropertyId perubahan properti. |
EVENT_SYSTEM_MINIMIZESTART | UIA_WindowWindowVisualStatePropertyId perubahan properti. |
EVENT_SYSTEM_MOVESIZEEND | UIA_BoundingRectanglePropertyId perubahan properti. |
EVENT_SYSTEM_MOVESIZESTART | UIA_BoundingRectanglePropertyId perubahan properti. |
EVENT_SYSTEM_SCROLLINGEND | perubahan properti UIA_ScrollVerticalScrollPercentPropertyId atau UIA_ScrollHorizontalScrollPercentPropertyId. |
EVENT_SYSTEM_SCROLLINGSTART | perubahan properti UIA_ScrollVerticalScrollPercentPropertyId atau UIA_ScrollHorizontalScrollPercentPropertyId. |
EVENT_SYSTEM_SOUND | Tidak ada yang setara. |
EVENT_SYSTEM_SWITCHEND | Tidak setara, tetapi peristiwa UIA_AutomationFocusChangedEventId menandakan bahwa aplikasi baru telah menerima fokus. |
EVENT_SYSTEM_SWITCHSTART | Tidak ada yang setara. |
Tidak ada yang setara. | UIA_MultipleViewCurrentViewPropertyId perubahan properti. |
Tidak ada yang setara. | UIA_ScrollHorizontallyScrollablePropertyId perubahan properti. |
Tidak ada yang setara. | UIA_ScrollVerticallyScrollablePropertyId perubahan properti. |
Tidak ada yang setara. | UIA_ScrollHorizontalScrollPercentPropertyId perubahan properti. |
Tidak ada yang setara. | UIA_ScrollVerticalScrollPercentPropertyId perubahan properti. |
Tidak ada yang setara. | UIA_ScrollHorizontalViewSizePropertyId perubahan properti. |
Tidak ada yang setara. | UIA_ScrollVerticalViewSizePropertyId perubahan properti. |
Tidak ada yang setara. | UIA_ToggleToggleStatePropertyId perubahan properti. |
Tidak ada yang setara. | perubahan properti UIA_WindowWindowVisualStatePropertyId |
Tidak ada yang setara. | peristiwa UIA_AsyncContentLoadedEventId. |
Tidak ada yang setara. | peristiwa UIA_ToolTipOpenedEventId. |
Mengakses Properti Aksesibilitas Aktif dan Objek dari Automasi UI
Fitur utama Automasi UI yang tidak tersedia di Microsoft Active Accessibility adalah kemampuan untuk mengambil beberapa properti dengan satu operasi lintas proses.
Klien Aksesibilitas Aktif Microsoft yang ada dapat memanfaatkan kemampuan ini dengan menggunakan antarmuka IUIAutomationLegacyIAccessiblePattern. Antarmuka ini mewakili pola kontrol yang mengekspos properti dan metode Aksesibilitas Aktif Microsoft pada elemen UI. Saat mengambil elemen, aplikasi dapat meminta agar pola kontrol ini dan propertinya di-cache.
IUIAutomationLegacyIAccessiblePattern juga memungkinkan klien untuk mendapatkan properti Aksesibilitas Aktif Microsoft dari elemen yang tidak memiliki dukungan asli untuk IAccessible.
Perubahan properti IUIAutomationLegacyIAccessiblePattern tidak menaikkan peristiwa Automasi UI.