DescriptPemrograman langsung di QTP/UFT: Dinamis & Statis

โšก Ringkasan Cerdas

Descriptpemrograman aktif memungkinkan QTP or UFT Satu pernyataan memuat deskripsi objek itu sendiri, sebagai pasangan nilai properti atau sebagai Descriptobjek ion, sehingga suatu langkah dijalankan meskipun objek tersebut tidak pernah disimpan di Object Repository.

  • ๐Ÿ”˜ Melewati repositori: Deskripsi tersebut berada di dalam pernyataan, sehingga tidak perlu mencari nama objek saat program dijalankan.
  • โ˜‘๏ธ Bentuk statis: Pasangan nilai properti ditulis langsung sebagai โ€œproperti:=nilaiโ€, dipisahkan oleh koma di dalam panggilan objek pengujian.
  • โœ… Formulir dinamis: Description.Create membangun koleksi properti yang dapat digunakan kembali yang dapat dibagi oleh banyak pernyataan.
  • ๐Ÿงช Dirancang untuk menghadapi hal-hal yang tidak terduga: Panel yang disembunyikan secara otomatis, hierarki yang berubah, objek dalam yang bersarang, dan kumpulan hasil dengan ukuran yang tidak diketahui.
  • ๏ธ ChildObjects berpasangan dengannya: A DescriptObjek ion yang digunakan sebagai filter hanya akan mengembalikan anak-anak yang cocok dari induknya.
  • ๐Ÿ“Œ Dua aturan yang perlu diingat: Setiap nilai properti diperlakukan sebagai ekspresi reguler, dan begitu Anda mendeskripsikan induknya, Anda juga harus mendeskripsikan anak-anaknya.

Pernyataan pemrograman deskriptif statis dan dinamis dalam QTP ke UFT Satu

Apa itu Descriptsaya Pemrograman?

Descriptsaya pemrograman digunakan untuk mengeksekusi operasi pada Objek di AUT yang definisinya tidak tersimpan di Tempat Penyimpanan ObjekDengan menggunakan mekanisme ini, Anda dapat melewati proses identifikasi dari Object Repository dan langsung memasukkan Objek tersebut. Description dalam pernyataan itu sendiri.

Nama objek hanya digunakan untuk memetakan objek dalam skrip dengan deskripsinya di repositori objek. Ini berarti bahwa jika Anda mengubah nama objek baik di skrip maupun di repositori objek, skrip tersebut seharusnya tetap berjalan. Tonton video berikut untuk memahami konsep ini.

Klik di sini jika video tidak dapat diakses

Highlights Video

  • Hapus Objek DescriptSkrip ini mengambil nama agen dari kotak WinEdit di Object Repository. Jika Anda menjalankan pengujian lagi, pengujian akan gagal karena tidak dapat mengenali objek tersebut. Mari kita periksa alasan mengapa skrip ini gagal.
  • Selama Waktu Berjalan, UFT Salah satunya mengidentifikasi operasi yang dilakukan pada kotak WinEdit, dan Objek tersebut. DescriptIon dalam Object Repository disimpan sebagai Agent Name. Nama ini digunakan untuk track objek di dalam repositori objek. Untuk objek induk, Anda tidak dapat memiliki dua objek anak dengan nama yang sama, jadi QTP Secara unik memetakan objek dalam repositori. Kemudian menggunakan deskripsi yang tersimpan dalam Repositori Objek, mengganti nama dengan deskripsi, dan menggunakan pernyataan yang dihasilkan untuk mengidentifikasi objek dalam aplikasi yang sedang diuji.
  • Karena dalam kasus kami, kami telah menghapus deskripsi objek ini sepenuhnya, skrip tersebut gagal.
  • Namun bagaimana jika, alih-alih QTP Dengan mengganti deskripsi objek, Anda sebagai penguji langsung menentukan deskripsi objek dalam skrip Anda? Ini tidak lain adalah โ€œDescriptPemrograman iveโ€

Perubahan tanggung jawab tunggal itulah yang diimplementasikan oleh kedua formulir di bawah ini, dan setiap formulir cocok untuk jenis skrip yang berbeda.

Jenis dari DescriptPemrograman ive

Anda dapat menggunakan DescriptSaya pemrograman dalam dua cara

  1. Statis
  2. Dinamis

Statis DescriptPemrograman ive

Dalam Metode Statis, untuk identifikasi objek, Anda menentukan properti objek dalam format berikut

property:=values,

Format ini disebut pasangan nilai properti dan diapit oleh tanda kutip. Jika ditulis lengkap, pernyataan statis terlihat seperti ini:

TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method

Jika objek Anda menggunakan beberapa deskripsi untuk identifikasi, Anda dapat menentukannya menggunakan koma.

Jadi dalam kasus kami, deskripsi Nama Agen menjadi

"nativeclass:=Edit", "attached text:=Agent Name:"

Deskripsi statis dibaca pada saat pernyataan dijalankan, sehingga ideal untuk langkah-langkah sekali jalan dan untuk perbaikan cepat pada skrip yang tidak ingin Anda rekam ulang.

Dinamis DescriptPemrograman ive

Metode kedua untuk melakukan tindakan yang sama adalah menggunakan Dinamis Descriptsaya pemrograman

Jika skrip Anda menggunakan kandidat objek pemrograman deskriptif beberapa kali, akan sangat melelahkan untuk menentukan semua pasangan nilai properti untuk setiap pernyataan

Dalam kasus seperti itu, Anda dapat memanfaatkan DescriptKelas ion disediakan oleh QTP

Sintaks untuk membuat objek deskripsi adalah

Set MyDescription = Description.Create()
MyDescription("property").Value = "property-value"

Ini adalah Metode Dinamis

Dengan mengisi objek tersebut dengan properti Nama Agen yang digunakan di atas, akan diperoleh deskripsi yang lengkap dan dapat digunakan kembali:

Dim oDesc
Set oDesc = Description.Create()
oDesc("nativeclass").Value = "Edit"
oDesc("attached text").Value = "Agent Name:"

Variabel oDeskripsi Sekarang objek tersebut dapat diteruskan ke pernyataan mana pun yang membutuhkannya, sehingga satu pengeditan akan memperbarui setiap langkah yang menggunakannya.

Statis vs Dinamis DescriptPemrograman Interaktif: Kapan Menggunakan Masing-masing

Kedua bentuk tersebut menghasilkan deskripsi runtime yang sama, jadi pilihannya lebih berkaitan dengan pemeliharaan daripada kemampuan.

Kriteria Statis (sebaris) Dinamis (Descriptobjek ion)
Bagaimana deskripsi tersebut ditulis Pasangan nilai properti yang diketik di dalam panggilan objek pengujian Properti yang ditambahkan ke objek yang dibuat dengan Description.Create()
Reuse Diulang di setiap pernyataan yang membutuhkan objek tersebut. Disimpan dalam satu variabel dan diteruskan ke mana pun dibutuhkan.
minat Pernyataan singkat tetap mudah dibaca; pernyataan panjang menjadi sulit dipahami. Terdapat baris pengaturan tambahan, tetapi pernyataan itu sendiri tetap singkat.
Perubahan saat runtime Nilai bersifat tetap kecuali jika digabungkan dari variabel. Nilai properti dapat ditetapkan ulang sebelum setiap penggunaan.
Berfungsi dengan ChildObjects Tidak, argumen filter harus berupa Descriptobjek ion Ya, ini formulir yang dibutuhkan.
Paling cocok untuk Satu atau dua langkah pada objek yang tidak ada di repositori. Objek yang digunakan berulang kali, atau koleksi yang diambil saat runtime.

Mengapa Menggunakan Descriptsaya Pemrograman?

Transkrip di bawah ini menyertai video panduan skenario nyata di mana jumlah objek tidak dapat diketahui sebelumnya.

Transkrip Video

  • Pertanyaan bernilai jutaan dolar adalah mengapa menggunakan DP ketika proses Identifikasi Objek ditangani oleh QTP
  • Misalkan Anda ditugaskan untuk menguji portal lowongan kerja. Anda memasukkan kueri pencarian ke dalam portal, dan pengujian mengharuskan Anda untuk memilih semua lowongan kerja yang tersedia dan mengklik Lamar Pekerjaan.
  • Namun, jumlah pekerjaan yang ditampilkan akan bergantung pada kueri pencarian dan pekerjaan yang tersedia pada saat eksekusi skrip, dan tidak ada cara untuk memprediksi sebelumnya jumlah pekerjaan yang akan ditampilkan.
  • Dalam kasus seperti ini, Anda dapat menggunakan pemrograman deskriptif. Meskipun Anda tidak mengetahui jumlah dan nama kotak centang, Anda mengetahui kelas untuk objek tersebut sebagai "WebCheck".Box"
  • Anda dapat menggunakan Metode ChildObjects untuk mengembalikan objek milik orang tua tertentu
  • Sebaris kode seperti โ€“
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    akan mengembalikan semua objek anak untuk halaman ini.

  • Tapi kami hanya menginginkan WebCheckBox objek. Untuk melakukan itu, kita dapat membuat objek filter dan mengatur propertinya ke kelas kotak centang web, kemudian meneruskan filter ini sebagai argumen ke metode ChildObjects.
  • Dalam kasus ini, hanya kotak centang yang dikembalikan.
  • Selanjutnya, Anda dapat menulis kode seperti ini, yang mengakses seluruh koleksi kotak centang mulai dari nol dan mengatur semua kotak centang menjadi AKTIF.
  • Selanjutnya, Anda dapat mengklik tombol terapkan untuk menyelesaikan tes
  • Anda juga dapat menggunakan DescriptPemrograman ive untuk menjalankan objek yang sulit direkam seperti Panel Sembunyikan Otomatis, Objek dengan hierarki yang berubah, Objek Dalam Bersarang, Sub-menu.
  • Anda juga dapat melakukan manipulasi string tingkat lanjut menggunakan pemrograman deskriptif
  • Jika dikombinasikan dengan properti indeks, pemrograman deskriptif dapat sangat berguna dalam mengidentifikasi objek-objek yang sulit.
  • Jika Anda menggunakan deskripsi terprogram untuk suatu objek dalam hierarki objek, Anda perlu menggunakan pemrograman deskriptif untuk objek anak berikutnya.
  • Sebagai contoh, jika pemrograman deskriptif digunakan untuk objek Page tetapi objek WinEdit anak berikutnya berasal dari Object Repository, maka pernyataan tersebut salah.
  • Sebaliknya, ketika pemrograman deskriptif digunakan untuk objek Page dan WinEdit, pernyataan tersebut benar.

Jika dituliskan, filter dan perulangan yang dijelaskan dalam transkrip terlihat seperti ini:

Dim oFilter, allCheckBoxes, i
Set oFilter = Description.Create()
oFilter("micclass").Value = "WebCheckBox"
Set allCheckBoxes = Browser("Jobs").Page("QTP").ChildObjects(oFilter)
For i = 0 To allCheckBoxes.Count - 1
    allCheckBoxes(i).Set "ON"
Next

Koleksi ini berbasis nol, itulah sebabnya perulangan berhenti di Hitungan โ€“ 1Karena filter dievaluasi saat baris kode dijalankan, kode yang sama akan berfungsi baik jika pencarian menghasilkan tiga pekerjaan atau tiga puluh pekerjaan.

Ekspresi Reguler, Pengidentifikasi Ordinal, dan Kesalahan Umum

DescriptPemrograman interaktif berperilaku dalam dua cara yang mengejutkan kebanyakan orang untuk pertama kalinya ketika sebuah pernyataan gagal tanpa alasan yang jelas.

1) Setiap nilai properti diperlakukan sebagai ekspresi reguler. Keterangan seperti Jumlah (USD) Oleh karena itu, tidak cocok karena tanda kurung tersebut merupakan sintaks ekspresi reguler. Gunakan garis miring terbalik untuk menghindari tanda kurung tersebut, atau matikan evaluasi ekspresi reguler untuk properti tersebut pada Descriptobjek ion:

Set oDesc = Description.Create()
oDesc("name").Value = "Total (USD)"
oDesc("name").RegularExpression = False

2) Pengidentifikasi ordinal digunakan untuk memecahkan kebuntuan. Jika deskripsi masih cocok dengan lebih dari satu objek, tambahkan indeks, tempat or waktu pembuatan sebagai properti tambahan. Penghitungan indeks dimulai dari nol:

WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99"
WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"

Tiga jebakan lain yang perlu diperiksa sebelum Anda mulai men-debug aplikasi adalah:

  • penggunaan kelas mikrofon, bukan labelnya Nama kelas Ditampilkan di Object Spy. Nama tampilan bukanlah properti yang valid dalam deskripsi.
  • Nama properti tidak peka terhadap huruf besar/kecil tetapi harus dieja persis seperti yang dilaporkan oleh teknologi, termasuk spasi di dalamnya. teks terlampir ke tag html.
  • DescriptPemrograman langsung melewati repositori; hal ini tidak meningkatkan pengenalan objek. Jika add-in yang benar tidak dimuat, tidak ada deskripsi yang akan membuat objek tersebut dapat dikenali.

Pertanyaan Umum Demo Slot

Titik Mata-Mata Objek Pada kontrol tersebut, baca properti identifikasinya, atau panggil GetROProperty saat runtime. Salin nama-nama tersebut persis seperti yang tercantum, ingat bahwa Object Spy menampilkan micclass di bawah label Nama Kelas.

Biasanya tidak. Pencarian repositori hanya menyelesaikan deskripsi yang tersimpan sekali, sedangkan pernyataan yang dideskripsikan dievaluasi setiap kali baris kode dijalankan. Manfaat pemrograman deskriptif adalah fleksibilitas pada objek yang tidak dapat diprediksi, bukan kecepatan mentah.

Bangun Descriptobjek ion di dalam fungsi yang dapat digunakan kembali dan simpan fungsi tersebut di dalam vbscript Pustaka fungsi yang terkait dengan pengujian. Setiap tindakan yang memuat pustaka tersebut kemudian dapat memanggilnya, sehingga satu pengeditan akan memperbarui semua pemanggil.

Identifikasi yang dibantu AI mencocokkan kontrol berdasarkan tampilan visual dan teks label di dekatnya, bukan berdasarkan properti tetap, sehingga menghilangkan beberapa deskripsi yang ditulis tangan. DescriptIon masih dibutuhkan di tempat objek dihitung atau difilter pada saat proses berjalan.

Kopilot dapat menyusun kerangka untuk putaran-putaran tersebut, Description.Create membuat panggilan dan pelaporan berdasarkan deskripsi, tetapi tidak dapat melihat aplikasi Anda. Setiap nama properti dan nilai yang disarankan harus dikonfirmasi terhadap kontrol sebenarnya sebelum pernyataan tersebut dipercaya.

Jarang. A repositori objek bersama Menjaga deskripsi tetap berada di satu tempat yang dapat diedit dan menjaga agar skrip tetap mudah dibaca. Sebagian besar tim menyimpan tampilan layar yang stabil di repositori dan hanya menggunakan deskripsi jika objeknya dinamis.

Kurangi menjadi satu properti saja, lalu tambahkan kembali properti lainnya satu per satu. Memeriksa jumlah objek dengan filter ChildObjects akan menunjukkan apakah deskripsi tersebut tidak cocok dengan apa pun atau cocok dengan beberapa objek secara ambigu.

Ya. Ini berfungsi untuk teknologi apa pun yang add-in-nya terpasang, termasuk yang standar. Windows, web, .NET, Java dan objek emulator terminal. Hanya nama propertinya yang berbeda, karena setiap add-in melaporkan properti identifikasinya sendiri.

Ringkaslah postingan ini dengan: