2016-04-07 27 views
0

Sürekli yenilenen ve yüksek oranda yenilenen bir web arayüzü için bazı testler yazıyorum. StaleElementReferenceException'ı elde etmekten kaçınmanın en iyi yolu nedir? Genellikle sayfanın kimliğe dayalı bir öğeye sahip olup olmadığını kontrol etmem gerekiyor. Eğer bulunursa, bu öğe tıklanır (bir düğme veya köprü, vb. Olabilir).Selenyum webdriver üzerinde StaleElementReferenceException en iyi yolu

DÜZENLEME: Kod örneği

profile = webui.driver.find_element_by_link_text('Test_string_for_profile') 
assert_that(profile, not_none(), 'Profile exists') 
webui.driver.find_element_by_link_text('Test_string_for_profile').click() 

hamcrest ile yapılır onaylama, geçer. Üçüncü satır yürütüldüğünde istisna kaldırılır. Sayfanın oldukça hızlı bir şekilde yenilentiğinin farkındayım (bunu yapmak zorundadır ve ne sıklıkta yenilendiğini kontrol edemiyorum).

+1

spesifik Bu gerçekten kullanmak durum hakkında hiçbir fikri beklemek var. Lütfen şu ana kadar verdiğiniz kodu ve mümkünse, birlikte çalıştığınız web sayfasının bağlantısını sağlayın. – alecxe

+0

Standart bir try/except bloğu kullanamazdınız mı? – DuckPuncher

cevap

0

Bu cevabı bir blogdan aldım, yararlı olup olmadığını doğrulayın. C# C#

public static Boolean RetryingFind(By by) 
    { 
     Boolean result = false; 
     int attempts = 0; 
     while (attempts < 2) 
     { 
      try 
      { 
       Drivers._driverInstance.FindElement(by); 
       result = true; 
       break; 
      } 
      catch (StaleElementReferenceException) 
      { 
       new WebDriverWait(Drivers._driverInstance, new TimeSpan(0, 0, 0, 0, 10)); 
      } 
      attempts++; 
     } 
     return result; 
    } 

Kod biz Phyton

new WebDriverWait(Drivers._driverInstance, new TimeSpan(0, 0, 30)).Until(ExpectedConditions.StalenessOf(_webElement)); 
İlgili konular