Mendapatkan Elemen UI Automation

Topik ini menjelaskan berbagai cara untuk mendapatkan antarmuka IUIAutomationElement untuk elemen UI.

IUIAutomationElement digunakan dalam aplikasi sampel klien konten dokumen Automation UI.

Elemen Akar

Meskipun elemen dapat diambil langsung dengan menggunakan metode, seperti IUIAutomation::GetFocusedElement, beberapa aplikasi klien memerlukan tampilan struktur hierarkis elemen, yang dikenal sebagai pohon Automation UI. Elemen akar hierarki ini adalah desktop. Anda dapat memperoleh elemen ini dengan menggunakan metode IUIAutomation::GetRootElement atau metode IUIAutomation::GetRootElementBuildCache. Kedua metode ini mengambil penunjuk antarmuka IUIAutomationElement. Anda dapat mencari elemen turunan dengan menggunakan metode, seperti IUIAutomationElement::FindFirst dan FindAll.

Catatan

Secara umum, Anda harus mencoba untuk mendapatkan hanya anak-anak langsung dari elemen akar. Pencarian untuk turunan dapat melakukan iterasi melalui ratusan atau ribuan elemen. 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 Anda gunakan untuk mengambil elemen Automation UI, Anda harus menentukan kondisi. Kondisi adalah sekumpulan kriteria yang menentukan elemen yang ingin Anda ambil. Kondisi diwakili oleh antarmuka IUIAutomationCondition.

Kondisi paling sederhana adalah kondisi sebenarnya, yang merupakan objek yang telah ditentukan sebelumnya yang menentukan bahwa semua elemen dalam cakupan pencarian akan dikembalikan. Kondisi palsu adalah kebalikan dari kondisi sebenarnya dan kurang berguna, karena akan mencegah elemen apa pun ditemukan. Anda dapat memperoleh antarmuka ke kondisi sebenarnya dengan menggunakan IUIAutomation::CreateTrueCondition.

Tiga kondisi lain yang telah ditentukan sebelumnya, tersedia sebagai properti pada objek IUIAutomation, dapat digunakan sendiri atau dalam kombinasi dengan kondisi lain: IUIAutomation::ContentViewCondition, ControlViewCondition, dan RawViewCondition. RawViewCondition, digunakan dengan sendirinya, setara dengan kondisi sebenarnya, karena tidak memfilter elemen oleh properti IUIAutomationElement::CurrentIsControlElement atau CurrentIsContentElement.

Kondisi lain dibangun dari objek kondisi, yang masing-masing menentukan nilai properti. Misalnya, kondisi properti mungkin menentukan bahwa elemen diaktifkan atau mendukung pola kontrol tertentu.

Kondisi yang menggunakan logika Boolean dapat dikombinasikan dengan memanggil IUIAutomation::CreateAndCondition, CreateOrCondition, CreateNotCondition, dan metode terkait.

Cakupan Pencarian

Pencarian yang dilakukan dengan menggunakan IUIAutomationElement::FindFirst atau FindAll harus memiliki cakupan dan tempat awal.

Catatan

Komentar apa pun tentang kedua metode ini juga berlaku untuk IUIAutomationElement::FindFirstBuildCache dan FindAllBuildCache.

 

Cakupan menentukan ruang di sekitar tempat awal yang akan dicari. Ini mungkin termasuk elemen itu sendiri, saudara kandungnya, induknya, anak-anak langsungnya, dan keturunannya. Ketahuilah bahwa metode Temukan tidak mendukung pencarian pohon Otomatisasi UI Microsoft; artinya, mencari elemen leluhur tidak didukung.

Cakupan pencarian didefinisikan oleh kombinasi nilai bitwise dari jenis enumerasi TreeScope .

Menemukan Elemen yang Diketahui

Untuk menemukan elemen yang diketahui yang diidentifikasi berdasarkan nama, ID otomatisasi, atau beberapa properti atau kombinasi properti lainnya, paling mudah menggunakan metode IUIAutomationElement::FindFirst. Jika elemen yang dicari adalah jendela aplikasi, titik awal pencarian dapat menjadi elemen akar.

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

Untuk contoh kode yang memperlihatkan cara menemukan elemen yang diketahui, lihat Menemukan Elemen berdasarkan Nama.

Menemukan Elemen dalam Subtree

Untuk menemukan semua elemen yang memenuhi kriteria tertentu dan terkait dengan elemen yang diketahui, Anda dapat memanggil IUIAutomationElement::FindAll pada elemen yang diketahui. Misalnya, gunakan metode ini untuk mengambil item daftar atau item menu dari daftar atau menu, atau untuk mengidentifikasi semua kontrol dalam kotak dialog.

Untuk contoh kode yang memperlihatkan cara menemukan elemen dalam subtree, lihat Menemukan Elemen Terkait.

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 IUIAutomationTreeWalker. Klien Anda mungkin melakukan ini, misalnya, sebagai respons terhadap peristiwa yang berubah fokus; artinya, ketika aplikasi atau kontrol menerima fokus input, klien Automation UI memeriksa anak-anak dan mungkin semua turunan dari elemen yang berfokus.

Ketahuilah bahwa berjalan di pohon Automation UI intensif sumber daya. Berjalan di pohon hanya ketika tidak layak untuk menggunakan metode IUIAutomationElement::FindFirst, FindAll, atau BuildUpdatedCache.

Anda dapat menentukan pemandu pohon Anda sendiri dengan meneruskan kondisi kustom ke IUIAutomation::CreateTreeWalker, atau Anda dapat menggunakan salah satu objek yang telah ditentukan sebelumnya berikut yang didefinisikan sebagai properti IUIAutomation dasar.

Objek Tujuan
ContentViewWalker Hanya menemukan elemen yang properti IUIAutomationElement::CurrentIsContentElement-nya TRUE.
ControlViewWalker Hanya menemukan elemen yang properti IUIAutomationElement::CurrentIsControlElement-nya ADALAH TRUE.
RawViewWalker Menemukan semua elemen.

 

Setelah Anda mendapatkan metode IUIAutomationTreeWalker, panggil metode IUIAutomationTreeWalker::GetXxx untuk menavigasi elemen subtree, melewati elemen untuk mulai berjalan.

Metode IUIAutomationTreeWalker::Normalize dapat digunakan untuk menavigasi ke elemen dalam subtree dari elemen lain yang bukan bagian dari tampilan. Misalnya, Anda membuat tampilan subtree dengan menggunakan IUIAutomation::ContentViewWalker. 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 IUIAutomationElement yang mewakili bilah gulir ke IUIAutomationTreeWalker::Normalize dan mengambil leluhur terdekat yang ada dalam tampilan konten.

Untuk contoh kode yang menunjukkan cara menggunakan antarmuka IUIAutomationTreeWalker, lihat Cara Berjalan di Pohon Automasi UI.

Cara Lain untuk Mengambil Elemen

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

Dari Peristiwa

Saat aplikasi Anda menerima peristiwa Otomatisasi UI, objek sumber yang diteruskan ke penanganan aktivitas Anda diwakili oleh IUIAutomationElement. Misalnya, jika Anda berlangganan peristiwa yang diubah fokus, sumber yang diteruskan ke IUIAutomationFocusChangedEventHandler Anda adalah elemen yang menerima fokus. Untuk informasi selengkapnya, lihat Berlangganan Peristiwa Otomatisasi UI.

Dari Titik

Untuk mengambil IUIAutomationElement dari koordinat layar, misalnya, posisi kursor, gunakan metode IUIAutomation::ElementFromPoint.

Dari Handel Jendela

Untuk mengambil IUIAutomationElement dari HWND, gunakan metode IUIAutomation::ElementFromHandle.

Dari Kontrol Terfokus

Untuk mengambil IUIAutomationElement yang mewakili kontrol yang difokuskan, gunakan metode IUIAutomation::GetFocusedElement.

Gambaran Umum Pohon UI Automation

Aplikasi sampel klien konten dokumen UI Automation