📝 Commit Details:
This commit is contained in:
243
backend/utils/test_button_functionality.py
Normal file
243
backend/utils/test_button_functionality.py
Normal file
@ -0,0 +1,243 @@
|
||||
#!/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()
|
Reference in New Issue
Block a user