Page Object Model (POM) to architektoniczny wzorzec do organizacji kodu testów automatycznych, szczególnie w testowaniu UI. Proponuje on wydzielanie oddzielnych klas lub obiektów do logicznego przedstawienia każdej strony aplikacji, definiując metody do pracy z elementami i interakcjami z nimi.
Historia pytania: W przeszłości testy automatyczne pisano „jak jest” — bezpośrednio interakcjonując z lokalizatorami elementów w samych testach, co prowadziło do duplikacji kodu i trudności w utrzymaniu. Wprowadzenie POM umożliwiło przeniesienie wszystkiego, co dotyczy danej strony, do oddzielnej klasy, co ułatwia utrzymanie testów automatycznych.
Problem: Bez strukturyzacji testów w dużych projektach szybko gromadzi się "chaotyczny" kod. Jakakolwiek zmiana w interfejsie wymaga aktualizacji licznych testów, co prowadzi do wysokich kosztów utrzymania.
Rozwiązanie: POM pozwala na centralne zarządzanie działaniami i elementami, zmniejsza duplikację, upraszcza skalowanie infrastruktury testowej. Na przykład, jeśli trzeba zmienić lokalizator przycisku, poprawka dokonywana jest tylko w jednym miejscu — w Page Object, a nie we wszystkich testach.
Kluczowe cechy:
Czy można zrealizować testy automatyczne bez wzorca POM?
Można, ale takie podejście prowadzi do duplikacji kodu, wysokich kosztów utrzymania i braku możliwości skalowania.
Czy każdy element strony musi być wydzielony do oddzielnego Page Object?
Nie, Page Object tworzy się dla logicznych stron, które obejmują związane elementy i działania, czasem dla małych, powtarzających się bloków można stosować oddzielne pomocnicze jednostki (na przykład składniki).
POM rozwiązuje wszystkie architektoniczne kwestie testów automatycznych?
Nie, pomaga on strukturyzować logikę pracy z interfejsami, ale nie określa pełnej architektury frameworka do testowania — na przykład, przetwarzanie danych, generowanie raportów i zarządzanie stanem aplikacji.
Testy automatyczne pisano bez POM — wszystkie działania zapisywano bezpośrednio w metodach testowych. W rezultacie prosta zmiana id przycisku na jednej stronie wymagała poprawienia 35 testów, z których wiele stało się niepoprawnych, a inne po prostu przestały działać.
Zalety:
Wady:
W nowym projekcie testy zbudowano według POM: dodano klasy stron, enkapsulowano pracę z elementami, wykorzystano dziedziczenie dla wspólnych wzorców.
Zalety:
Wady: