
Czym są wzorce projektowe i dlaczego warto je stosować? Dowiecie się tego tutaj: Wzorce projektowe – jak ogarnąć automatyzację testów i nie zginąć w chaosie.
Natomiast przypominając lub w ramach uzupełnienia, jeśli nie czytaliście poprzedniego artykułu, oto krótkie wyjaśnienie dwóch ważnych pojęć:
- Wzorzec projektowy to sprawdzone rozwiązanie często powtarzających się problemów w tworzeniu oprogramowania. Pomaga uporządkować kod, ułatwia jego utrzymanie i sprawia, że jest bardziej czytelny, dzięki czemu praca staje się bardziej efektywna i mniej chaotyczna.
- Page Object Model (POM) to jeden z takich wzorców, używany w automatyzacji testów. Polega na tworzeniu oddzielnych „klas”, które opisują poszczególne strony lub ich elementy. Dzięki temu zmiany w interfejsie trzeba wprowadzać tylko w jednym miejscu, co ułatwia zarządzanie testami i zwiększa ich stabilność.
Ten kod to przykład implementacji Page Object Model (POM) w Selenium, który służy do automatyzacji testów stron internetowych.
public class Login
{
private readonly IWebDriver _driver;
// Define the locators for the elements on the login page
private By usernameField = By.Id("user-name");
private By passwordField = By.Id("password");
private By loginButton = By.Id("login-button");
private By errorMessageContainer = By.CssSelector("h3[data-test='error']");
// Constructor to initialize the WebDriver
public Login(IWebDriver driver)
{
_driver = driver;
}
// Method to enter the username
public void EnterUsername(string username) => _driver.FindElement(usernameField).SendKeys(username);
// Method to enter the password
public void EnterPassword(string password) => _driver.FindElement(passwordField).SendKeys(password);
// Method to click the login button
public void ClickLoginButton() => _driver.FindElement(loginButton).Click();
// Method to perform the login action
public void LoginToApplication(string username, string password)
{
EnterUsername(username);
EnterPassword(password);
}
}
Co tu się dzieje?
- Klasa
Loginreprezentuje stronę logowania w aplikacji internetowej, implementując wzorzec Page Object Model (POM) w Selenium. - Sterownik WebDriver – W konstruktorze przyjmujemy instancję
IWebDriver, dzięki której wykonujemy wszystkie akcje na stronie. - Lokalizatory elementów – Pola prywatne
Byprzechowują selektory do najważniejszych elementów strony logowania:- pole użytkownika (
usernameField), - pole hasła (
passwordField), - przycisk logowania (
loginButton), - kontener wiadomości o błędzie (
errorMessageContainer).
- pole użytkownika (
- Metody:
EnterUsername(string username)— wpisuje podany loginEnterPassword(string password)— wpisuje hasło,ClickLoginButton()— klika przycisk logowania.
Dlaczego tak?
- POM pomaga utrzymać porządek: wszystkie elementy i akcje związane z konkretną stroną są w jednym miejscu.
- Testy są czytelniejsze: w testach możesz po prostu wywołać np.
registrationPage.enterEmail('test@example.com')zamiast powtarzać selektory i metody. - Łatwość utrzymania: jeśli zmieni się wygląd strony (np. zmieni się selektor pola e-mail), poprawiasz go tylko tutaj, a nie w każdym teście.
Dlaczego tak?
- POM pomaga utrzymać porządek: wszystkie elementy i akcje związane z konkretną stroną są w jednym miejscu.
- Testy są czytelniejsze: w testach możesz po prostu wywołać np.
_loginPage.LoginToApplication(login, password)zamiast powtarzać selektory i metody. - Łatwość utrzymania: jeśli zmieni się wygląd strony (np. zmieni się selektor pola e-mail), poprawiasz go tylko tutaj, a nie w każdym teście.