W tym artykule postaram się opisać wybrane dobre praktyki, które mogą zostać wykorzystane podczas pisania testów automatycznych w Selenium WebDriver.
Jaka jest potrzeba tworzenia frameworka? Stosowanie frameworka ułatwia pracę, pozwala na dziele się wiedzą, może być standardem do tworzenia projektów wewnątrz firmy.
Stworzenie projektu
Postaram się stworzyć framework testów automatycznych w języku C# w oparciu o stronę http://automationpractice/.
Zaczynam od stworzenia projektu testowego o nazwie SeleniumTestFramework przy użyciu Visual Studio.
Używam tutaj biblioteki NUnit (inne popularne dla testów pisanych w .NET to MSTest oraz xUnit). Udostępnia ona atrybut TestFixture – oznacza klasę testową, Test- oznacza metodę jako test, SetUp – oznacza metodę inicjalizującą, która zostanie wykonana przed każdym testem, TearDown – oznacza metodę, która zostanie wykonana po każdym teście.
Następnie dodajemy do naszego projektu Nuget Package – Selenium.Support, Selenium.WebDriver.ChromeDriver.
Page Object Pattern
Często używanym wzorcem w testach automatycznych jest Page Object Pattern. Wzorzec ten zakłada opakowanie elementów znajdujących się na stronie oraz akcji, które można wykonać na tych elementach w odpowiednie klasy.
Zalety używania Page Object Pattern to między innymi:
– ułatwienie w zarządzaniu strukturą testów
– unikanie duplikacji kodu
– testy są bardziej czytelne.
Stwórzmy w naszym projekcie katalog Pages gdzie będziemy przechowywać wszystkie klasy z Page’ami. Następnie stworzymy klasę, która będzie odzwierciedlać stronę główną
Przekazujemy obiekt drivera w konstruktorze klasy MainPage.
Pierwszy test
Przejdźmy teraz do napisania pierwszego testu. Tworzymy katalog Tests, w którym będziemy przechowywać testy. Napiszemy test, który będzie wpisywał w pole do wyszukiwania tekst „Dress” a następnie sprawdzimy, czy strona zwróciła oczekiwany rezultat. W tym celu stworzymy nowy Page – SearchResultPage.
W teście wykorzystamy MainPage oraz SearchResultPage.
BaseTest
Stworzymy również klasę bazowa dla testów Base Page, której będzie przechowywać metody z atrybutem SetUp oraz TearDown, które będą odpalać się przed i po każdym teście.
Konfiguracja testów
Należy jeszcze zmienić klasę bazową.
W kolejnej części tego artykułu przedstawię inna dobre praktyki, które warto zastosować podczas tworzenia frameworka do tworzenia testów automatycznych. Kod z powyższego artkułu można znaleźć tutaj: https://github.com/KatarzynaKluszczynskaGit/SeleniumTestFramework