- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
"""
|
|
Tests pour Fiche #7 - Alignment Below Text
|
|
|
|
Auteur: Dom, Alice Kiro - 15 décembre 2024
|
|
Objectif: Valider que le resolver privilégie l'alignement correct pour below_text
|
|
|
|
Test: Deux inputs sur la même ligne, seul celui aligné "sous le label" gagne
|
|
"""
|
|
|
|
import pytest
|
|
|
|
# Marquer tous les tests de ce fichier comme fiche7
|
|
pytestmark = pytest.mark.fiche7
|
|
|
|
from datetime import datetime
|
|
from core.execution.target_resolver import TargetResolver, ResolutionContext
|
|
from core.models.workflow_graph import TargetSpec
|
|
from core.models.screen_state import ScreenState, RawLevel, PerceptionLevel, ContextLevel, WindowContext, EmbeddingRef
|
|
from core.models.ui_element import UIElement, UIElementEmbeddings, VisualFeatures
|
|
|
|
|
|
def E(eid, role, bbox, label="", etype="ui", conf=0.9):
|
|
"""Helper pour créer un UIElement rapidement"""
|
|
return UIElement(
|
|
element_id=eid,
|
|
type=etype,
|
|
role=role,
|
|
bbox=bbox,
|
|
center=(bbox[0] + bbox[2]//2, bbox[1] + bbox[3]//2),
|
|
label=label,
|
|
label_confidence=1.0,
|
|
embeddings=UIElementEmbeddings(image=None, text=None),
|
|
visual_features=VisualFeatures(dominant_color="n/a", has_icon=False, shape="rectangle", size_category="medium"),
|
|
confidence=conf,
|
|
tags=[],
|
|
metadata={}
|
|
)
|
|
|
|
|
|
def S(elements):
|
|
"""Helper pour créer un ScreenState rapidement"""
|
|
return ScreenState(
|
|
screen_state_id="s",
|
|
timestamp=datetime.now(),
|
|
session_id="sess",
|
|
window=WindowContext(app_name="app", window_title="win", screen_resolution=[1920,1080]),
|
|
raw=RawLevel(screenshot_path="x", capture_method="test", file_size_bytes=1),
|
|
perception=PerceptionLevel(
|
|
embedding=EmbeddingRef(provider="p", vector_id="v", dimensions=1),
|
|
detected_text=[],
|
|
text_detection_method="none",
|
|
confidence_avg=0.0
|
|
),
|
|
context=ContextLevel(),
|
|
ui_elements=elements
|
|
)
|
|
|
|
|
|
def test_below_text_prefers_same_column():
|
|
"""Test que below_text privilégie l'élément dans la même colonne"""
|
|
lbl = E("lbl", "label", (100, 100, 120, 20), "Password", conf=1.0)
|
|
good = E("good", "input", (100, 140, 260, 30), "", etype="text_input") # aligné X
|
|
bad = E("bad", "input", (420, 140, 260, 30), "", etype="text_input") # même Y mais autre colonne
|
|
|
|
screen = S([lbl, bad, good])
|
|
|
|
spec = TargetSpec(by_role="input", context_hints={"below_text": "Password"})
|
|
r = TargetResolver()
|
|
res = r.resolve_target(spec, screen, ResolutionContext(screen_state=screen, previous_target=None))
|
|
|
|
assert res is not None
|
|
assert res.element.element_id == "good"
|
|
|
|
|
|
if __name__ == "__main__":
|
|
pytest.main([__file__, "-v"]) |