2011-08-18 16 views
5

Ben Dojo kullanan bir web uygulaması test etmek selenyum kullanıyorum ve bazı öğeleri görüntülemek için java komut dosyası kullanır. Ne var ki ben sorun yaşıyorum, ben sayfaya müdahale çalışmadan önce desplayed olan tüm elemanlar kadar beklemek istiyorum.nasıl aktif javascript zaman aşımları saymak?

Dojo inFlight değişkeninin 0 olmasını bekleyerek başladım, bu tüm ajax öğelerinin bittiğini söylüyor. Bu her zaman işe yaramıyor çünkü bir süre sonra bir şeyler yapmak gibi görünüyor.

Ben de eleman arayan defalarca denedi, ama belki bir şekilde bu alanı kullanacaktır sonra bazı javascript olmadığı için bu, çok hoş değil.

Temel olarak, bir setTimeout (veya setInterval) üzerinde çalışmayı bekleyen javascript'i sorgulamak için bir yöntem (en azından firefox'ta) istiyorum. Hatta kendi aramamın bir işlevi aracılığıyla yerleşik çağrıyı sarma yöntemiyle başa çıkabilirim Bunu takip etmek için.

Herhangi bir düşünce veya öneriler takdir!

cevap

5

JavaScript'teki her işlev değiştirilebilir.

window.originalSetTimeout = window.setTimeout; 

window.setTimeout = function(func, delay, params) { 
    window.timeoutCounter++; 
    window.originalSetTimeout(window.timeoutCallback, delay, [func, params]); 
} 

window.timeoutCallback = function(funcAndParams) { 
    window.timeoutCounter--; 
    func = funcAndParams[0]; 
    params = funcAndParams[1]; 
    func(params); 
} 

Ardından: Cevabınız için

selenium.waitForCondition("window.timeoutCounter == 0"); 
1

'un setInterval numarasını aradığınızda, bir zamanlayıcı kimliği döndürülür. Bir dizinin Eğer zaman aşımı üzerinde aradığınız Fonksiyonun içerisinde

  • bu zamanlayıcı id, pop dizisi zamanlayıcı kimliği kapalı kaydet

    1. . Çünkü bu kimliği, zamanlayıcı biter bitmez diziden kaldırmamız gerekiyor.
    2. Eğer hayır kontrol etmek istiyorum her zaman. aktif zamanlayıcılar, sadece bu dizinin uzunluğunu sorgula.
  • +0

    Merhaba, teşekkürler böyle bir şey düşünün. Doğrudan setTimeout veya setInterval çağırmıyoruz. UI geliştiricilerimiz tarafından kullanılan Dojo kütüphanesi tarafından çağrılıyorlar. Uygulamayı selenyum ile test etmeye çalışıyoruz, bu yüzden sayfada javascript'i çalıştırma iznimiz var, ancak test ettiğimiz kodun nasıl çalıştığını kolaylıkla engelleyemeyiz. Belki de bizim için bunu takip edebilecek ve yerleşik zaman aşımı mekanizmasının üstesinden gelebilecek bir firefox eklentisi var mı? –

    İlgili konular