2016-04-07 18 views
0

Ich schreibe einige Tests für eine Weboberfläche, die ständig aktualisiert und mit hoher Geschwindigkeit aktualisiert wird. Was ist der beste Weg, um die StaleElementReferenceException zu vermeiden? Normalerweise müsste ich prüfen, ob die Seite das Element basierend auf ID hat. Wenn gefunden, wird auf dieses Element geklickt (kann eine Schaltfläche, ein Hyperlink usw. sein).Der beste Weg zur Vermeidung von StaleElementReferenceException auf Selenium webdriver

EDIT: Codebeispiel

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() 

Die Behauptung, die über hamcrest getan wird, übergibt. Wenn die dritte Zeile ausgeführt wird, wird die Ausnahme ausgelöst. Ich bin mir bewusst, dass die Seite ziemlich schnell aktualisiert wird (es muss, und ich kann nicht kontrollieren, wie oft es aktualisiert wird).

+1

Dies wird Use-Case-spezifischen wirklich. Bitte geben Sie den Code an, den Sie bis jetzt haben, und, wenn möglich, den Link zu der Webseite, mit der Sie arbeiten. – alecxe

+0

Könnten Sie nicht einfach einen Standard-try/except-Block verwenden? – DuckPuncher

Antwort

0

Ich habe diese Antwort von einem Blog, überprüfen Sie, ob es nützlich sein könnte. Code in 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; 
    } 

In C# haben wir warten, keine Ahnung von Phyton

new WebDriverWait(Drivers._driverInstance, new TimeSpan(0, 0, 30)).Until(ExpectedConditions.StalenessOf(_webElement)); 
Verwandte Themen