Selenium ile Test Otomasyonu | Adım Adım Selenium Kurulumu

Selenium, günümüzde yazılım test otomasyonunda vazgeçilmez bir araç haline gelmiştir. Hâl böyle olunca çoğu firma veya kişinin tercih ettiği bu aracın temeline bir göz atalım.

Selenium Nedir?

Selenium'un geniş kapsamı ve açık kaynak olması, farklı test senaryolarını destekleyerek çeşitli uygulama türleri üzerinde etkili bir şekilde kullanılabilmesine olanak tanır. Selenium çeşitli programlama dilleri ile de uyumluluk sağlar. Java, Python, C#, Ruby gibi dillerle kullanılabilir. Ayrıca, popüler test araçları ve framework'leriyle entegre edilebilir.

Selenium, farklı tarayıcıları destekler ve çeşitli işletim sistemlerinde kullanılabilir. Chrome, Firefox, Safari gibi tarayıcılarla uyumlu çalışabilir. Selenium 4 ve üzeri sürümlerde projenize harici bir tarayıcı sürücüsü indirmeden projeniz için gerekli sürücüyü otomatik olarak indirerek yapılandırabilirsiniz.

Otomasyon ve Selenium Neden Önemlidir?

Selenium, test süreçlerini otomatize etmek ve hızlandırmak adına önemlidir. Otomatik testler, yazılım kalitesini artırır, hataları azaltır ve sürekli entegrasyon süreçlerini destekler. Ayrıca tekrarlanan işler için çok faydalıdır ve insanlar tarafından gözden kaçırılabilecek noktalarda faydalıdır. Çoğunlukla bakım ve regresyon testlerinde tercih edilmesi gereklidir. Projenize veya organizasyon yapınıza göre çeşitli test seviyelerinde de kullanılabilir.

Selenium'un birçok avantajı vardır.

  • Çapraz tarayıcı uyumluluğu
  • Yüksek esneklik ve geniş kullanıcı tabanı
  • Açık kaynak ve ücretsiz olması

Selenium ve Diğer Araçlarla İlişkisi

Bir otomasyon projesi oluşturmak için sadece Selenium yeterli değildir. TestNG, JUnit, Maven gibi araçlarla birlikte kullanılarak güçlü test otomasyon projeleri oluşturulabilirsiniz. Kısaca bu kavramlara da bir göz atalım.

TestNG: Java tabanlı bir test çerçevesidir ve yazılım testlerini daha etkili bir şekilde yönetmek ve düzenlemek için kullanılır. JUnit'den esinlenerek geliştirilmiştir, ancak daha fazla özellik sunar. TestNG, test sınıflarını, test gruplarını, bağımlılıkları ve parametreleri destekler, bu da test süitlerini esnek bir şekilde yapılandırmanıza olanak tanır. Aynı zamanda paralel test çalıştırma ve raporlama yetenekleri ile bilinir.

Örneğin:

  • Test suite'inin başlamadan önce ve bittikten sonra çalışacak kod blokları bu kısımda tanımlanabilir.
  • @BeforeTest, @AfterTest: Belirli bir testin başlamadan önce ve bittikten sonra çalışacak kod blokları bu kısımda tanımlanabilir.
  • @BeforeClass, @AfterClass: Belirli bir test sınıfının başlamadan önce ve bittikten sonra çalışacak kod blokları bu kısımda tanımlanabilir.
  • @BeforeGroups, @AfterGroups: Belirli bir grup testin başlamadan önce ve bittikten sonra çalışacak kod blokları bu kısımda tanımlanabilir.
  • @BeforeMethod, @AfterMethod: Her test metodunun başlamadan önce ve bittikten sonra çalışacak kod blokları bu kısımda tanımlanabilir.
  • @Test: Gerçek test metodlarını tanımlar. Ayrıca groups özelliği ile gruplandırma ve parameters özelliği ile parametre alma gibi özelliklere de sahiptir. Groups özelliği ile yazdığınız testleri “Smoke”, ”Regression” vb. Gibi gruplandırabilir ve sadece bunların birlikte çalışmasını sağlayabilirsiniz. Ayrıca Parameter özelliği ile XML tabanlı TestNG yapılandırma dosyasında veya başka bir konfigürasyon yöntemiyle belirttiğiniz bir parametreyi istediğiniz bir test kod bloğunda kullanmak için çağırabilirsiniz.

JUnit: JUnit, Java programlama dilinde yazılmış bir test çerçevesidir. Temel amacı, yazılım testlerini yazmak ve çalıştırmaktır. JUnit, test sınıflarını oluşturmanızı, test metotlarını belirtmenizi ve test sonuçlarını değerlendirmenizi sağlar. JUnit, yazılım geliştirme sürecinde özellikle birim testlerin yapılması için yaygın olarak kullanılır. TestNG ile aynı anatasyonlara sahiptir.

Örneğin:

  • @BeforeClass, @AfterClass: Belirli bir test sınıfının başlamadan önce ve bittikten sonra çalışacak kod blokları bu kısımda tanımlanabilir.
  • @Before, @After:Her test metodunun başlamadan önce ve bittikten sonra çalışacak kod blokları bu kısımda tanımlanabilir.
  • @Test: Gerçek test metotlarını belirler. Test metotları JUnit tarafından otomatik olarak tespit edilir ve çalıştırılır.

Maven: Maven, Java projelerini yönetmek, yapılandırmak ve bağımlılıkları yönetmek için kullanılan bir proje yönetim aracıdır. Maven, projelerin derlenmesi, bağımlılıkların indirilmesi, testlerin çalıştırılması, paketlemenin yapılması ve projenin yaşam döngüsü boyunca bir dizi görevi otomatikleştirmek için kullanılır. XML tabanlı bir yapıya sahiptir ve birçok Java projeleri için standart haline gelmiştir.

Adım Adım Selenium Kurulumu

Selenium ve Java kullanarak otomasyon projeleri oluşturmak için projenize eklemeniz gereken bazı bağımlılıklar vardır. Bunları Maven Repository sitesinden projenize ekleyebilirsiniz. Selenium'u bilgisayarınızda kullanmak için Java SDK’nın bilgisayarınıza kurulması gerekir. Selenium 4 ve üzeri bir sürüm kullanacaksanız Java SDK’nızın 8 ve üstü olması uyumluluk sorunlarını en aza indirecektir.

En temel bağımlılıklar şunlardır:

Selenium WebDriver:Selenium WebDriver, tarayıcılarla etkileşim kurmak için kullanılan temel kütüphanedir.

TestNG (İsteğe Bağlı): Java tabanlı bir test çerçevesidir ve yazılım testlerini daha etkili bir şekilde yönetmek ve düzenlemek için kullanılır.

Junit (İsteğe Bağlı):JUnit, Java programlama dilinde yazılmış bir test çerçevesidir. Temel amacı, yazılım testlerini yazmak ve çalıştırmaktır.

Gerekli Uygulamaların Kurulumu

Projelerinizi Intellij IDEA Community Edition veya Eclipse IDE for Java Developers ile geliştirebilirsiniz. Seçim sizin. Ben ikisini de kullanıyorum. Araştırın ve beğendiğiniz uygulamayı seçin. Hangi uygulamayı seçerseniz seçin yapmanız gereken bazı işlemler var, size onları göstereceğim.

<İlk olarak bilgisayarımıza JAVA JDK indirerek başlayacağız. Google’a aşağıdaki gibi yazarak aratın ve oracle sitesine erişin.

Siteye girdikten sonra JAVA 8 ve üstü her JDK destekler. Herhangi birini seçebilirsiniz. 11 tavsiye ediyoruz.

İlgili alana tıkladıktan sonra karşınıza bir sürü seçenek gelecek MAC ve WINDOWS için ilgili alanları gösterdim. İşletim sisteminize göre seçim yapın.

İndirdiğiniz dosyayı çalıştırın ve NEXT diyerek herhangi başka bir şeye tıklamadan kurulumu tamamlayın.

Kurulum sorası ilgili alana başarılı bir şekilde kurulduğunu kontrol edelim. System C’ye girelim.

Program Files içine girelim.

Java adında bir klasör olmalı, onun da içine girelim.

İndirdiğimiz Java sürümleri burada listelenecektir. Bende birkaç tane var önemli değil sizde de indirdiğiniz sürüm kesinlikle olmalı. Fazla ise daha önce indirmiş olabilirsiniz önemi yok. Biz projelerimizde 11 kullanacağız, önemli olan bu.

Bilgisayarımıza Java’nın pathini eklememiz lazım. Örnek olarak benim indirdiğim jdk-11.0.12 nin yolu:

C:\Program Files\Java\jdk-11.0.12

Sizlerde bunu belirleyerek not alın.

Bilgisayarınız arama yerine Edit The System Environment veya Sistem Ortam Değişkenleri yazın ve ilgili bilgisayar ayarını tıklayarak açın. Aşağıdaki işaretli alana tıklayın.

New veya Yeni butonuna tıklayın.

Aşağıdaki gibi alanları doldurun isim kesinlikle JAVA_HOME olmalı. Value veya Değer ise sizin az önce İndirdiğiniz Java’nın konumu olmalı. Bilgileri girip OK basınız.

Aşağıdaki gibi eklendiğini göreceksiniz. OK diyerek pencereleri kapatınız.

Şimdi IDE’mizi indireceğiz. Yukarıdakilerden herhangi birini indirebilirsiniz. Ben şimdilik projelere Intellij ile devam edeceğim. Hemen altında Eclipse içinde görseller paylaşacağım.

Intellij IDEA Kurulumu

Programınızı indirdikten sonra yeni bir proje oluşturun. SDK 11 seçin. Projeniz Maven projesi olacak. Proje ismini ve konumunu belirleyin.

Projenizi oluşturun ve aşağıdaki gibi pom dosyası oluşmuş olacak.

Eclipse

Öncelikle projemizde bir maven proje oluşturacağız.

Projenize sağ tıklayın -> Configure -> Convert to Maven Project seçin.

Burada Group id, Artifact id ve Version istediğiniz gibi yazıp belirleyebilirsiniz. Belirledikten sonra Tamam tıklayın.

Aşağıdaki gibi bir pom dosyası oluşacaktır.

Şu an Selenium hakkında hiçbir şey eklemedik projemizde şimdi bu kısımları halledeceğiz.

MAVEN, öncelikle Java projeleri için kullanılan bir yapı otomasyon aracıdır. MAVEN, Java tabanlı bir proje için merkezi depodur. Projemizde kullanacağımız ilgili kütüphaneleri buradan projemize dahil edeceğiz.

MAVEN Repository Kurulumu

Google da MAVEN Repository arayalım. İlgili linke tıklayalım.

Burada arama yerine selenium yazalım ve işaretli alana tıklayalım. Selenium Java

4.6.0 versiyonunu seçin. Selenium 4 W3C uyumluluğuna sahip olduğu için tarayıcı testlerini daha sağlıklı geçmemizi sağlayacaktır. Ayrıca en son sürümde WebDriverManager Bonigarcia eklentisi Selenium içinde gelmekte. Bu sayede ek bir tanım yapmamız gerekmeyecek.

Aşağıdaki işaretli kodu kopyalayarak projemize import edeceğiz. Otomatik olarak gerekli olan tüm bileşenler projemize yüklenmiş olacak.

Şimdi MAVEN projelerimi eklemek için pom dosyamız içine bir alan oluşturacağız. Aşağıdaki gibi

<dependencies>

Bu aralığı maven projelerimizin scriptlerini yazacağız.

</dependencies>

Az öce Selenium Java isimli maven proje scriptimizi alıp bu aralığa yapıştırıyoruz. Eclipse kullananlar pom dosyasının bileşenleri indirip kaydetmesi için CTRL+S yapabilirsiniz. Otomatik olarak proje bileşenleri yüklenecektir. İntellij için sağ tık->Maven->Reload project yapmanız yeterlidir.

Aşağıdaki gibi bileşenleriniz eklenmiş olacak.

Aynı şekilde Maven Repository'den TestNG indirip pom dosyamıza ekliyoruz.

Tüm eklemelerimizi yapınca pom.xml dosyamızı tekrardan kaydediyoruz veya reload ediyoruz.

Tüm kurulumları tamamladık. Artık ilk otomasyonunuzu yazabilirsiniz.

Otomasyon Türleri ve Örnekler

Selenium dediğimizde akla gelen başka kavramlarda var. Cucumber, Gherkin, BDD, TDD, Page Object Model (POM) gibi konseptlere bir göz atalım.

BDD ve TDD

Behavior Driven Development (BDD) ve Test Driven Development (TDD) yazılım geliştirme süreçlerini yönlendiren metodolojilerdir. BDD, yazılımın davranışlarını anlama, tanımlama ve test etme sürecini vurgular. TDD ise testlerin yazılımın geliştirilme sürecinin bir parçası olarak önceden yazılmasını ve bu testlerin başarılı olacak şekilde kodun yazılmasını savunur.

Cucumber ve Gherkin

Cucumber ve Gherkin Behavior Driven Development (BDD) yaklaşımının temel taşlarıdır. Gherkin, insanların anlayabileceği bir dilde yazılmış özel bir dil olan bir senaryo dilidir. Cucumber ise bu dilde yazılmış senaryoları yürütmek için kullanılır.

Örneğin:

Feature: Hesap Makinesi

  Senaryo: İki sayıyı topla

    Given birinci sayı 5

    And verilen ikinci sayı 7

    When sayıları toplarım

    Then sonuç 12 olmalı

Mesela bu yöntem insanların anlayabileceği bir dilde yazılmıştır.

Page Object Model (POM)

Test senaryolarını ve sayfaları daha iyi organize etmek için kullanılan bir tasarım desenidir. Bu desen, her sayfanın bir sayfa objesi ile temsil edildiği ve sayfa ile ilgili tüm etkileşimlerin bu obje üzerinden yönetildiği bir yapıyı benimser.

Tüm bu kavramları birleştirdiğimizde ortaya çıkan tabloyu özetleyelim. Cucumber ve Page Object Model (POM) farklı konseptlerdir. İkisi de yazılım test otomasyonunda kullanılan ancak farklı amaçlara hizmet eden yapılar ve tasarım desenleridir.

Cucumber: Senaryoları doğal dilde ifade etmek ve bu senaryoların otomatik testlerle ilişkilendirilmesini sağlamak için kullanılır. Cucumber, yazılımın beklenen davranışlarını açık bir şekilde belirlemenize ve bu davranışları test senaryolarına dönüştürmenize yardımcı olur.

Page Object Model (POM): Bu ise bir tasarım desenidir ve özellikle Selenium gibi web tabanlı otomasyon araçlarıyla kullanılır. POM, bir web uygulamasının sayfalarını ve bu sayfalarla etkileşimde bulunan metodları temsil eden sınıfların kullanılmasını önerir. Bu sayede kodun okunabilirliği artar, bakım daha kolay olur ve sayfa değişiklikleri daha az etkiler.

Yani, Cucumber senaryoları tanımlamak ve bu senaryoları test etmek için kullanılırken, POM, bir web uygulamasının sayfalarını ve bu sayfalarla etkileşimde bulunan metotları daha düzenli ve modüler bir şekilde düzenlemek için kullanılır. Cucumber senaryolarını Page Object Model (POM) ile birleştirmek oldukça yaygındır ve büyük, karmaşık test otomasyon projelerinde sıkça kullanılır. Bu şekilde, Cucumber senaryolarını daha düzenli ve okunabilir bir şekilde organize etmek mümkün olur. Her bir sayfa veya bileşen için ayrı bir Page Object Model sınıfı oluşturularak, kodun bakımı ve genişletilmesi kolaylaşır.

Testlerinizde başarılı sonuçlar almanız dileğiyle.

Yazar: Melih Can Demirtel