2017-01-30 3 views
0

Ich bin ein Problem beheben, das ich mit Selenium und Python 3.5 habe. Ich versuche das unitest-Framework in meine Automatisierung zu implementieren, aber jedes Mal, wenn ich eine Testsuite erstelle, öffnet der Test mehrere Browserfenster, bevor ein Testfall tatsächlich ausgeführt wird.Python: Unit Test öffnen mehrere Browser-Fenster

Durch Prozess der Beseitigung, habe ich es auf diesem Teil des Codes gekocht:

def primary(): 
    primary = unittest.TestSuite() 
    primary.addTest(unittest.makeSuite(PrimaryMethods, 'setUp')) 
    primary.addTest(unittest.makeSuite(PrimaryMethods, 'test_ModuleLoop_header')) 
    primary.addTest(unittest.makeSuite(PrimaryMethods, 'test_ModuleLoop_nonheader')) 
    primary.addTest(unittest.makeSuite(PrimaryMethods, 'tearDown')) 
    return primary 

if __name__ == '__main__': 
    TEST_RUNNER = unittest.TextTestRunner() 
    TEST_SUITE = primary() 
    TEST_RUNNER.run(primary) 

Wenn ich entfernen Sie den Abschnitt, der die Testsuite und einfach verwenden unittest.main() in der if-Anweisung erstellt Es läuft gut mit nur einem Browserfenster. Ich weiß jedoch, dass meine Testfälle immer komplexer werden und ich Test-Suites verwenden möchte. Hat jemand eine Idee, was dort würde das Setup 4 Mal von selbst laufen lassen, bevor es zu den Testfällen weitergeht?

Hier ist meine Auf- und Abbau Sektionen:

def setUp(self): 
    driver = webdriver.Firefox 
    init() #for colorama 

    def tearDown(self): 
    driver = webdriver.Firefox 
    driver.close() 
    driver.quit() 

ich den Code herausnahm, die Arbeit wurde und modifiziert es def primäre enthalten zurück() und die TEST_RUNNER.run (primär) Code. Ich habe den init() -Aufruf aus dem setUp-Abschnitt entfernt, so dass nichts anderes als das Laden des Browsers in setUp ist. Wenn ich von Breakpoints im Skript platzieren, das ist das Verhalten, das ich sehe:

  1. def setUp (Selbst-) sofort beim Start genannt
  2. def setUp (Selbst-) genannt wieder
  3. wenn Name == ' Haupt 'und def primären()
  4. Treiber genannt = webdriver.Firefox genannt wird
  5. erste Browser öffnet
  6. driver = webdriver.F Irefox wird ein zweites Mal aufgerufen. Die beiden Testfälle und der TearDown wurden nicht berührt.
  7. Zweiter Browser öffnet
  8. tearDown (Selbst) heißt.
  9. Zweiter Browser ist geschlossen
  10. driver = webdriver.Firefox wird ein drittes Mal aufgerufen.
  11. Third Browser öffnet
  12. tearDown (Selbst-) wird
  13. Third Browser schließt
  14. genannt
  15. driver = webdriver.Firefox wird ein viertes Mal aufgerufen.
  16. Der erste Testfall wird schließlich
+0

Beitrag der Rest des Codes, oder zumindest genug relevanten Kontext. Sie erwähnen das Problem ist "Starten von Browsern", wo ist dieser Code? –

+0

Ich habe mein Setup zur Hauptfrage hinzugefügt. – tinneko

+0

Ich schlage vor, ein vollständiges Beispiel für ausführbaren Code zu veröffentlichen, der das Problem und nicht Teile davon anzeigt –

Antwort

0

begann ich denke, dass ich eine Lösung gefunden haben. Ich habe die Zeilen in def primary() entfernt, wo setUp und tearDown zur Testsuite hinzugefügt wurden und nun ausgeführt wird, ohne den Browser wiederholt zu öffnen. Ich vermute, dass es versucht hat, setUp und tearDown als eigene Testfälle zu verwenden, aber auch setUp und tearDown in der Testsuite aufrufen.

Ich änderte auch den Test-Suite-Erstellungscode, um besser zu passen, was die Python-Dokumentation vorschlug. Basierend auf der Dokumentation, die ich gesehen habe, sieht es so aus, als ob Makesuite verwendet werden sollte, um Testfälle über Testfall-Klassen hinweg zu sammeln. Anscheinend wird es trotzdem laufen, ohne irgendwelche Fehler zu geben.

All das lässt mich mit diesem:

def primary(): 
    primary = unittest.TestSuite() 
    primary.addTest(PrimaryMethods('test_ModuleLoop_header')) 
    primary.addTest(PrimaryMethods ('test_ModuleLoop_nonheader')) 
    return primary