Bagikan melalui


Penembolokan di Klien UI Automation

Catatan

Dokumentasi ini ditujukan untuk pengembang .NET Framework yang ingin menggunakan kelas UI Automation terkelola yang ditentukan pada namespace System.Windows.Automation. Untuk informasi terbaru tentang UI Automation, lihat API Automasi Windows: Automasi Antarmuka Pengguna.

Topik ini memperkenalkan penembolokan properti UI Automation serta pola kontrol.

Pada UI Automation, penembolokan berarti pra-pengambilan data. Data kemudian bisa diakses tanpa komunikasi lintas proses lebih lanjut. Penembolokan biasanya digunakan oleh UI Automation aplikasi klien untuk mengambil properti serta pola kontrol secara massal. Informasi lalu diambil dari cache sesuai kebutuhan. Aplikasi memperbarui cache secara berkala, biasanya sebagai tanggapan terhadap peristiwa yang menandakan bahwa telah terjadi perubahan di antarmuka pengguna (UI).

Manfaat penembolokan paling terlihat dengan kontrol Windows Presentation Foundation (WPF) dan kontrol khusus yang memiliki penyedia UI Automation sisi server. Ada sedikit manfaat saat mengakses penyedia sisi klien seperti penyedia default untuk kontrol Win32.

Penembolokan terjadi ketika aplikasi mengaktifkan CacheRequest lalu menggunakan metode atau properti apa pun yang mengembalikan AutomationElement; misalnya, FindFirst, FindAll. Metode kelas TreeWalker adalah pengecualian; penembolokan hanya dilakukan jika CacheRequest ditentukan sebagai parameter (misalnya, TreeWalker.GetFirstChild(AutomationElement, CacheRequest).

Penembolokan juga terjadi ketika Anda berlangganan peristiwa saat CacheRequest aktif. AutomationElement diteruskan ke penanganan aktivitas Anda sebagai sumber peristiwa berisi properti dan pola yang di-cache yang ditentukan oleh CacheRequest aslinya. Setiap perubahan yang dilakukan pada CacheRequest setelah Anda berlangganan peristiwa tidak berpengaruh.

Properti UI Automation dan pola kontrol dari suatu elemen dapat di-cache.

Opsi untuk Penembolokan

CacheRequest menentukan opsi berikut untuk ini penembolokan.

Properti Cache

Anda bisa menentukan properti untuk di-cache dengan memanggil Add(AutomationProperty) untuk setiap properti sebelum mengaktifkan permintaan.

Mengontrol Pola ke Cache

Anda bisa menentukan pola kontrol untuk di-cache dengan memanggil Add(AutomationPattern) untuk setiap pola sebelum mengaktifkan permintaan. Saat pola di-cache, propertinya tidak secara otomatis di-cache; Anda harus menentukan properti yang ingin Anda cache dengan menggunakan CacheRequest.Add.

Cakupan dan Pemfilteran Penembolokan

Anda bisa menentukan elemen yang properti dan polanya ingin Anda cache dengan mengatur properti CacheRequest.TreeScope sebelum mengaktifkan permintaan. Cakupannya relatif terhadap elemen yang diambil ketika permintaan aktif. Contohnya, jika Anda hanya mengatur Children, lalu mengambil AutomationElement, properti dan pola turunan dari elemen tersebut di-cache, tetapi bukan elemen itu sendiri. Untuk memastikan bahwa penembolokan dilakukan untuk elemen yang diambil itu sendiri, Anda harus menyertakan Element dalam properti TreeScope. Tidak dimungkinkan untuk mengatur cakupan ke Parent atau Ancestors. Namun, elemen induk dapat di-cache ketika elemen anak di-cache. Untuk informasi selengkapnya, lihat Mengambil Anak dan Orang Tua yang Di-cache.

Tingkat penembolokan juga dipengaruhi oleh properti CacheRequest.TreeFilter. Secara default, penembolokan dilakukan hanya untuk elemen yang muncul dalam tampilan kontrol pohon UI Automation. Namun, Anda dapat mengubah properti ini untuk menerapkan penembolokan ke semua elemen, atau hanya ke elemen yang muncul dalam tampilan konten.

Kekuatan Referensi Elemen

Ketika Anda mengambil AutomationElement, secara default Anda memiliki akses ke semua properti dan pola elemen tersebut, termasuk yang tidak di-cache. Namun, untuk efisiensi yang lebih besar, Anda bisa menentukan bahwa referensi ke elemen hanya mengacu pada data yang di-cache, dengan mengatur properti AutomationElementMode dari CacheRequestke None. Dalam hal ini, Anda tidak mempunyai akses ke properti dan pola elemen yang tidak di-cache. Ini berarti Anda tidak dapat mengakses properti apa pun melalui GetCurrentPropertyValue atau properti Current dari AutomationElement atau pola kontrol apa pun; Anda juga tidak dapat mengambil pola dengan menggunakan GetCurrentPattern atau TryGetCurrentPattern. Pada pola yang di-cache, Anda bisa memanggil metode yang mengambil properti array, seperti SelectionPattern.SelectionPatternInformation.GetSelection, tetapi tidak ada yang melakukan tindakan pada kontrol, seperti InvokePattern.Invoke.

Contoh aplikasi yang mungkin tidak memerlukan referensi penuh ke objek adalah pembaca layar, yang akan mengambil properti elemen Name dan ControlType di jendela tetapi tidak akan membutuhkan objek AutomationElement itu sendiri.

Mengaktifkan CacheRequest

Penembolokan dilakukan hanya ketika objek AutomationElement diambil saat CacheRequest aktif untuk utas saat ini. Ada dua cara mengaktifkan CacheRequest.

Cara yang biasa adalah dengan memanggil Activate. Metode ini mengembalikan objek yang mengimplementasikan IDisposable. Permintaan tetap aktif selama objek IDisposable ada. Cara termudah untuk mengontrol masa pakai objek adalah dengan mengapit panggilan dalam using blok (C#) atau Using (Visual Basic). Ini memastikan bahwa permintaan akan muncul dari tumpukan bahkan jika pengecualian diajukan.

Cara lainnya, yang berguna ketika Anda ingin menumpuk permintaan cache, adalah dengan memanggil Push. Ini menempatkan permintaan pada tumpukan dan mengaktifkannya. Permintaan ini tetap aktif hingga dihapus dari tumpukan oleh Pop. Permintaan menjadi tidak aktif sementara jika permintaan lain didorong ke tumpukan; hanya permintaan teratas yang aktif pada tumpukan.

Mengambil Properti yang Di-Cache

Anda bisa mengambil properti cache elemen melalui metode dan properti berikut.

Pengecualian diajukan jika properti yang diminta tidak ada di dalam cache.

Cached, seperti Current, mengekspos properti individu sebagai anggota struktur. Namun, Anda tidak perlu mengambil struktur ini; Anda bisa mengakses properti individual secara langsung. Contohnya, properti Name dapat diperoleh dari element.Cached.Name, di mana element adalah AutomationElement.

Mengambil Pola Kontrol Cache

Anda bisa mengambil pola kontrol cache elemen melalui metode berikut.

Jika pola tidak ada di dalam cache, GetCachedPattern menimbulkan pengecualian, dan TryGetCachedPattern mengembalikan false.

Anda bisa mengambil properti singgahan pola kontrol dengan menggunakan properti Cached dari objek pola. Anda juga bisa mengambil nilai saat ini melalui properti Current, tetapi hanya jika None tidak ditentukan ketika AutomationElement diambil. (Full adalah nilai default, dan ini mengizinkan akses ke nilai saat ini.)

Mengambil Cache Turunan dan Induk

Saat Anda mengambil AutomationElement dan meminta penembolokan untuk anak-anak elemen tersebut melalui properti TreeScope permintaan, selanjutnya dimungkinkan untuk mendapatkan elemen anak dari properti CachedChildren elemen yang Anda ambil.

Jika Element disertakan dalam cakupan permintaan cache, elemen akar permintaan kemudian tersedia dari properti CachedParent salah satu elemen turunan.

Catatan

Anda tidak dapat menyimpan cache induk atau ancestor dari elemen akar permintaan.

Memperbarui Cache

Cache hanya berlaku selama tidak ada yang berubah di UI. Aplikasi Anda bertanggung jawab untuk memperbarui cache, biasanya sebagai respons terhadap peristiwa.

Jika Anda berlangganan peristiwa saat CacheRequest aktif, Anda mendapatkan AutomationElement dengan cache yang diperbarui sebagai sumber peristiwa setiap kali delegasi penanganan aktivitas Anda dipanggil. Anda juga bisa memperbarui informasi cache untuk elemen dengan memanggil GetUpdatedCache. Anda dapat meneruskan CacheRequest yang asli untuk memperbarui semua informasi yang sebelumnya di-cache.

Memperbarui cache tidak mengubah properti referensi AutomationElement yang sudah ada.

Lihat juga