2014-08-28 15 views
5

Tarayıcı durumu = işleminin yapıldığı ancak sayfanın yüklenmediği bir senaryo var. qtp sayfanın tam olarak yüklenmesini bekleyebildiği ortak bir prosedür var mı? objBrowzer.sync, objPage.Sync, objPage.waitproperty "readyState", "completed", 50 ile denedim. Ama her zaman çalışmıyor.QTP, sayfa dinamik verileri yükleyene kadar nasıl bekler?

Bu nesne görünene kadar bekleyeceği bir ifade bile alamıyorum.Çünkü farklı durumlarda farklı nesneler var. Tüm senaryolarda çalışacak genel bir ifade var mı?

Şimdiden teşekkürler.

+1

Dinamik veriler dediğinizde, AJAX çağrılarını eşzamanlamayı mı istiyorsunuz? Eğer öyleyse, lütfen QTP/UFT'nin hangi sürümünü kullandığını belirtin ve daha sonra bir çözüm ekleyebilirim. – Xiaofu

cevap

9

QTP'nin, eş zamanlı olmayan tarayıcı komut dosyası yürütme ile AJAX tarafından yönetilen web siteleri gibi senkronize edilmek için herhangi bir açık destek sağlamadığını keşfettiniz. QTP, sayfanın tam olarak yüklendiğine inandığında, hala JavaScript işleyicileri çalışır, muhtemelen sayfa için kullanılan HTML'yi günceller ve QTP, GUI'ye erken erişir.

readyState iyi bir fikirdir, ancak genellikle yeterince iyi çalışmadığı vakaları bulmak kolaydır.

1. En iyi çözüm, bir ilerleme çubuğu veya etkinlik göstergesi gibi uygulamanın "meşgul" göstergesi üzerinde senkronize etmektir.

Ne yazık ki, yoğun bir göstergenin beklenmesi yoğun göstergenin gerçekten her zaman görünmesini gerektiriyor, ancak birçok uygulama yalnızca işlemin yeterince uzun sürmesi durumunda (2 saniyeden uzun, vb.) Birini gösteriyor. Daha sonra, bu hızlı bir şekilde beklenenden daha karmaşıklaşır. Uygulamanın böyle bir şey yoksa

2.

, sıklıkla "beklenen bir alan ortaya çıktı" gibi bazı "hazır" gösterge üzerinde senkronize ederek kendinize yardımcı olabilir veya "Tamam düğmesine kayboldu". Bu, gerçek "hazır" göstergenin olmadığı (genellikle mevcut olmayan) her bağlam için belirli bir çözüm gerektirir.

3. Birçok projede, otomasyon çalışanları sadece onlar için uygulamaya yerleştirilmiş yoğun bir gösterge alabilirler. Bu, geliştiriciler için çok fazla çaba sarf etmese de (modern uygulamaların merkezi bir mesaj dağıtıcıya sahip olması nedeniyle "meşgul" ve "boşta" durumuna geçiş kolayca merkezi olarak izlenebilir), iş miktarını büyük ölçüde basitleştirir senkronizasyon için gerekli.

Mümkünse, geliştiricilerle bağlantı kurmaya çalışın ve test robotu "senkronizasyon" rutininin kolayca sorgulayabildiği bir özellik (değişken, bellek eşlemeli dosya, semafor, ne olursa olsun) sunun. (İpucu: İki arasındaki "meşgul" durumu "eksik" durumundan sonra bile iki "hazır" durum arasında ayrım yapabilmek için "meşgul durum bayrağı" na ek olarak sıralı "meşgul durum sayısı" elde etmek yararlı olabilir. Bu nedenle, aynı vesileyle bunu talep edebilirsiniz.) Ardından, hazır sinyalin doğru bir şekilde devam etmediğinden, tüm senkronizasyon sorunları uygulamada bir kusurdur.

Güncelleştirme Fiili "standart" bir çerçeveye dayalı olan uygulamalar için, eşitlemeyi genel bir şekilde uygulama yolları bulunabilir.

Örneğin, JavaScript uygulamaları için, olayların akışını QTP'ye şeffaf bir şekilde bildiren bir alet oluşturmayı başardım. Bu, orada "yalnızca yeterince uzun" beklemek için kullanılır. Böylece, özel kontrol noktası benzeri kitaplık çağrıları belirlenir. belirli olayları (özellikle "tıkla" ve beklemeden önce tamamlanacak bir Java Server Pages, "ajaxstop", olaylar) AJAX roundtripls yapan uygulamalar için bekleyin.

Bu, son derece yararlı olduğu kanıtlanmıştır, çünkü çoğu zaman, test otomasyonu ihtiyaçları için her türlü desteği uygulamak için çok karmaşıktır ve GUI tabanlı senkronizasyon (yalnızca test nesnesi durumu/varlığında) bazen değildir. Uygulama, arka planda senkronize olmayan istekleri gerçekleştirirse yeterli olur. Ayrıca, her GUI bağlamında, zaman alıcı ve/veya güvenilmez olabilecek senkronizasyon seçeneklerini keşfetme ihtiyacını ortadan kaldırır.

+0

Yanıt için Thanx.It yararlı oldu – user90

2

Ben, her zamanki gibi korkuyor İşte

'Değişir' temel örnek ediyorum sizin için basit bir cevabı, ekranda görünmesi için bir düğme veya metin bekliyoruz demek yok:

If Browser("user90site").Page("page1").WebButton("Button1").Exist(30) Then 
    Browser("user90site").Page("page1").WebButton("Button1").Click 
Else 
    Reporter.ReportEvent micFail,"button missing", "button missing" 
End If 

Yukarıdakiler, web öğesinin görünmesi için 30 saniyeye kadar bekleyecektir, ancak 30 saniye geçmeden önce düğme görünürse, devam eder ve düğmeyi tıklar, aksi halde bir hata bildirir. Birden fazla senaryoya sahip olduğunuz için, istediğiniz sonucu elde etmek için farklı varyasyonlar yapmanız gerekecektir.

Henüz başarısız olan öğeler üzerinde hareket etmeye çalıştığınız için test başarısız oluyor musunuz?

+0

Ama örneğin bir düğme için bekleyemediğim ifadeyi genellemek istiyorum.Tüm durumda sayfada görünmüyor. – user90

+0

neden olmasın? Bitleri tekliflerdeki değişkenlerle değiştirin, uygulamada olduğunuz yere göre değişsin mi? WebElement, – shicky

+0

şartıyla WebButton'dan çok daha kolay kullanılabilir.Teşekkür ederim :) – user90

1

Özellikle AJAX bulunan siteler için kolay değil. En iyi yolu

function WaitForObject(obj) WaitForObject = false Setting("DefaultTimeout") = 500 for i = 0 to 30 'or more If obj.Exist Then WaitForObject = true Exit For End If next Setting("DefaultTimeout") = 20000 ' or other value end function

gibi basit işlevi yazıp Ve nesne tespit edilmez kadar deyimi döngü içinde olacak olsa sonunda

+0

Bu, geliştiricilerin hangi nesnenin sonunda oluşturulduğunu ve tüm arka plan işlemlerini (özellikle sunucu iletişimi) söyleyebilmeleri için iyi bir fikirdir.) o zaman tamamlandı. (Ne yazık ki, genellikle (veya en azından: sık sık) GUI oluşturulduktan sonra, yani son GUI nesnesi oluşturulduktan sonra hala devam eden dahili güncellemeler vardır - bu OP'nin karşılaştığı sorunun temel sebebidir. – TheBlastOne

-1
while Browser("user90site").Page("page1").WebButton("Button1").Exist(2)=false 
wait 2 
wend 
Browser("user90site").Page("page1").WebButton("Button1").Click 

de yüklenen nesneler için bu kullanmaktır. Kullanmak yerine kullanmak daha doğrudur.

0

Bunun için deneyebilirsiniz. Bunun çok geç cevap olduğunu biliyorum, ancak sonuçları daha doğru bir şekilde elde etmenize yardımcı olacak.

Set obj = Browser().Page().Image() 
wait() 
While (obj.Exist) 
'Do Nothing //commented 
Wend 

Bu komut dosyası yürütme süresini uzatabilir ancak verecektir

Call AppBusyStatus(0) 
if Browser("Browsername").Exist Then 
    Call AppBusyStatus(0) 
End If 
Call AppBusyStatus(0) 

Sub AppBusyStatus(intBrowserCreationTime) 
    Do While Browser(CreationTime:intBrowserCreationTime).Object.Busy 
     Wait 0,500 
    Loop 
End Sub 
0

Casus yükleme Görüntü ve depodaki ekle: Tarayıcınızın olarak aşağıda daha süre yükleniyor, bu fonksiyonu defalarca çağırabilirsiniz Probleminize çözüm.

İlgili konular