2016-03-29 6 views
1

Es scheint, dass die Assertion fehlschlägt, wenn ein Element nicht gefunden werden kann und es zur Wiederholungsschleife weitergeht, obwohl bis zum Fehlschlagen des Tests keine "Rückgabe False" vorliegt dreimal.Die Assertion schlägt trotz Testwiederholung fehl und gibt true zurück

def find_element(context, element_id, retry=0): 
    # Generate string list of IDs for printing 
    if isinstance(element_id, list): 
     element_name = '#' + ' or #'.join(element_id) 
    else: 
     element_name = '#' + element_id 

    try: 
     # Print list of IDs with "or" separator, if id is list 
     info('Locate element: ' + element_name) 

     # Wait 10 seconds for element to be visible 
     element = element_visible(context, element_id) 
     success('Element found: #' + element[0]) 

     success('Location: {}, Size: {}'.format(element[1].location, element[1].size)) 
     return True 

    except TimeoutException: 
     warn('Unable to find {}. Retry = {}'.format(element_name, retry)) 
     if retry < 2: 
      # If element is not found, refresh browser loop 
      refresh_browser(context) 
      find_element(context, element_id, retry + 1) 
     else: 
      alert('Element "{}" not found'.format(element_name)) 
      return False 

    except: 
     alert('Unexpected error: {}'.format(sys.exc_info()[0])) 
     raise 


def assert_element(context, element_id): 
    result = find_element(context, element_id) 
    if isinstance(element_id, list): 
     element_id = ' or '.join(element_id) 
    assert_true(result, 'Element with id "{}" should appear on page'.format(element_id)) 

Jeder Einblick, was eine fehlgeschlagene Behauptung auslösen könnte?

Antwort

2

Sie müssen das Ergebnis Ihrer nächsten rekursiven Aufruf return:

# If element is not found, refresh browser loop 
refresh_browser(context) 
return find_element(context, element_id, retry + 1) # < HERE