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.
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