Selenium ileWeb Sitelerinizi Test Edin
Merhaba javaDevelopers;
Web sitelerinizi oluşturmaya başladınız, her yaptığınız değişikliğin ardından sitenizi test ediyorsunuzdur. Acaba şurası sağlam mı? Şurada şunu yapmayı unutmuşmuyum diye, size bir sır versem ve web siteleriniz kendi kendini test etseler çok güzel olmaz mıydı?
Evet arkadaşlar yanlış duymadınız şimdi bilgisayarınıza Selenium yüklüyorsunuz ve projelerinizi otomatik olarak test etmeye başlıyorsunuz.
Burada takip edebileceğiniz iki farklı metod bulunmaktadır. Birincisi Selenium WebDriver diğeri ise Selenium Idea’dır. Selenium Idea Chrome ve Firefox tarayıcılarında eklenti olarak çalışmaktadır. Bu Selenium WebDriver’ı da farklı farklı dillerle beraber test amaçlı kullanabilmekteyiz. Ruby, Java, Python, C#, JavaScript dilerini kullanarak test senaryolarımızı yazmamıza imkan sağlamaktadır. Bugün sizinle beraber hem Idea’yı kullanarak hemde Java dili ile birkaç basit test örneği yapacağız.
1. Selenium Idea Kullanarak Test Oluşturma
Öncelikle yukarıda vermiş olduğum linkten tarayıcınıza uygun olan idea’yı indiriyor ve eklenti olarak tarayıcınıza ekliyorsunuz. Bundan sonrası çok basit
Ben Google Chrome kullanıyorum yüklemiş olduğunuz eklenti bu şekilde görünecektir.
Şimdi eklentinin üzerine bir kere tıklıyoruz ve test uygulamamız açılıyor.
“Record a new test in a new project” yazının üzerine tıklayıp yeni projemizi yapmaya başlayabiliriz.
Projeye bir isim vermemizi isteyecek ben ilkTest diyorum ve OK butonuna tıklıyorum.
Testin yapılacağı alanın kök url adresini istemekte https://www.google.com/ adresini veriyorum ve Start Recording butonuna tıklıyorum.
Bizi hemen Google’ın anasayfası karşılayacaktır ve Selenium Idea’nız aşağıdaki şekilde gözüktüğü gibi görünecektir.
Şimdi hazır kayıt yapılırken ilk kayıt işlemimizi yapalım bakalım.
Selenium tarafından açılmış olan tarayıcıya medium yazıyorum ve “Enter”a tıklıyorum. Sağ alt köşede gördüğünüz gibi Selenium yaptıklarımızı kaydetmektedir. Daha sonra medium sayfasına tıklıyorum aşağıdaki resimde göründüğü gibi
Bu yaptığım işlemi de Selenium kaydetmiştir.
Tüm işlem bu kadardı şimdi kaydı kapatıyorum.
Ardından benden yapmış olduğum testi kaydetmemi istemektedir onada test1 diyip OK butonuna tıklıyorum. Sonra aşağıda yapıldığı gibi yapıyorsunuz ve arkanıza yaslanıyorsunuz.
2. Selenium Web Driver Kullanarak Java Kodu ile Test Yapma
Şimdi gelelim javaDevelopers’a yakışacak şekilde kod satırları ile bu işlemleri yapmaya ilk önce bir proje oluşturuyoruz. Daha sonra chromeDriver indiriyoruz bir tane tabi ki yukarıda vermiş olduğum linklerden Java’ya ait olan driver’ı da indiriyoruz. Daha sonra bunları projemizde kullanmamız gerekecek. Mantığını anlamanız adına çok basit bir sayfa oluşturacağım ve aynı işlemi gerçekleştireceğiz.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class googleTest {
public static void main(String[] args) throws InterruptedException {
//indirmiş olduğumuz chromedrive'i sisteme tanıtıyorum.
System.setProperty("webdriver.chrome.driver", "chromedriver");
//ChromeDriver'dan WebDriver türünde bir nesne üretiyorum.
WebDriver driver=new ChromeDriver();
//600ms bekletiyorum.
Thread.sleep(600);
//Google Chrome'u büyük ekrana alıyorum.
driver.manage().window().maximize();
//google sayfasına gidiyoruz.
driver.get("https://www.google.com");
Thread.sleep(600);
//medium yazısını yazmasını sağlıyorum.
driver.findElement(By.cssSelector("#tsf > div:nth-child(2) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input")).sendKeys("medium");
Thread.sleep(1000);
driver.findElement(By.cssSelector("#tsf > div:nth-child(2) > div.A8SBwf.emcav > div.UUbT9 > div.aajZCb > ul > li:nth-child(1)")).click();
Thread.sleep(1500);
//medium'un linkine tıklamasını sağlıyorum.
driver.findElement(By.cssSelector("#rso > div:nth-child(1) > div > div > div > div.yuRUbf > a")).click();
driver.close();
}
}
Sistemin çalışması aşağıdaki gibi olacaktır.
Şimdi burda neler oldu biraz onun hakkında konuşalım. Öncelikle şunu belirteyim yukarıda yazmış olduğum kod aslında bir test kodu bile sayılmaz ama sadece mantığını anlatmak için bu şekilde kullanıyorum daha basit olur düşüncesindeyim ilerleyen zamanlarda daha kapsamlı test kodları yazarız gibi duruyor Selenium ile beraber. Kodun altında açıklama satırları vermeme ve kodun gayet açık olmasına rağmen üzerinden bir kere daha geçmenin faydalı olacağı kanısındayım.
Öncelikle dahil ettiğimiz paketlere bakalım;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
Selenium içerisinden elemanlara erişmemizi sağlayan By parametresi bu parametre kendinden sonra gelen denetleyiciye göre o sayfada işlem yapacağı alanı belirler. Örnek olması açısından By.id(“xyzid”) burada id’si xyzid olan elemana erişiz id’ler zaten unique(eşsiz) olduğu için bu elementten bir tane olacaktır ve bu By denetleyicisini o elemente erişip orada ne yapmak istiyorsak onu yapacaktır.
WebDriver aslında sitesinden indirdiğimiz pakettir. Bu paket sayesinde biz tarayıcı üzerindeki elementlere erişebiliyoruz.
ChromeDriver bu pakette bizim Chrome üzerinde işlem yapmamızı sağlamaktadır. Biz firefox ile işlem yapacak olsaydık burada FirefoxDriver’ı kullanmamız gerekecekti.
System.setProperty("webdriver.chrome.driver", "chromedriver");
//ChromeDriver'dan WebDriver türünde bir nesne üretiyorum.
WebDriver driver=new ChromeDriver();
//600ms bekletiyorum.
Thread.sleep(600);
//Google Chrome'u büyük ekrana alıyorum.
driver.manage().window().maximize();
public static void main(String[] args) ana metodumuzun içerisinde bulunan ilk satırımız.
System.setProperty(“webdriver.chrome.driver”, “chromedriver”);
bu satırla biz chromedriver adında indirmiş olduğumuz Chrome Driver’ı tanıyoruz. Bunu tarayıcı üzerinde işlem yapacak olan eleman diye düşünebiliriz.
WebDriver driver=new ChromeDriver();
Şimdi ChromeDriver’dan driver adında türü WebDriver olan bir nesne üretiyoruz. Bu ChromeDriver bizim yukarıda tanımlamış olduğumuz kütüphaneden geliyor. Aslında burada çok güzel bir polymorphizm örneği var ama şu an konumuz bu değil umarım OOP anlattığım zaman bu konulara da değinmeye çalışacağım.
//600ms bekletiyorum.
Thread.sleep(600);
Bunu tek seferde belirtmek için böyle aldım burada 600ms boyunca çalışmış olduğu Thread’i bekletiyoruz ve böylelikle kendisinden sonra gelecek olan elementi internetin hızı nedeniyle kaçırmamış oluyoruz.
public static void main(String[] args) throws InterruptedException
Thread.sleep(600)’ü anlatmışken bu main bloğunda niye hata fırlattık diye düşünebilirsiniz bu sleep metonun çalışması için ya try catch bloğu lazım ya da bu şekilde kullanarak hata fırlatıyoruz. Bu sayede bekleme esnasında bir hata olursa bize derleyicimiz bunun karşılığını vermiş oluyor.
Can alıcı noktalara geliyorum.
//medium yazısını yazmasını sağlıyorum.
driver.findElement(By.cssSelector("#tsf > div:nth-child(2) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input")).sendKeys("medium");
Thread.sleep(1000);
driver.findElement(By.cssSelector("#tsf > div:nth-child(2) > div.A8SBwf.emcav > div.UUbT9 > div.aajZCb > ul > li:nth-child(1)")).click();
Thread.sleep(1500);
//medium'un linkine tıklamasını sağlıyorum.
driver.findElement(By.cssSelector("#rso > div:nth-child(1) > div > div > div > div.yuRUbf > a")).click();
driver.close();
Şimdi bu alanları teker teker anlatıyorum.
//medium yazısını yazmasını sağlıyorum.
driver.findElement(By.cssSelector("#tsf > div:nth-child(2) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input")).sendKeys("medium");
Burada cssSelector ile arama yapılacak olan alanı seçiyorum ve içerisine sendKeys kullanarak “medium” yazıyorum.
driver.findElement(By.cssSelector("#tsf > div:nth-child(2) > div.A8SBwf.emcav > div.UUbT9 > div.aajZCb > ul > li:nth-child(1)")).click();
Daha sonra yine cssSelector ile gelen medium yazısına tıklıyorum.
driver.findElement(By.cssSelector("#rso > div:nth-child(1) > div > div > div > div.yuRUbf > a")).click();
Son olarak bu cssSelector ile arama sonuçlarının arasından “medium”a yönlendirecek olan linke tıklıyorum. Farklı bir şekilde de medium’a gidebilirdik ama bir önceki örneğimizde de bu yolu izlediğimiz için bu şekilde yapmayı tercih ettim.
Umarım faydalı bir eğitim olmuştur javaDevelopers, bir sonraki eğitimlerde görüşmek dileğiye, sağlıcakla kalın……