İçeriğe geç

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.


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.


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


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


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


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


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


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


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"); // #loginBtn
By.className("form-control"); // .form-control
By.cssSelector("div > input"); // Hiyerarşik seçim
By.cssSelector("input[name='email']");

Avantaj: Hızlı, okunabilir ve güçlü
⚠️ Dikkat: Syntax hatalarına dikkat edilmelidir


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şme
WebElement button = driver.findElement(By.xpath("//button[text()='Kaydet']"));
// İçeren metinle eşleşme
WebElement button = driver.findElement(By.xpath("//button[contains(text(),'Kaydet')]"));
// Birden fazla koşul
WebElement 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


MetotAçıklamaDönen Tip
findElement()İlk eşleşen elementi döndürürWebElement
findElements()Tüm eşleşen elementleri liste olarak döndürürList<WebElement>
List<WebElement> buttons = driver.findElements(By.className("btn"));
for (WebElement btn : buttons) {
System.out.println(btn.getText());
}

  • 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

AmaçLocator TürüÖrnek Kod
Kullanıcı adı alanıIDBy.id("username")
E-posta alanıNameBy.name("email")
Giriş butonuCSS SelectorBy.cssSelector("#loginBtn")
Kaydet butonuXPath (metinle)By.xpath("//button[text()='Kaydet']")