Selenium Element Bulma Stratejileri (Locators)
Selenium’da test otomasyonunun temel adımlarından biri, web elementlerini doğru şekilde bulmaktır.
Bunu gerçekleştirmek için Selenium çeşitli locator (konum belirleme) stratejileri sunar.
🎯 Locator Nedir?
Section titled “🎯 Locator Nedir?”Bir locator, Selenium’un sayfadaki bir web elementini tanımlayıp bulmasını sağlayan bir ifadedir.
Selenium, DOM (Document Object Model) üzerinden bu elementleri arar.
🔍 1. ID
Section titled “🔍 1. ID”En hızlı ve en güvenilir locator türüdür.
Her HTML elementinin id değeri benzersiz olmalıdır.
WebElement username = driver.findElement(By.id("username"));✅ Avantaj: Benzersiz, hızlı ve kararlı
⚠️ Dikkat: Bazı elementlerde id dinamik olarak değişebilir
🏷️ 2. Name
Section titled “🏷️ 2. Name”HTML elementinin name niteliğine göre seçim yapar.
WebElement email = driver.findElement(By.name("email"));✅ Avantaj: ID yoksa iyi bir alternatif
⚠️ Dikkat: Birden fazla element aynı name değerine sahip olabilir
📄 3. Class Name
Section titled “📄 3. Class Name”Elementin class niteliğini kullanır.
WebElement button = driver.findElement(By.className("btn-primary"));✅ Avantaj: Ortak stilleri hedef almak için uygundur
⚠️ Dikkat: Birden fazla sınıfa sahip elementlerde tam eşleşme gerekebilir
🌐 4. Tag Name
Section titled “🌐 4. Tag Name”HTML etiketiyle seçim yapar.
Örneğin sayfadaki tüm <input> elementlerini bulmak için kullanılabilir.
List<WebElement> inputs = driver.findElements(By.tagName("input"));for (WebElement input : inputs) { System.out.println(input.getAttribute("name"));}✅ Avantaj: Belirli türdeki tüm elementleri seçmek için kullanışlı
⚠️ Dikkat: Çok fazla sonuç dönebilir, filtreleme gerekebilir
🔗 5. Link Text
Section titled “🔗 5. Link Text”Bağlantı (anchor) metnine göre seçim yapar.
WebElement link = driver.findElement(By.linkText("Giriş Yap"));✅ Avantaj: Kullanıcıya görünen bağlantı metnine göre seçim yapar
⚠️ Dikkat: Metin tam olarak eşleşmelidir
🧩 6. Partial Link Text
Section titled “🧩 6. Partial Link Text”Bağlantı metninin bir kısmını kullanarak seçim yapar.
WebElement link = driver.findElement(By.partialLinkText("Giriş"));✅ Avantaj: Uzun veya dinamik link metinlerinde faydalı
⚠️ Dikkat: Birden fazla eşleşme dönebilir
🧱 7. CSS Selector
Section titled “🧱 7. CSS Selector”CSS yapısına dayalı güçlü bir locator türüdür.
Karmaşık yapıları kolaylıkla hedef alabilir.
WebElement password = driver.findElement(By.cssSelector("input[type='password']"));Örnekler:
By.id("loginBtn"); // #loginBtnBy.className("form-control"); // .form-controlBy.cssSelector("div > input"); // Hiyerarşik seçimBy.cssSelector("input[name='email']");✅ Avantaj: Hızlı, okunabilir ve güçlü
⚠️ Dikkat: Syntax hatalarına dikkat edilmelidir
🕸️ 8. XPath
Section titled “🕸️ 8. XPath”XPath, DOM ağacında element konumunu tanımlamak için kullanılır.
Her türlü yapıyı hedef almak mümkündür.
WebElement username = driver.findElement(By.xpath("//input[@id='username']"));Örnekler:
// Absolute XPath (önerilmez)WebElement element = driver.findElement(By.xpath("/html/body/div/form/input"));
// Relative XPath (önerilir)WebElement element = driver.findElement(By.xpath("//input[@id='username']"));
// Metinle eşleşmeWebElement button = driver.findElement(By.xpath("//button[text()='Kaydet']"));
// İçeren metinle eşleşmeWebElement button = driver.findElement(By.xpath("//button[contains(text(),'Kaydet')]"));
// Birden fazla koşulWebElement input = driver.findElement(By.xpath("//input[@type='text' and @name='email']"));✅ Avantaj: Çok güçlü ve esnek
⚠️ Dikkat: Uzun ve kırılgan XPath ifadeleri bakım zorluğu yaratabilir
⚙️ findElement vs findElements
Section titled “⚙️ findElement vs findElements”| Metot | Açıklama | Dönen Tip |
|---|---|---|
findElement() | İlk eşleşen elementi döndürür | WebElement |
findElements() | Tüm eşleşen elementleri liste olarak döndürür | List<WebElement> |
List<WebElement> buttons = driver.findElements(By.className("btn"));for (WebElement btn : buttons) { System.out.println(btn.getText());}🧠 En İyi Uygulamalar
Section titled “🧠 En İyi Uygulamalar”- Her zaman mümkünse ID kullanın
- ID yoksa CSS Selector veya XPath tercih edin
- XPath yerine CSS Selector genellikle daha hızlıdır
- Locator’ları Page Object Model (POM) yapısında yönetin
- Dinamik değerlerden (örneğin:
id-12345) kaçının
📚 Örnek Karşılaştırma
Section titled “📚 Örnek Karşılaştırma”| Amaç | Locator Türü | Örnek Kod |
|---|---|---|
| Kullanıcı adı alanı | ID | By.id("username") |
| E-posta alanı | Name | By.name("email") |
| Giriş butonu | CSS Selector | By.cssSelector("#loginBtn") |
| Kaydet butonu | XPath (metinle) | By.xpath("//button[text()='Kaydet']") |