Visual Studio’ya Selenium Kurulumu ve Kullanımı

Selenium nedir önce ondan bahsedeyim. Selenium web uygulamaları için geliştirilmiş bir test aracıdır. Firefox için geliştirildiği için diğer tarayıcılarda çalıştırmak için ek dosyalar indirmeniz gerekir.

Bu testin amacı her ne kadar Unit Test‘lerle projemizi test etmiş olsak da (farklı) tarayıcı(lar)da test etmek de fayda vardır. Web uygulamaları farklı tarayıcılarda bazen aynı sonucu vermeyebiliyor.

Şimdi gelelim Visual Studio’da selenium ile fonksiyonel test yapmaya. Öncelikle bir web projesi oluşturalım.

Selenium Visual Studio 1

Add unit tests’e tik atın.

Selenium Visual Studio 2

Unit test projemizin “refences“a sağ tıklayıp “Manage NuGet Packages…” e tıkladıktan sonra “selenium” diye arattığımızda aşağıdaki sonuçlar çıkıcak. Burdan “Selenium WebDriver Support Classes”ı “Install” ediyoruz. “Selenium WebDriver” otmatik yanında kurulması gerekiyor. Kurulmazsa ayrıca kurmanız gerekiyor.

Selenium Visual Studio 3

 

Selenium Visual Studio 4

Selenium testleri için NUnit framework’ü gerekiyor. Onu da yüklüyoruz.

Selenium Visual Studio 5

Web projemize sağ tıklayıp “Properties“e tıklıyoruz. Sağdan “Web“e tıkladığınızda “Project Url“den projemizin local’de hangi portta çalışacağını görebiliyoruz. Bu adres bize selenium test’i için lazım olacak. Adresi kopyalıyoruz.

Selenium Visual Studio 6
App.config dosyasına “<configuration>” etiketinin içine aşağıdaki kod blokunu ekliyoruz.

<appSettings>
     <add key="Development" value="http://localhost:50654/" />
</appSettings>

Selenium Visual Studio 7

Test projemizin içine “Selenium” klasörü ekleyelim. “LoginValidationTest.cs” diye bir test dosyası ekleyelim. İçeriği

using System;
using System.Configuration;
using System.Linq;
using System.Text;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using Assert = NUnit.Framework.Assert;

namespace SeleniumExample.Tests.Selenium
{
    [TestFixture]
    public class LoginValidationTest
    {
        private IWebDriver _driverFirefox;
        private IWebDriver _driverCrhome;
        private IWebDriver _driverInternetExplorer;
        private StringBuilder _verificationErrors;

        /// <summary>
        /// App.config dosyasından "Development" değerini çekiyor
        /// </summary>
        public string BaseUrl = ConfigurationManager.AppSettings["Development"] + "/Account/Login";

        /// <summary>
        /// Test çalıştığında ilk olarak buraya girer. Constructor veya [TestInitialize()] attribute'ü gibi düşünülebilir
        /// </summary>
        [SetUp]
        public void SetupTest()
        {
            _driverFirefox = new FirefoxDriver();
            _driverCrhome = new ChromeDriver("C:\\WORKSPACE\\Selenium");
            _driverInternetExplorer = new InternetExplorerDriver("C:\\WORKSPACE\\Selenium");
            _verificationErrors = new StringBuilder();
        }

        /// <summary>
        /// Test bittikten sonra buraya giriyor, tarayıcıları kapatıyor. Assert.AreEqual ile test sonucunu veriyor.
        /// </summary>
        [TearDown]
        public void TeardownTest()
        {
            try
            {
                _driverFirefox.Quit();
                _driverCrhome.Quit();
                _driverInternetExplorer.Quit();
            }
            catch (Exception)
            {
                // ignored
            }
            Assert.AreEqual("", _verificationErrors.ToString());

        }

        /// <summary>
        /// Test metotu
        /// </summary>
        [Test]
        public void TheCreateFTest()
        {
            GenericBrowser(_driverFirefox);
            GenericBrowser(_driverCrhome);
            GenericBrowser(_driverInternetExplorer);
        }

        /// <summary>
        /// IWebDriver interface'ine sahip değer alan fonksiyonu
        /// </summary>
        /// <param name="webDriver"></param>
        public void GenericBrowser(IWebDriver webDriver)
        {
            // App.config'den aldığımız bağlantıyı tarayıcıda başlatıyoruz.
            webDriver.Navigate().GoToUrl(BaseUrl);

            // form-control class'ı olan element'leri yakalıyoruz.
            var formControls = webDriver.FindElements(By.CssSelector(".form-control"));

            //Yakaladığımız form control'lerini tek tek döngüye sokuyoruz
            foreach (var formControl in formControls)
            {
                // Form control'ünün data-val attribute'ü var ve "true" ise ve control tipi "select" (dropdownlist) değil ise döngüye alıyoruz.
                if (formControl.GetAttribute("data-val") != null && formControl.GetAttribute("data-val").ToLower() == "true" && formControl.TagName.ToLowerInvariant() != "select")
                {
                    // Olası bütün validasyon attribute'lerini alıyoruz.
                    string inputId = formControl.GetAttribute("id");
                    string requriedDatetime = formControl.GetAttribute("data-val-date");
                    string lengtMax = formControl.GetAttribute("data-val-length-max");
                    string lengtMin = formControl.GetAttribute("data-val-length-min");
                    string requriedVal = formControl.GetAttribute("data-val-required");
                    string requriedNumber = formControl.GetAttribute("data-val-number");

                    // Validasyon kontrollerine aykırı değerler girip, mutlaka hata vermesini sağlıyoruz.
                    if (lengtMax != null)
                    {
                        formControl.SendKeys(Keys.Backspace);
                        formControl.SendKeys(new string(Enumerable.Repeat('a', Convert.ToInt32(lengtMin) + 1).ToArray()));
                        webDriver.FindElement(By.CssSelector("input.btn.btn-default")).Click();
                        IsWarningGeneric(inputId, webDriver);
                    }
                    if (lengtMin != null || requriedVal != null)
                    {
                        formControl.SendKeys(Keys.Backspace);
                        formControl.SendKeys("");
                        webDriver.FindElement(By.CssSelector("input.btn.btn-default")).Click();
                        IsWarningGeneric(inputId, webDriver);
                    }
                    if (requriedNumber != null || requriedDatetime != null)
                    {
                        formControl.SendKeys(Keys.Backspace);
                        formControl.SendKeys("a");
                        webDriver.FindElement(By.CssSelector("input.btn.btn-default")).Click();
                        IsWarningGeneric(inputId, webDriver);
                    }
                }
            }
        }

        //data-valmsg-for dan hangisine aitse ordan mesaj var mı diye bakıyoruz. Varsa işlemimiz doğrudur.
        private void IsWarningGeneric(string inputId, IWebDriver webDriver)
        {
            if (webDriver.FindElements(By.CssSelector("span[data-valmsg-for='" + inputId + "']")).Count < 1)
                _verificationErrors.Append("-" + inputId + " id'li input hata mesajı vermiyor -");
        }
    }
}

Firefox hariç diğer tarayıcaları selenium direk desteklemediği için ayrıca “Driver”lar eklememiz gerekiyor. “C:\\WORKSPACE\\Selenium” dizinine “chromedriver.exe” ve “IEDriverServer.exe” eklememiz gerekiyor. Bağlantılarda sorun olursa http://www.seleniumhq.org/download/ adresinden güncel “Driver”ları indirebilirsiniz.

Açıklama satırlarıyla kodu açıklamaya çalıştım. Ne yaptığına gelirsek otomatik Firefox, Chrome ve Internet Explorer tarayıcıları başlatıp verdiğimiz “http://localhost:50654/Account/Login” adresini açıyor. Validasyon kontrollerine bakıyor ve içine uyarı vereceği birşey ekleyip(“”de olabilir) butona basıyor ve hemen o kontrolün uyarı mesajını arıyor. Eğer kontrol uyarı veriyorsa doğru çalışıyor demektir. Diğer tarayıcılarda aynı işlemi yaptıktan sonra tarayıcıları kapatıyor. Gördüğünüz gibi burda yapılan test sizin hayal gücünüze kalmış, istediğiniz şekilde şekillendirebilirsiniz. Projeyi çalıştırınca 3 tarayıcıda aynı sayfayı açıp test ediyor.

Selenium Visual Studio 8

Test ekranı bakınca testimizin geçtiğini görüyoruz.
Selenium Visual Studio 9

 

Uygulamayı burdan indirebilirsiniz.

https://github.com/akifyanbak/SeleniumExample

No Comments, Be The First!

Your email address will not be published.