Bagikan melalui


Mendapatkan Elemen 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 menjelaskan berbagai cara untuk mendapatkan objek AutomationElement untuk elemen antarmuka pengguna (UI).

Perhatian

Jika aplikasi klien Anda dapat mencoba menemukan elemen di antarmuka penggunanya sendiri, Anda harus melakukan semua panggilan Automation UI pada alur terpisah. Untuk mendapatkan informasi selengkapnya, lihat Masalah Threading UI Automation.

Elemen Akar

Semua pencarian untuk objek AutomationElement harus memiliki tempat awal. Ini dapat menjadi elemen apa pun, termasuk desktop, jendela aplikasi, atau kontrol.

Elemen akar untuk desktop, dari tempat semua elemen diturunkan, diperoleh dari properti statik AutomationElement.RootElement.

Perhatian

Secara umum, Anda harus mencoba untuk hanya mendapatkan elemen turunan langsung dari RootElement. Pencarian keturunan dapat iterasi melalui ratusan atau bahkan ribuan elemen, mungkin mengakibatkan tumpukan meluap. Jika Anda mencoba untuk mendapatkan elemen tertentu pada tingkat yang lebih rendah, Anda harus memulai pencarian Anda dari jendela aplikasi atau dari kontainer pada tingkat yang lebih rendah.

Kondisi

Untuk sebagian besar teknik yang dapat Anda gunakan untuk mengambil elemen UI Automation, Anda harus menentukan Condition, yang merupakan serangkaian kriteria yang menentukan elemen yang ingin Anda ambil.

Kondisi paling sederhana adalah TrueCondition, objek yang telah ditentukan sebelumnya yang menentukan bahwa semua elemen dalam cakupan pencarian akan dikembalikan. FalseCondition, kebalikan dari TrueCondition, kurang berguna, karena akan mencegah elemen apa pun untuk ditemukan.

Tiga kondisi lain yang telah ditentukan sebelumnya dapat digunakan sendiri atau dalam kombinasi dengan kondisi lain: ContentViewCondition, ControlViewCondition, dan RawViewCondition. RawViewCondition, digunakan dengan sendirinya, setara dengan TrueCondition, karena tidak memfilter elemen berdasarkan properti IsControlElement atau IsContentElement.

Kondisi lain dibangun dari satu atau beberapa objek PropertyCondition, yang masing-masing menentukan nilai properti. Contohnya, PropertyCondition dapat menentukan bahwa elemen diaktifkan, atau mendukung pola kontrol tertentu.

Kondisi dapat dikombinasikan menggunakan logika Boolean dengan membuat objek jenis AndCondition, OrCondition, dan NotCondition.

Cakupan Pencarian

Pencarian yang dilakukan dengan menggunakan FindFirst atau FindAll harus memiliki cakupan serta tempat awal.

Cakupan menentukan ruang di sekitar tempat awal yang akan dicari. Cakupan ini dapat termasuk elemen itu sendiri, saudara kandungnya, induknya, leluhurnya, turunan langsungnya, dan keturunannya.

Cakupan pencarian ditentukan oleh kombinasi bitwise nilai dari enumerasi TreeScope.

Menemukan Elemen yang Diketahui

Untuk menemukan elemen yang diketahui, yang diidentifikasi oleh Name, AutomationId, atau beberapa properti atau kombinasi properti lainnya, paling mudah untuk menggunakan metode FindFirst. Jika elemen yang dicari adalah jendela aplikasi, titik awal pencarian dapat menjadi RootElement.

Cara menemukan elemen UI Automation ini paling berguna dalam skenario pengujian otomatis.

Menemukan Elemen dalam Subtree

Untuk menemukan semua elemen yang memenuhi kriteria tertentu yang terkait dengan elemen yang diketahui, Anda dapat menggunakan FindAll. Contohnya, Anda dapat menggunakan metode ini untuk mengambil item daftar atau item menu dari daftar atau menu, atau untuk mengidentifikasi semua kontrol dalam kotak dialog.

Berjalan di Subtree

Jika Anda tidak memiliki pengetahuan sebelumnya tentang aplikasi yang dapat digunakan klien Anda, Anda dapat membuat subtree dari semua elemen yang menarik dengan menggunakan kelas TreeWalker. Aplikasi Anda dapat melakukan hal ini sebagai respons terhadap peristiwa yang diubah fokus; yaitu, ketika aplikasi atau kontrol menerima fokus input, klien UI Automation memeriksa turunan dan mungkin semua keturunan dari elemen yang berfokus.

Cara lain tempat TreeWalker dapat digunakan adalah dengan mengidentifikasi leluhur elemen. Contohnya, dengan berjalan di atas pohon, Anda dapat mengidentifikasi jendela induk kontrol.

Anda dapat menggunakan TreeWalker baik dengan membuat objek kelas (menentukan elemen yang menarik dengan meneruskan Condition), maupun dengan menggunakan salah satu objek yang telah ditentukan sebelumnya berikut yang didefinisikan sebagai kolom TreeWalker.

Bidang Deskripsi
ContentViewWalker Hanya menemukan elemen yang propertinya IsContentElement adalah true.
ControlViewWalker Hanya menemukan elemen yang propertinya IsControlElement adalah true.
RawViewWalker Menemukan semua elemen.

Setelah Anda mendapatkan TreeWalker, menggunakannya sangat mudah. Cukup panggil metode Get untuk menavigasi di antara elemen-elemen subtree.

Metode Normalize ini dapat digunakan untuk menavigasi ke elemen dalam subtree dari elemen lain yang bukan bagian dari tampilan. Contohnya, Anda telah membuat tampilan subtree dengan menggunakan ContentViewWalker. Kemudian, aplikasi Anda menerima pemberitahuan bahwa bilah gulir telah menerima fokus input. Karena bilah gulir bukan elemen konten, bilah gulir tidak ada dalam tampilan subtree Anda. Namun, Anda dapat meneruskan AutomationElement yang mewakili bilah gulir ke Normalize dan mengambil leluhur terdekat yang ada dalam tampilan konten.

Cara Lain untuk Mengambil Elemen

Selain pencarian dan navigasi, Anda dapat mengambil AutomationElement dengan cara berikut.

Dari Peristiwa

Ketika aplikasi Anda menerima peristiwa UI Automation, objek sumber yang diteruskan ke penanganan aktivitas Anda adalah AutomationElement. Contohnya, jika Anda telah berlangganan peristiwa yang diubah fokus, sumber yang diteruskan ke AutomationFocusChangedEventHandler Anda adalah elemen yang menerima fokus.

Untuk mendapatkan informasi selengkapnya, lihat Berlangganan Peristiwa UI Automation.

Dari Titik

Jika Anda memiliki koordinat layar (contohnya, posisi kursor), Anda dapat mengambil AutomationElement dengan menggunakan metode statik FromPoint.

Dari Handel Jendela

Untuk mengambil AutomationElement dari HWND, gunakan metode statik FromHandle.

Dari Kontrol Terfokus

Anda dapat mengambil AutomationElement yang mewakili kontrol terfokus dari properti statik FocusedElement.

Lihat juga