Java İle Selenium WebDriver POM Yaklaşımı

Merhaba arkadaşlar, bu yazımda sizlere Java ile Selenium WebDriver’da Page Object Model (POM) yaklaşımını anlatmaya çalışacağım. Bir önceki makalemde Java İle Selenium WebDriver’a bir giriş yapmıştım bu makale ile de bir adım öteye gideceğiz.

Page Object Model Nedir ?

Bu tasarım modelinde her sayfa bir sınıfı (class) temsil etmektedir.  Sayfayı temsil eden sınıfta o sayfada yer alan bileşenler (inputbox, dropdown menü, checkbox vb.) ve metotlar tanımlanmaktadır. Ayrıca bu yaklaşımla temiz okunabilir ve bakımı kolay test kodları yazabilirsiniz.

Java programlama dili için IDE olarak JetBrains firmasına ait olan IntelliJ IDEA programının ücretsiz sürümü olan Community sürümünü kullanacağım. Bunun dışında test kodlarımı yazarken JUnit kütüphanesinden de yararlanacağım siz isteğe göre TestNG’de kullanabilirsiniz.

Test olarak basit bir oturum açma sayfasında başarılı oturum açma, başarısız oturum açma ve zorunlu alanlar boş bırakılmasını test edeceğim. IntelliJ IDEA’da maven projesi oluşturdum ve Selenium WebDriver ile JUnit’e ait maven repositorylerini pom.xml’e ekledim.

İlk olarak BaseTest adında bir sınıf oluşturdum. Bu sınıfta @After ve @Before methodlarını tanımladım böylelikle tüm test senaryolarında bu iki method ortak çalışacak.

package com.demologin.Tests;

import org.junit.After;
import org.junit.Before;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class BaseTest {

    protected WebDriver driver;

    @Before
    public void setUp() {
        setProperty();
        driver = new ChromeDriver();
        driver.manage().window().maximize();
    }

    @After
    public void tearDown() {
        driver.quit();
    }

    public static void setProperty() {
        System.setProperty("webdriver.chrome.driver", "C:/driver/chromedriver.exe");
    }

    public void navigateUrl(String url) {
        driver.get(url);

    }
}

BaseTest sınıfından sonra LoginPageCollection adında bir sınıf tanımladım. Bu sınıfta ise login sayfasına ait url, doğru ve yanlış gönderilecek kullanıcı adı, parola ve hata mesajları yer almaktadır.

package com.demologin.Collections;

public class LoginPageCollection {
    public static String loginPageUrl = "http://localhost:8383/DemoLogin/index.html";
    public static String correctUsername = "admin";
    public static String correctPassword = "123456";
    public static String incorrectUsername = "test";
    public static String incorrectPassword = "123456";
    public static String incorrectMessage = "Kullanıcı adı veya parola hatalı.";
    public static String fieldEmptyMessage = "Lütfen zorunlu alanları doldurunuz.";
}

Login sayfasında yer alan bileşenlerin tanımlandığı ve login olma methodunun çağrıldığı LoginPage sınıfını oluşturdum. Bu sınıfta signIn() methoduna LoginPageCollection sınıfında tanımladığım kullanıcı adı ve parola bilgilerini gönderiyor olacağım.

package com.demologin.Pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class LoginPage {

    By kullaniciAdi = By.id("kullaniciAdi");
    By parola = By.id("parola");
    By btnGirisYap = By.id("btnGirisYap");

    private WebDriver driver;

    public LoginPage(WebDriver driver) {
        this.driver = driver;
    }

    public void signIn(String username, String password) {
        driver.findElement(kullaniciAdi).sendKeys(username);
        driver.findElement(parola).sendKeys(password);
        driver.findElement(btnGirisYap).click();
    }
}

Son olarak login sayfası için test kodlarını yazmak için LoginPageTest adında bir sınıf oluşturdum. LoginPage sınıfında oluşturduğum signIn() methodunu burada çağırdım ve parametre olarak LoginPageCollection sınıfında oluşturduğum string parametreleri gönderdim. Assert komutu ile beklenen ve gerçekleşen sonuçları kıyasladım.

package com.demologin.Tests;

import com.demologin.Collections.LoginPageCollection;
import com.demologin.Pages.LoginPage;
import org.junit.Assert;
import org.junit.Test;


public class LoginPageTest extends BaseTest {

    @Test
    public void correctLogin() {
        navigateUrl(LoginPageCollection.loginPageUrl);
        new LoginPage(driver).signIn(LoginPageCollection.correctUsername, LoginPageCollection.correctPassword);
        Assert.assertEquals(driver.getTitle(), "Home Page");
    }

    @Test
    public void incorrectLogin() {
        navigateUrl(LoginPageCollection.loginPageUrl);
        new LoginPage(driver).signIn(LoginPageCollection.incorrectUsername, LoginPageCollection.incorrectPassword);
        Assert.assertEquals(driver.switchTo().alert().getText(), LoginPageCollection.incorrectMessage);
    }

    @Test
    public void fieldEmptyTest() {
        navigateUrl(LoginPageCollection.loginPageUrl);
        new LoginPage(driver).signIn("", "");
        Assert.assertEquals(driver.switchTo().alert().getText(), LoginPageCollection.fieldEmptyMessage);
    }
}

Test kodunu çalıştırdığımda yazdığım 3 test senaryosunun da başarılı olduğunu gördüm 🙂

Test Sonucu

Faydalı olması dileğiyle…