# tests/test_calculation.py import pytest from pages.dev_page import DevPage from pages.navigation import Navigation from pages.calculation_page import CalculationPage from pages.results_page import ResultsPage class TestCalculation: """Testklasse für Berechnungslogik""" def test_calculation_workflow(self, driver, wait, base_url, test_data): """ Haupttest: Führt einen kompletten Berechnungsdurchlauf durch Wird automatisch für jede Excel-Datei parametrisiert """ login_page = DevPage(driver, wait) login_page.dev_login(base_url, user_name="John") # Setup assistant nav = Navigation(driver, wait) assistant = nav.start_calculation(base_url) assistant.search_part_numbers(test_data["input"]) assistant.delete_preselected_suppliers() assistant.select_supplier(test_data["input"]) assistant.create_calculation(test_data["input"]) # Fill calculation page calc_page = CalculationPage(driver, wait) calc_page.fill_form(test_data["input"]) for destination in test_data["input"]["DESTINATION"].values(): calc_page.add_destination(destination) calc_page.fill_destination(destination) # Ergebnisse lesen results_page = ResultsPage(driver, wait) actual_results = results_page.read_results() # Assertions: Vergleich mit erwarteten Werten aus "out" Sheet expected = test_data["expected"] for field_name, expected_value in expected.items(): actual_value = actual_results.get(field_name) # Numerische Werte mit Toleranz vergleichen if self._is_numeric(expected_value): expected_num = float(expected_value) actual_num = float(actual_value.replace("€", "").replace(",", ".").strip()) assert pytest.approx(expected_num, rel=0.01) == actual_num, \ f"Feld '{field_name}': Erwartet {expected_num}, erhalten {actual_num}" else: # String-Vergleich assert str(actual_value).strip() == str(expected_value).strip(), \ f"Feld '{field_name}': Erwartet '{expected_value}', erhalten '{actual_value}'" print(f"✓ Test erfolgreich für {test_data['filename']}") @staticmethod def _is_numeric(value): """Prüft ob Wert numerisch ist""" try: float(str(value).replace(",", ".")) return True except (ValueError, AttributeError): return False