Python ve Selenium Denemeleri

Selenium ile karşılaşmışken, nasıl kullanılır diye biraz kurcalamak istedim. Yaptığım aşamaları, aldığım sonuçları falan da ufaktan paylaşayım dedim.

Selenium, WebDriverları kullanarak farklı tarayıcılarda, sürekli tekrar ettiğimiz testleri otomatikleştiren, sonuçlarını kontrol eden ve günün sonunda hem bizi tekrar tekrar aynı testleri yapmaktan kurtaran hem de sürekli yaparken gözümüzden kaçabilecek noktaları engelleyen yapısıyla öne çıkıyor.

Kendisi birçok dilde kullanılabildiği gibi, ben Python API sunan kütüphaneleri genelde bu API’ler üzerinden kullandığım için bunu da aynı şekilde denedim. Sonuçlar da hiç fena değildi. Yazının sonuna da bu konuda bilgi veren birkaç link ekledim.

Ben kurulumu virtual environment üzerinde yaptım. Sistem geneline kurmaktansa daha rahat ettirdiği için bu şekilde kurulum üzerinden gideceğim. Öncelikle bir venv oluşturup Selenium’u kuralım:

İlk satırda selenium adında bir sanal ortam oluşturduk. Ardından oluşturduğumuz ve selenium dizinin altında bulunan bu ortamı aktifleştirdik. Son satırda ise yeni oluşturduğumuz ortama Selenium kurulumunu yaptık.  Bu kısımda aldığınız çıktılar aşağı yukarı şu şekilde olmalı:

Ben Linux ve Mac OS kullanıcılarının uygulayabileceği formatta anlatacağım. Başka bir işletim sistemi kullanıyorsanız Linux dağıtımlarından birine geçip devam etmenizi öneririm.

Kurulum bittiğine göre başarılı olup olmadığını Python’dan kısa bir şekilde görebiliriz:

Buraya kadar bir sorun gözükmüyor. Testleri yapmak istediğiniz tarayıcı için WebDriver kurmanız gerekecek. Firefox için GeckoDriver, Chrome için ChromeDriver ve diğer alternatifler için de farklı driver kurulumlarına ihtiyacımız olacak. Hangi tarayıcıyı kuracaksanız ona uygun olan webdriverı sisteminize yüklemelisiniz. Geckodriver büyük ihtimalle kullandığınız Linux dağıtımının paket yöneticisinde bulunacağı için kurulumu tamamlayabilirsiniz. Bu anlatımda Firefox üzerinden gideceğiz.

Bu kısmı düzgün bir şekilde hallettiğimizden emin olmak için Python’a şunları yazalım:

Buraya kadar hatasız geldiyseniz, bir Firefox penceresi açılmış olmalı. Bu pencere açılırken program driver = ile başlayan satırda biraz bekleyecektir.

Eğer bu aşamada GeckoDriver içeren bir hata aldıysanız, sisteminize GeckoDriver’ı kurmanız gerekiyor. Böyle bir durumda kurulumu kontrol edin ve PATH’inizde olduğundan emin olun.

Artık ufak denemeler yapmaya başlayabiliriz. Öncelikle açılan Firefox üzerinde ‘gurayyildirim.com.tr’ adresini açalım:

Açılan tarayıcınızdan kontrol ederseniz, bu adresin açıldığını takip edebilirsiniz. Şimdi sayfanın başlığına bakalım:

Bu noktada başlık üzerinde bazı kontroller yapabiliriz. Örneğin, ‘Blog’ kelimesi başlıkta var mı yok mu görmek için:

Bir adım ileri gidersek, assert komutunu kullanarak, istediğimiz kelime başlıkta yoksa hata vermesini sağlayabiliriz. Şimdi assert’i önce başlıkta geçen bir kelime ile, sonrasında ise başlıkta yer almayan bir kelime ile deneyelim ve farkını görelim:

Testleri yazarken assert’ten sıkça yararlanılıyor imiş. Daha önce normal programlarda bazı noktalarda işlerin düzgün gidip gitmediğini kontrol ederken kullandığım bu anahtar kelimenin web testlerinde bu şekilde kullanılması yeni bir bakış açısı kazandırdı.

Şimdi blog üzerindeki arama kutusunu bulup, oraya bir şeyler yazıp arayalım. Öncelikle, bulunduğunuz sayfanın üst kısmına bakarsanız, arama yapmak için bir büyüteç ikonu olduğunu göreceksiniz. Bizim yazacağımız kodun oraya tıklaması gerekiyor. Bu işlem için de koda o ikonu tarif etmemiz lazım. Bu iş için sağ tıklayınca gelen ‘Öğeyi Denetle‘ veya benzer isimde olan seçeneklerden faydalanacağız. Bu sayfa için o ikonun id’si ‘search-toggle’ olarak verilmiş. Şimdi onu sayfada konumlandıralım:

Anahtar kelimeler ile kendi belirlediğim değişken isimlerini rahat ayırt edebilmeniz için çoğu yerde Türkçe isimlendirme kullanacağım. Burda da arama_butonu adlı değişkene bu butonu konumlandırdık. Şimdi bu butona tıklama işlemini gerçekleştirelim. Bunu click() ile yapıyoruz:

Bu satırın ardından dönüp Firefox penceresine bakarsanız, üst kısımda çıkan arama menüsünü göreceksiniz.

Şimdi yazacağımız kısım, arama yapacak kutuyu bulup oraya bir şeyler yazmalı ve arama yapmalı. Bunun için yine öğeyi sayfada konumlandırmamız gerekiyor. Kaynak koduna baktığımda sayfada ‘search-field olarak sınıf ismini görüyoruz. Özellikle sayfada birden fazla öğe aynı sınıfa ait olacaksa bunu kullanmak iyi bir çözüm değil. Ancak şu anki durumda sayfada tek bir arama kutusu var ve değişmesi de bu blog için pek beklendik bir olay olmadığından, bu sınıfa göre konumlandırma yapacağız:

Bu noktada, ilgili kutuyu da arama_kutusu adlı değişkene konumlandırdık. Şimdi sitede Kivy kelimesini arayalım:

Bu satırı yazdıktan sonra dönüp Firefox penceresine tekrar bakarsanız, kutuda Kivy yazdığını görmelisiniz. Geriye kalan tek şey, aramak için Enter tuşuna basmak. Bunun için Selenium kütüphanesinden tuşları kullanmamız gerekiyor. Onu da şöyle yapıyoruz:

Şimdi tekrar Firefox ekranına bakarsanız, arama yapılmış ve sonuç sayfasında olduğunuzu göreceksiniz. Artık bu sayfa üzerinden aramanın doğru şekilde yapılıp yapılmadığını kontrol edebiliriz.

Eğer aradığımız ifade sayfada olmasaydı, Nothing Found diye bir mesaj alacaktık. Kivy araması sonuç verdiği için sonuçlarla karşılaştık. Şimdi sayfada sonuç bulunup bulunmadığını bu bilgiyle kontrol edelim:

Bu yazdığımız satır biraz kafa karıştırıcı gelebilir. Ama biraz incelediğimizde, sayfada Nothing Found yazarsa hata vereceğini görüyoruz.

İşimiz bittikten sonra açılan Firefox penceresinin de düzgün şekilde kapanması için:

Dememiz yeterli oluyor. O anda Firefox’tan çıkıldığını görmelisiniz.

Buraya kadar yaptığımız basit bir örnekti. Unittest modülü ile bu testleri daha otomatize edecek ve raporlamayı daha iyi bir hale getireceğiz. Ayrıca testleri dosyalarda toplayarak daha rahat çalışır hale getireceğiz.