2016-10-19 2 views
1

J'ai vu beaucoup de questions sur les variables globales, mais pour une raison ou pour une autre, je n'arrive toujours pas à faire fonctionner la mienne.Variable globale Python non définie - déclarée à l'intérieur de la classe

Voici mon scénario: j'ai mes cas de test individuels et un script python séparé qui inclut différentes fonctions pour les différents messages d'erreur que vous pouvez obtenir dans l'application que je suis en train de tester. Si l'une des validations échoue, je souhaite que la fonction incrémente une variable d'échec, puis le script de test principal vérifie s'il s'agit d'une réussite ou d'échec.

class ErrorValidations: 
    failures = 0 
    def CheckforError1(driver): 
     global failures 
     try: 
      if error1.is_displayed(): 
       failures += 1 

    def CheckforError2(driver): 
     global failures 
     try: 
      if error2.is_displayed(): 
       failures += 1 

    def CheckforError3(driver): 
     global failures 
     try: 
      if error3.is_displayed(): 
       failures += 1 

Ceci est un exemple très édité où les validations se habituent:

from functionslist import ErrorValidations 


def test(driver, browser, test_state): 

    _modules = driver.find_elements_by_xpath('//div[@class="navlink"]') 

    for i in _modules: 
     i.click() 

     ErrorValidations.CheckforError1(driver) 
     ErrorValidations.CheckforError2(driver) 
     ErrorValidations.CheckforError3(driver) 

     if ErrorValidations.failures > 0: 
      driver.report.AppendToReport(i.text, "The " + i.text + "page was not able to load without errors.", "fail", "") 
     else: 
      driver.report.AppendToReport(i.text, "The " + i.text + "page was able to load without errors.", "pass", "") 

Le test n'est pas incrémenter correctement les échecs variables et je reçois l'erreur: « échecs » nom n'est pas défini, mais je ne suis pas sûr où d'autre pour le définir.

+3

Veuillez corriger l'indentation. Est-ce que tout cela est dans une classe ou juste la variable des échecs? Il n'est pas clair à partir de votre article – Dan

+2

Si je lis le premier extrait de code à droite, les échecs ne sont pas une variable globale mais une variable de classe. https://docs.python.org/2/tutorial/classes.html – intrepidhero

+0

Indentation mise à jour. – tinneko

Répondre

1

Vous êtes en déclarant une « échecs » attribut de classe, et non pas une approche globale, dans les ErrorValidations

Au lieu d'utiliser des échecs mondiaux essayer:

class ErrorValidations: 
    failures = 0 

    def CheckforError1(driver): 
     try: 
      if error1.is_displayed(): 
       ErrorValidations.failures += 1 

serait une véritable mondiale soit déclarée en dehors de la classe