243 lines
8.6 KiB
Python
243 lines
8.6 KiB
Python
#!/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() |