#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Test-Skript für Button-Funktionalitäten Testet alle Buttons aus dem Selenium-Test auf echte Funktionalität """ import requests import time import json from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class ButtonFunctionalityTester: def __init__(self, base_url="http://127.0.0.1:5000"): self.base_url = base_url self.session = requests.Session() self.driver = None def setup_driver(self): """Selenium WebDriver einrichten""" try: self.driver = webdriver.Chrome() self.driver.set_window_size(1696, 1066) print("✅ WebDriver erfolgreich initialisiert") except Exception as e: print(f"❌ Fehler beim Initialisieren des WebDrivers: {e}") def login(self, username="admin", password="admin"): """Anmeldung durchführen""" try: self.driver.get(f"{self.base_url}/auth/login") # Warten bis Login-Formular geladen ist username_field = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.NAME, "username")) ) username_field.send_keys(username) self.driver.find_element(By.NAME, "password").send_keys(password) self.driver.find_element(By.XPATH, "//button[@type='submit']").click() # Warten bis Dashboard geladen ist WebDriverWait(self.driver, 10).until( EC.url_contains("/dashboard") ) print("✅ Erfolgreich angemeldet") return True except Exception as e: print(f"❌ Fehler bei der Anmeldung: {e}") return False def test_button_functionality(self, button_selector, button_name, expected_action=""): """Teste einen einzelnen Button auf Funktionalität""" try: print(f"\n🔍 Teste Button: {button_name} ({button_selector})") # Button finden button = WebDriverWait(self.driver, 5).until( EC.element_to_be_clickable((By.CSS_SELECTOR, button_selector)) ) # Ursprünglichen Zustand erfassen original_url = self.driver.current_url original_text = button.text if button.text else "Kein Text" print(f" 📍 Button gefunden: '{original_text}'") # Button klicken button.click() print(f" 👆 Button geklickt") # Kurz warten für Reaktion time.sleep(1) # Reaktion prüfen reactions = [] # URL-Änderung prüfen if self.driver.current_url != original_url: reactions.append(f"URL-Änderung: {self.driver.current_url}") # Modal-Fenster prüfen try: modal = self.driver.find_element(By.CSS_SELECTOR, ".fixed.inset-0") if modal.is_displayed(): reactions.append("Modal-Fenster geöffnet") except: pass # Loading-Spinner prüfen try: spinner = self.driver.find_element(By.CSS_SELECTOR, ".animate-spin") if spinner.is_displayed(): reactions.append("Loading-Animation aktiv") except: pass # Toast-Benachrichtigung prüfen try: toast = self.driver.find_element(By.CSS_SELECTOR, ".fixed.top-4.right-4") if toast.is_displayed(): reactions.append(f"Toast-Nachricht: {toast.text}") except: pass # Button-Text-Änderung prüfen new_text = button.text if button.text else "Kein Text" if new_text != original_text: reactions.append(f"Text-Änderung: '{original_text}' → '{new_text}'") # Ergebnis ausgeben if reactions: print(f" ✅ Reaktionen gefunden:") for reaction in reactions: print(f" - {reaction}") return True else: print(f" ⚠️ Keine sichtbare Reaktion erkannt") return False except Exception as e: print(f" ❌ Fehler beim Testen: {e}") return False def test_all_buttons(self): """Teste alle Buttons aus dem Selenium-Test""" if not self.setup_driver(): return if not self.login(): return # Button-Test-Plan basierend auf Selenium-Test button_tests = [ # Dashboard-Seite (Startseite) { "page": f"{self.base_url}/", "buttons": [ (".mb-8 > .btn-primary", "Haupt-CTA Button"), (".btn-primary > span", "CTA Button Span") ] }, # Dashboard-Seite { "page": f"{self.base_url}/dashboard", "buttons": [ ("#refreshDashboard > span", "Dashboard Aktualisieren") ] }, # Drucker-Seite { "page": f"{self.base_url}/printers", "buttons": [ ("#refresh-button > span", "Drucker Aktualisieren"), ("#maintenance-toggle > span", "Wartungsmodus Toggle") ] }, # Jobs-Seite { "page": f"{self.base_url}/jobs", "buttons": [ ("#batch-toggle > span", "Mehrfachauswahl Toggle"), ("#refresh-button > span", "Jobs Aktualisieren") ] }, # Admin-Seite { "page": f"{self.base_url}/admin", "buttons": [ ("#analytics-btn", "Analytics Button"), ("#maintenance-btn", "Wartung Button"), ("#system-status-btn", "System Status Button"), ("#add-user-btn", "Benutzer hinzufügen") ] } ] results = {"total": 0, "working": 0, "broken": 0} print("🚀 Starte umfassenden Button-Funktionalitäts-Test...\n") for test_group in button_tests: print(f"📄 Navigiere zu Seite: {test_group['page']}") try: self.driver.get(test_group["page"]) time.sleep(2) # Seite laden lassen for selector, name in test_group["buttons"]: results["total"] += 1 if self.test_button_functionality(selector, name): results["working"] += 1 else: results["broken"] += 1 except Exception as e: print(f"❌ Fehler beim Laden der Seite {test_group['page']}: {e}") # Zusammenfassung print(f"\n{'='*60}") print(f"📊 TEST-ZUSAMMENFASSUNG") print(f"{'='*60}") print(f"Getestete Buttons gesamt: {results['total']}") print(f"✅ Funktional: {results['working']}") print(f"❌ Nicht funktional: {results['broken']}") success_rate = (results['working'] / results['total']) * 100 if results['total'] > 0 else 0 print(f"📈 Erfolgsrate: {success_rate:.1f}%") if success_rate >= 90: print("🎉 AUSGEZEICHNET! Fast alle Buttons funktionieren korrekt.") elif success_rate >= 75: print("✅ GUT! Die meisten Buttons funktionieren korrekt.") elif success_rate >= 50: print("⚠️ BEFRIEDIGEND! Einige Buttons benötigen noch Verbesserungen.") else: print("❌ VERBESSERUNG ERFORDERLICH! Viele Buttons haben keine Funktionalität.") def cleanup(self): """Aufräumen""" if self.driver: self.driver.quit() print("🧹 WebDriver beendet") def main(): """Hauptfunktion""" tester = ButtonFunctionalityTester() try: tester.test_all_buttons() finally: tester.cleanup() if __name__ == "__main__": main()