DescriptProgramlama alanında QTP/UFT: Dinamik ve Statik

⚡ Akıllı Özet

DescriptProgramlama, bir QTP or UFT Bir ifade, özellik-değer çiftleri veya bir biçimde nesne tanımının kendisini içerir. DescriptBu nedenle, nesne Nesne Deposunda hiç saklanmamış olsa bile bir adım çalıştırılır.

  • 🔘 Depoyu atlar: Açıklama, ifade içerisinde yer aldığından, çalışma zamanında herhangi bir nesne adının aranmasına gerek kalmaz.
  • ☑️ Statik form: Test nesnesi çağrısı içinde, özellik-değer çiftleri virgülle ayrılarak "özellik:=değer" şeklinde satır içi olarak yazılır.
  • Dinamik form: Descript`ion.Create`, birçok ifadenin paylaşabileceği yeniden kullanılabilir bir özellik koleksiyonu oluşturur.
  • 🧪 Öngörülemeyen nesneler için tasarlandı: Otomatik gizlenen paneller, değişen hiyerarşiler, iç içe geçmiş nesneler ve bilinmeyen boyuttaki sonuç kümeleri.
  • ChildObjects onunla eşleşir: A DescriptFiltre olarak kullanılan ion nesnesi, yalnızca bir üst öğenin eşleşen alt öğelerini döndürür.
  • 📌 Unutmamanız gereken iki kural: Her özellik değeri normal bir ifade olarak ele alınır ve bir üst öğeyi tanımladığınızda, alt öğelerini de tanımlamanız gerekir.

Statik ve dinamik tanımlayıcı programlama ifadeleri QTP hem de UFT Bir

Nedir? DescriptAktif Programlama?

Descriptprogramlama Bu, tanımı AUT'de saklanmayan bir Nesne üzerinde işlemler yürütmek için kullanılır. Nesne DeposuBu mekanizmayı kullanarak, Nesne Deposundan kimlik doğrulama işlemini atlayabilir ve Nesneyi sağlayabilirsiniz. Descriptifadenin kendisinde iyon.

Bir nesne adı, bir betikteki bir nesneyi nesne deposundaki açıklamasıyla eşleştirmek için kullanılır. Bu, hem betiğinizde hem de nesne deposunda nesne adını değiştirirseniz, betiğin yine de çalışması gerektiği anlamına gelir. Bu kavramla ilgili aşağıdaki videoyu izleyin.

Tıkla okuyun videoya erişilemiyorsa

Video Maç Özetleri

  • Nesneyi Sil DescriptNesne deposundaki WinEdit kutusundaki Aracı Adı'nın eklenmesi. Testi tekrar çalıştırırsanız, nesneyi tanıyamadığı için başarısız olacaktır. Komut dosyasının neden başarısız olduğunu inceleyelim.
  • Çalışma Süresi Boyunca, UFT WinEdit kutusunda gerçekleştirilen işlem ve Nesne belirlenir. DescriptNesne deposundaki ion, Aracı Adı olarak saklanır. Bu adı şu amaçlarla kullanır: track, nesne deposundaki nesnedir. Bir üst nesne için, aynı ada sahip iki alt nesne olamaz, bu nedenle QTP Bu işlem, depodaki nesneyi benzersiz bir şekilde eşleştirir. Ardından, Nesne Deposunda saklanan açıklamayı kullanır, adı açıklamayla değiştirir ve elde edilen ifadeyi kullanarak test edilen uygulamadaki nesneyi tanımlar.
  • Bizim durumumuzda bu nesne açıklamasını tamamen sildiğimiz için komut dosyası başarısız oluyor.
  • Peki ya bunun yerine, QTP Nesne açıklamasını değiştirerek, test uzmanı olarak siz doğrudan betiğinizde nesne açıklamalarını mı belirtiyorsunuz? Bu, "DescriptCanlı Programlama”

Aşağıdaki iki form, sorumluluktaki bu tek değişikliği uygulamaya koyar ve her form farklı bir senaryo türüne uygundur.

Tipleri DescriptCanlı Programlama

Sen kullanabilirsiniz Descriptiki şekilde programlama yapıyorum

  1. Statik
  2. Hareketlilik

Statik DescriptCanlı Programlama

Statik Yöntemde, nesne tanımlaması için bir nesnenin özelliğini aşağıdaki biçimde belirtirsiniz

property:=values,

Bu format, özellik-değer çifti olarak adlandırılır ve tırnak işaretleri içine alınır. Tam olarak yazıldığında, statik bir ifade şu şekilde görünür:

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

Nesneniz tanımlama için birden fazla açıklama kullanıyorsa, bunları virgül kullanarak belirtebilirsiniz.

Dolayısıyla bizim durumumuzda Temsilci Adının açıklaması şöyle olur:

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

Statik açıklamalar, ifadenin çalıştırıldığı noktada okunur; bu da onları tek seferlik adımlar ve yeniden kaydetmek istemediğiniz bir komut dosyasına hızlı düzeltmeler yapmak için ideal hale getirir.

Hareketlilik DescriptCanlı Programlama

Aynı eylemi yapmanın ikinci yöntemi Dinamik'i kullanmaktır. Descriptprogramlama

Betiğinizin tanımlayıcı programlama nesnesi adayını birden çok kez kullanması durumunda, her ifade için tüm özellik değeri çiftlerini belirtmek çok yorucu olacaktır.

Bu gibi durumlarda şunlardan faydalanabilirsiniz: Description Sınıfı tarafından sağlanmaktadır QTP

Açıklama nesnesi oluşturmak için kullanılan sözdizimi şu şekildedir:

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

Bu, Dinamik Yöntemdir.

Yukarıda kullanılan Temsilci Adı özellikleriyle bu nesneyi doldurmak, eksiksiz ve yeniden kullanılabilir bir açıklama sağlar:

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

Değişken oDesc Artık bu nesneye ihtiyaç duyan herhangi bir ifadeye aktarılabiliyor, böylece tek bir düzenleme onu kullanan her adımı güncelliyor.

Statik ve Dinamik DescriptBeşli Programlama: Her Birini Ne Zaman Kullanmalı?

Her iki yöntem de aynı çalışma zamanı açıklamasını üretir, bu nedenle seçim yetenekten ziyade bakım kolaylığıyla ilgilidir.

Kriterler Statik (satır içi) Dinamik (Descriptiyon nesnesi)
Açıklamanın nasıl yazıldığı Test nesnesi çağrısının içine yazılan özellik değeri çiftleri Oluşturulan bir nesneye eklenen özellikler Description.Create()
Yeniden Nesneye ihtiyaç duyulan her ifadede tekrarlanır. Tek bir değişkende saklanır ve ihtiyaç duyulan her yere aktarılır.
okunabilirlik Kısa ifadeler okunabilir kalır; uzun ifadeler ise anlaşılması güç hale gelir. Ek kurulum satırları var, ancak ifadenin kendisi kısa kalıyor.
Çalışma zamanı değişiklikleri Değişkenlerden birleştirilmedikçe değerler sabittir. Özellik değerleri her kullanımdan önce yeniden atanabilir.
Alt nesnelerle çalışır. Hayır, filtre argümanı bir olmalıdır. Descriptiyon nesnesi Evet, bu gerekli form.
En uygun Depoda bulunmayan bir nesne üzerinde bir veya iki adım. Tekrar tekrar kullanılan nesneler veya çalışma zamanında alınan koleksiyonlar

Neden kullan DescriptAktif Programlama?

Aşağıdaki metin, nesne sayısının önceden bilinemediği gerçek bir senaryonun video anlatımına eşlik etmektedir.

Video Transkripti

  • Asıl soru şu: Nesne tanımlama işlemi zaten başka bir yöntemle yapılıyorsa neden DP kullanılmalı? QTP
  • Diyelim ki bir iş ilan portalını test etmekle görevlendirildiniz. Portala bir arama sorgusu giriyorsunuz ve testiniz, mevcut tüm iş ilanlarını seçmenizi ve "İşe Başvur" düğmesine tıklamanızı bekliyor.
  • Ancak yansıtılacak iş sayısı, arama sorgusuna ve komut dosyasının yürütüldüğü sırada mevcut olan işlere bağlıdır ve yansıtılacak iş sayısını önceden tahmin etmenin bir yolu yoktur.
  • Bu gibi durumlarda, tanımlayıcı programlama kullanabilirsiniz. Onay kutularının sayısını ve adlarını bilmeseniz bile, nesnelerin sınıfını "WebCheck" olarak biliyorsunuz.Boxbaşlıklı bir kılavuz yayınladı
  • Sen kullanabilirsiniz ChildObjects yöntemi belirli bir ebeveyne ait nesneleri döndürmek için
  • Şöyle bir kod satırı –
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

    Bu sayfa için tüm alt nesneleri döndürecektir.

  • Ancak biz yalnızca WebCheck'i istiyoruzBox Nesneleri filtreleyebiliriz. Bunu yapmak için bir filtre nesnesi oluşturup özelliğini web onay kutusu sınıfına ayarlayabilir ve ardından bu filtreyi ChildObjects yöntemine argüman olarak geçirebiliriz.
  • Bu durumda sadece onay kutuları döndürülür.
  • Ardından, sıfırdan başlayarak tüm onay kutularına erişen ve tüm onay kutularını AÇIK konuma getiren şu şekilde bir kod yazabilirsiniz.
  • Daha sonra testi tamamlamak için uygula düğmesine tıklayabilirsiniz.
  • Ayrıca kullanabilirsiniz DescriptOtomatik Gizleme Panelleri, Değişen Hiyerarşili Nesneler, İç İçe Nesneler, Alt Menüler gibi kaydedilmesi zor nesneleri çalıştırmak için programlama.
  • Tanımlayıcı programlamayı kullanarak gelişmiş dize işlemlerini de yapabilirsiniz.
  • İndeks özelliğiyle birlikte kullanıldığında, tanımlayıcı programlama, zor nesnelerin tanımlanmasında çok faydalı olabilir.
  • Nesne hiyerarşisindeki bir nesne için programatik tanımlama kullanıyorsanız, sonraki alt nesneler için de tanımlayıcı programlama kullanmanız gerekecektir.
  • Örneğin, Page nesnesi için tanımlayıcı programlama kullanılmışsa ancak onu takip eden alt WinEdit nesnesi Nesne Deposundan geliyorsa, ifade yanlıştır.
  • Aksine, hem Page hem de WinEdit nesneleri için tanımlayıcı programlama kullanıldığında, ifade doğrudur.

Yazılı olarak, metinde açıklanan filtre ve döngü şu şekilde görünmektedir:

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

Koleksiyon sıfır tabanlıdır, bu yüzden döngü şu noktada durur: Sayı – 1Filtre, satır çalıştırıldığında değerlendirildiği için, arama üç iş sonucu döndürse de otuz iş sonucu döndürse de aynı kod çalışır.

Düzenli İfadeler, Sıralı Tanımlayıcılar ve Yaygın Hatalar

Descriptİnvektif programlama, bir ifadenin görünürde hiçbir sebep olmadan başarısız olması durumunda çoğu insanı şaşırtan iki şekilde davranır.

1) Her özellik değeri normal bir ifade olarak ele alınır. Örneğin şu şekilde bir başlık: Toplam (ABD Doları) Bu nedenle eşleşme sağlanamıyor, çünkü parantezler normal ifade sözdizimidir. Bunları ters eğik çizgiyle kaçış karakteri olarak kullanın veya bu özellik için normal ifade değerlendirmesini devre dışı bırakın. Descriptiyon nesnesi:

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

2) Sıra sayı tanımlayıcıları eşitlik durumlarında kullanılır. Bir açıklama hala birden fazla nesneyle eşleşiyorsa, şunları ekleyin: indeks, yer or yaratım zamanı Ek bir özellik olarak. İndeks sayısı sıfırdan başlar:

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

Uygulamada hata ayıklamaya başlamadan önce kontrol etmeniz gereken üç tuzak daha var:

  • Kullanım mikrofon sınıfıetiketi değil Sınıf adı Object Spy'da gösteriliyor. Görüntülenen ad, açıklamada geçerli bir özellik değil.
  • Özellik adları büyük/küçük harf duyarlı değildir, ancak teknoloji tarafından bildirildiği gibi, aralarındaki boşluk da dahil olmak üzere, aynen yazılmalıdır. ekli metin hem de HTML etiketi.
  • DescriptBu tür programlama, depoyu atlar; nesne tanımayı iyileştirmez. Doğru eklenti yüklenmezse, hiçbir açıklama nesneyi tanımlanabilir hale getiremez.

SSS

Nokta Nesne Casusu Kontrol noktasından tanımlama özelliklerini okuyun veya çalışma zamanında GetROProperty'yi çağırın. İsimleri tam olarak listelendiği gibi kopyalayın, Object Spy'ın micclass'ı Class Name etiketi altında gösterdiğini unutmayın.

Genellikle hayır. Bir depo araması, saklanan bir açıklamayı yalnızca bir kez çözümlerken, tanımlanmış bir ifade her satır çalıştırıldığında değerlendirilir. Tanımlayıcı programlamanın avantajı, öngörülemeyen nesnelerde esneklik sağlamasıdır, ham hız değil.

Kurmak DescriptYeniden kullanılabilir bir fonksiyonun içine bir ion nesnesi yerleştirin ve bu fonksiyonu bir yerde saklayın. VBScript Testle ilişkili fonksiyon kütüphanesi. Kütüphaneyi yükleyen her işlem daha sonra onu çağırabilir, bu nedenle tek bir düzenleme tüm çağıranları günceller.

Yapay zeka destekli tanımlama, kontrolleri sabit özellikler yerine görsel görünüm ve yakındaki etiket metnine göre eşleştirerek, elle yazılmış bazı açıklamaları ortadan kaldırır. DescriptNesnelerin çalışma zamanında sayıldığı veya filtrelendiği yerlerde iyonlara hala ihtiyaç duyulmaktadır.

Copilot döngüleri oluşturabilir, Description.Create, bir açıklama etrafında çağrılar ve raporlama oluşturur, ancak uygulamanızı göremez. Önerdiği her özellik adı ve değeri, ifadenin güvenilir kabul edilmesinden önce gerçek kontrolle karşılaştırılmalıdır.

Nadiren. Bir paylaşılan nesne deposu Açıklamaları düzenlenebilir tek bir yerde tutar ve komut dosyalarının okunabilirliğini sağlar. Çoğu ekip, sabit ekranları depoda tutar ve yalnızca nesnelerin dinamik olduğu durumlarda açıklamalara başvurur.

Önce tek bir özelliğe indirgeyin, sonra diğerlerini teker teker geri ekleyin. ChildObjects filtresiyle nesne sayısını kontrol etmek, açıklamanın hiçbir şeyle eşleşmediğini veya birden fazla nesneyle belirsiz bir şekilde eşleştiğini gösterir.

Evet. Eklentisi yüklü olan her türlü teknoloji için geçerlidir, standart teknolojiler de dahil. Windows, web, .NET, Java ve terminal öykünme nesneleri. Her eklenti kendi tanımlama özelliklerini bildirdiğinden, yalnızca özellik adları farklıdır.

Bu yazıyı şu şekilde özetleyin: