Selenium Web Driver: Yer Bulucular (Locators)
Öncelikle Selenium serime Selenium Web Driver ile devam edeceğimi belirtmek istiyorum 🙂
Bu yazıda Selenium Web Driver kullanarak geliştirdiğimiz test otomasyonunda kullanılan yer buluculardan bahsedeceğim.
Selenium Yer Bulucular, web sayfasındaki web öğelerini tanımlamak için kullanılır. Selenium’da; metin kutuları, onay kutuları, bağlantılar, radyo butonları, liste kutuları ve diğer web öğeler üzerinde eylemler gerçekleştirmek için yer buluculara ihtiyacımız vardır. Konum belirleyiciler bize nesneleri tanımlamada yardımcı olur.
Selenium Yer Bulucular(Locators) Nelerdir?
ID
Class Name
CSS Selector
Name
Xpath
Linktext
Partial Linktext
Tag Name
DOM Locator
Web Sayfasındaki Öğeleri Nasıl Buluruz?
Yukarıdaki listede verdiğim yer bulucuları kullanmadan önce web sayfası üzerindeki elementlere nasıl ulaşırız göstermek istiyorum.
1)Öncelikle otomasyon yazacağımız site içerisinde klavyeden F12’ye basarak geliştirici seçeneklerine ulaşıyoruz. Bu ekranı farklı bir pencerede yada sayfanızın solunda,sağında,aşağısında duracak şekilde açabilirsiniz(Bkz: ‘Dock Side’ görseli).
2)Burada ‘Elements’ tabını açıyoruz. Web sayfamızdaki bütün elementleri burada görebiliriz.
3)İlk 2 maddeyi bu ekranı tanımanız için yazdım ancak direk olarak ilgili elemente ulaşmak için elementin üzerine gelip(Örneğin bir ‘Oturum Aç’ butonu olabilir) sağa tıklayıp ‘İncele’ seçeneğine tıklayarak bu elemente ait yer buluculara ulaşabilirsiniz(Bkz: ‘İncele Seçeneği’ görseli).
4)Elementin bilgilerinden size uygun olan locator için gerekli bilgileri alıp otomasyonunuzda bu elemente ulaşmak için kullanabilirsiniz(Bkz: ‘Element Bilgileri’ görseli)
Dock Side
İncele
Element Bilgileri
Yer Bulucuların Özellikleri ve Kullanımları
Selenium Web Driver’da ilgili elementleri bulabilmek için ‘findElement/findElements’ syntaxını kullanmalıyız.
1)ID
ID, web sayfasında her öğeye özgü olduğu düşünülerek öğeleri bulmanın en yaygın yoludur. World Wide Web Konsorsiyumu’na (W3C) dayalı kimlikler öğelere özgü olmalıdır ve bu nedenle öğeyi bulmak için en hızlı ve en güvenli yöntem olarak kabul edilir. Ancak ne yazık ki, tarayıcılar bu kuralı atlamaya izin verdiği için geliştiriciler bu kurala uymayabilir. Özellikle, bir tablo veya liste söz konusu olduğunda, kimlikler verilere bağlı olarak artımlı veya dinamik olarak yerleştirilebilir ve bu da bu tür öğelerin başka yollarla bulunmasını gerektirebilir. Id’nin değişken olup olmadığı sayfa yenilenerek tekrar ilgili elemente ulaşıp kontrol ederek anlaşılabilir.
ID Locator
Syntax: driver.findElement(By.id(“email”))
2)ClassName
ClassName locator, elementin class özelliği kullanılarak bulunmasını sağlar. Element bilgileri içerisinden ‘class = ……’ etiketindeki bilgi alınır.
ClassName
Syntax: driver.findElement(By.className(“btn btn-lg btn-primary”))
3)CSS Selector
Bir elementte ID yada name ile ilgili bir bilgi yoksa veya bunlar değişken ise genellikle CSS Selector veya xpath kullanılır. xpath ile karşılaştırıldığında CSS Selector daha hızlı çalışmaktadır. Bu nedenle bir engel yoksa öncelikle CSS Selector tercih edilir.
CSS Seçicileri çeşitli biçimlerde bulunabilir:
Tag ve ID
Tag ve Class
Tag ve Attribute
Tag, Class ve Attribute
Matches (Starts with, Ends with, Contains)
Child elementler
CSS Selectorlerin kullanım detaylarını ‘CSS Selector ve Xpath Kullanımları’ yazımda bulabilirsiniz 🙂
4)Name
Selenium WebDriver’daki Name locator, ID gibi kullanılabilir. Birden fazla elemente sahip bir sayfada benzersiz olabilir veya olmayabilir. Aynı Name’e sahip elementler olması durumunda, konumlandırıcı sayfada bu ada sahip ilk elementi seçer. Tanımlanan Name değeri ile böyle bir değerin eşleşmemesi durumunda NoSuchElementException oluşacaktır.
Örnek element;
<input type=”email” placeholder=”Work Email*” name=”email_field” value=”” class=”form-control sign-up-input-2 “>
Syntax: driver.findElement(By.name(“email_field”))
5)Xpath
Xpath, XML ifadelerini kullanarak web sayfasındaki öğeleri bulmaya yardımcı olur.
Syntax: Xpath= //tagname[@attribute=’value’]
tagname= hedeflediğiniz elementin etiketi, örneğin bir giriş(input) etiketini veya bağlantı(anchor) etiketini, vb. belirtir.
attribute= ‘@’ ön eki ve karşılık gelen değerleri ile tanımlanır. Name, ID, Class vb. olabılır.
Xpath Seçicileri çeşitli biçimlerde bulunabilir:
Standard Xpath
Contains
AND & OR
Starts-with
Text
Xpath Selectorlerin kullanım detaylarını ‘CSS Selector ve Xpath Kullanımları’ yazımda bulabilirsiniz 🙂
6)LinkText
Elementler, bağlantı metni aracılığıyla yerleştirilebilir. Aynı metnin birden çok bağlantısının bulunduğu bir senaryoda, ilk bağlantı seçilir.
Örnek element;
<a href=”https://www.gizemgulec.com/blog” target=”_blank”>Blog</a>
Elementi bulmak için linktext kullanımı;
Syntax: driver.findElement(By.linkText(“Blog”))
7)Partial LinkText
Partial LinkText yoluyla konum belirleme normal LinkText konumlandırıcısına benzer şekilde çalışır. Selenium WebDriver’da Partial LinkText kullanılma nedeni, uzun bir bağlantı metninizin olması ve üzerinde daha fazla işlem yapmak için yalnızca kısmi metin kullanmak istediğinizden kaynaklanmaktadır. Bazen bunu kullanma amacı, ortak kısmi metne sahip bir sayfada birden çok bağlantıyı bulmak olabilir.
Örnek Elementimiz;
<a href=”https://gizemgulec.com/register” target=”_blank”>SOFTWARE TESTING TYPES <i class=”fa fa-arrow-circle-right” aria-hidden=”true”></i></a>
Elementi bulmak için Partial Link Text kullanımı;
driver.findElement(By.PartialLinkText(“TESTING“))
8)Tag Name
Adından da anlaşılacağı gibi, Selenium WebDriver’daki bu bulucu, div etiketi, etiket vb. gibi etiket adlarına sahip öğeleri tanımlamak için kullanılır.
Syntax: driver.findElements(By.tagName());
Örnekler;
driver.findElements(By.tagName(a));
driver.findElements(By.tagName(div));
driver.findElements(By.tagName(tr));
driver.findElements(By.tagName(td));
9)DOM Locator
Elementi ID ve NAme yoluyla DOM’un “getElementById” ve “getElementsByName” gibi yöntemlerini kullanarak tanımlayabiliriz. GetElementById yöntemi bir kerede yalnızca bir öğeyi bulur, diğer yöntem ise bu adla bulunan bir dizi elementi sağlamak için kullanılır. Bir dizi elementin olması durumunda belirtilen spesifik bir öğeye erişmek için index kullanabiliriz.
Syntax:
document.getElementById (“id”)
document.getElementsByNames (“name”)[index]
Bu yazımda size Selenium Web Driver’da Locator’ların kullanımını anlatmaya çalıştım. Umarım faydalı olmuştur 🙂