Selenium ile Başarılı ve Başarısız Login Test Senaryosu Yazma(XUnit-.NetCore)

AvsarYagmur
Delivery Hero Tech Hub
4 min readMar 9, 2022

Merhaba,

Bu yazımda, başarılı ve başarısız login test senaryolarının nasıl yazılacağını açıklayacağım. Yazının sonunda, kullanıcı bilgilerini config dosyasından alarak senaryoda kullanan, yazması beklenen metinlerin kontrollerinin yapıldığı test senaryolarımızı içeren bir otomasyon projemiz olacak. Başlamadan, selenium ile test projesi yazmak için gerekenleri tamamlamak adına önceki yazılarıma göz atmanızı öneririm:

- Kurulum

- Web sitesi üzerinden UI elementleri bulma

- Senaryo Yazımı Hazırlık Süreci

Başarısız Login Senaryosu

Başarısız login senaryosu denildiğinde kontrol edebileceğimiz iki senaryo;

  • Boş girilmiş kullanıcı adı veya şifre
  • Hatalı girilmiş kullanıcı bilgileri(duruma göre şifre ve kullanıcı ayrı ayrı da kontrol edilebilir.)

Bu 2 farklı senaryo için ayrı ayrı testler yazarak testimizi durumlara göre ayrıştırmış olacağız. Bu şekilde, gerektiği zaman içlerinden sadece biri için de test senaryosu koşabileceğiz.

Başlamadan önce MediumProjectScenarios isminde yeni bir klasör oluşturdum. Tüm senaryolarımı bu klasör içerisinde oluşturacağım. Böylece ileride yeni senaryolar eklemek istersem içine yeni bir class oluşturarak kodu ayrıştırıp daha okunabilir hale getirmeyi sağlayacağım. MediumProjectScenarios klasörü içine Login isimli bir class oluşturdum. Login işlemine ait tüm test senaryolarımı bu class içerisine yazacağım.

Login class oluşturuldu

Test metot isimlendirmesi için genellikle aşağıdaki gibi bir format kullanılıyor. (Şirket veya ekip kültürüne göre ufak değişiklikler gösterebilir.)

MetotIsmi_TestinBeklenenSonucu_Kosul

Tüm login test senaryolarımda kullanıcı adı ve şifre girip, giriş yap butonuna tıklatma işlemi yaptırdığımdan, bunu bir metoda dönüştürmüştüm. Bu sayede ilgili metodu çağırarak giriş işlemi için kod tekrarından kaçınmış olacağım.

BaseAction class’ı içindedir. (Senaryo yazımı hazırlık süreci)

Boş Girilmiş Kullanıcı Adı veya Şifre Senaryosu

Hatalı Girilmiş Kullanıcı Senaryosu

Başarılı Login Senaryosu

Başarılı login senaryosunda, giriş yaptıktan sonra anasayfada görülebilen bir alanı kontrol edeceğiz. Böylece giriş yaptığımıza emin olabiliriz. Bu yazıyı yemeksepetine giriş yapma senaryosu olarak kurguladığımdan başarılı bir giriş sonrası kontrol edeceğim alanı banabi ve mahalle seçim popup olarak belirledim.

Login Class Kodları

Aşağıda driver’ın başlatılması, Chrome açılması, başarılı ve başarısız login senaryosu için testler ve son olarak Chrome’u kapatmak için yazdığımız kodlar bulunuyor. Kısaca senaryo kodlarının son hali diyebiliriz :)

using System;
using System.Threading;
using MediumTestOtomasyon.MediumProjectUIElements;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Xunit;
namespace MediumTestOtomasyon.MediumProjectScenarios
{
public class Login: IDisposable // Test classına IDisposable interface'i implement edilir.
{
public IWebDriver Driver { get; set; }
public LoginPageUIElements LoginPageUI { get; }
public Login()
{
try
{
Driver = BaseActions.InitializedDriver(); // bu methot ile testler başlarken ilk çalıştırılır. Driver ve chrome ayağa kalkar.
LoginPageUI = new LoginPageUIElements(Driver); // UI elementlerini kullanabilmek için tanımlama yapıldı.
}
catch (Exception e)
{
Console.WriteLine("Chrome Başlarken Hata alındı..." + e);
}
}
[Fact]
public void Login_ShouldReturnFail_WhenUserNull()
{
BaseActions.LoginWithTheUsernameAndPassword(Driver, BaseConfig.Credentials.EmptyUsername, BaseConfig.Credentials.EmptyPassword);
Assert.Equal("Lütfen şifrenizi giriniz.", LoginPageUI.PleaseEnterPasswordInfo.Text); // Assert ile metin karşılaştırması yapılır.
}
[Fact]
public void Login_ShouldReturnFail_WhenUserInValid()
{
BaseActions.LoginWithTheUsernameAndPassword(Driver, BaseConfig.Credentials.InvalidUsername, BaseConfig.Credentials.InvalidPassword);
Thread.Sleep(10000);Assert.True(LoginPageUI.InvalidUserInfo.Displayed); // Assert ile popup açıldı mı kontrol edilir.} [Fact]
public void Login_ShouldReturnSuccess_WhenUserValid()
{
BaseActions.LoginWithTheUsernameAndPassword(Driver, BaseConfig.Credentials.ValidUsername, BaseConfig.Credentials.ValidPassword);
Thread.Sleep(10000);Assert.True(LoginPageUI.AfterLoginPopup.Displayed); //Assert ile login sonrası banabi,mahalle vb seçim yaptığımız popup kontrol edilir.}public void Dispose() // Tüm test methodları çalıştıktan sonra en son bu class'a uğrar.
{
try
{
Driver.Quit();
}
catch (Exception e)
{
Console.WriteLine("Chrome Durduruluken Hata alındı..." + e);
}
}
}
}

Test Sonucunda Hata Bulunursa..

Şimdi sizlere, test otomasyonunun hata bulma durumunu açıklayacağım. Testler sırasında kod beklediği sonuç dışında bir durumla karşılaşırsa, olması gereken bir UI element yoksa, verilmesi beklenen aksiyon gerçekleşmezse gibi durumlarda otomasyon hata verecektir. Böylece yazılımdaki olası hatayı otomasyon projesi sayesinde tespit etmiş olacağız.

Aşağıdaki örnekte şifrenin boş girilmesi halinde yazması beklenen uyarı mesajı ile ekranda görülen mesajın aynı olmaması durumuna ait bir hata bulunuyor. Bu test çalıştırıldığında Test Explorer üzerinde hata alan kısım kırmızı ile işaretleniyor ve hatanın açıklaması yazılıyor. Böylece yazılımdaki hataya sebep olan durumu yakalamamızı kolaylaştırıyor.

Metin uyuşmazlığı

Bu örnekte ise test çalıştırıldığında tanımlanan UI elementin bulunamadığından bahsediliyor. UI elementin belirteci değişmiş olacağı gibi önyüzde bir hatanın sebebi de olabilir.

Elementi bulamama

Umarım size yardımcı olabilmişimdir. Bu yazının devam yazısında ekran görüntüsü almayı anlatacağım. Devamında görüşürüz :)

Sağlıcakla kalın…

--

--