İçeriğe geç

Selenium Scroll Kullanımı

Web sayfalarında test senaryoları sırasında, görünür alanda olmayan elementlere ulaşmak için sayfa kaydırma (scroll) işlemi gerekir.
Selenium, doğrudan scroll fonksiyonuna sahip olmasa da, JavaScriptExecutor, Actions sınıfı veya Keys sınıfı kullanılarak scroll işlemleri yapılabilir.


1. JavaScriptExecutor ile Scroll İşlemleri

Section titled “1. JavaScriptExecutor ile Scroll İşlemleri”

1.1 Sayfayı Belirli Piksel Kadar Kaydırma

Section titled “1.1 Sayfayı Belirli Piksel Kadar Kaydırma”
JavascriptExecutor js = (JavascriptExecutor) driver;
// Sayfayı 1000 piksel aşağı kaydırır
js.executeScript("window.scrollBy(0,1000)");

window.scrollBy(x, y) komutu, belirtilen kadar pikseli yatay (x) ve dikey (y) eksende kaydırır.


JavascriptExecutor js = (JavascriptExecutor) driver;
// Sayfanın sonuna kadar kaydırır
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");

Bu yöntem özellikle sayfa sonundaki footer elementine ulaşmak için kullanılır.


WebElement element = driver.findElement(By.id("footer"));
JavascriptExecutor js = (JavascriptExecutor) driver;
// Footer elementine kadar kaydırır
js.executeScript("arguments[0].scrollIntoView(true);", element);

scrollIntoView(true) metodu, hedef element görünür olana kadar sayfayı kaydırır.


Selenium’un Actions sınıfı da klavye tuşlarını simüle ederek scroll yapılmasını sağlar.

2.1 Klavye Tuşlarını Kullanarak Kaydırma

Section titled “2.1 Klavye Tuşlarını Kullanarak Kaydırma”
Actions actions = new Actions(driver);
// Sayfayı aşağı kaydır
actions.sendKeys(Keys.PAGE_DOWN).perform();
// Sayfayı yukarı kaydır
actions.sendKeys(Keys.PAGE_UP).perform();

Keys.PAGE_DOWN ve Keys.PAGE_UP tuşları, sayfayı bir ekran boyu kadar aşağı/yukarı kaydırır.


2.2 Aşağı-Yukarı Ok Tuşları ile Scroll

Section titled “2.2 Aşağı-Yukarı Ok Tuşları ile Scroll”
Actions actions = new Actions(driver);
// Küçük adımlarla aşağı kaydırma
actions.sendKeys(Keys.ARROW_DOWN).perform();
// Küçük adımlarla yukarı kaydırma
actions.sendKeys(Keys.ARROW_UP).perform();

Bu yöntem özellikle dinamik yüklenen sayfalarda (örneğin sonsuz scroll özelliği olan sayfalar) faydalıdır.


Bazı elementler ekranda görünmediği için doğrudan tıklanamaz. Bu durumda önce scroll yapıp ardından tıklama işlemi gerçekleştirilir.

WebElement element = driver.findElement(By.xpath("//button[text()='Gönder']"));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);", element);
element.click();

4. Sonsuz Scroll (Infinite Scroll) Uygulamaları

Section titled “4. Sonsuz Scroll (Infinite Scroll) Uygulamaları”

Bazı modern web uygulamaları içerikleri sayfa aşağı indikçe yükler (örneğin: Twitter, Instagram). Bu tip sayfalarda scroll işlemi döngü ile yapılabilir.

JavascriptExecutor js = (JavascriptExecutor) driver;
long lastHeight = (long) js.executeScript("return document.body.scrollHeight");
while (true) {
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
Thread.sleep(2000); // yeni içeriklerin yüklenmesi için bekleme
long newHeight = (long) js.executeScript("return document.body.scrollHeight");
if (newHeight == lastHeight) {
break; // Sayfa sonuna ulaşıldı
}
lastHeight = newHeight;
}

5. Scroll İşlemlerinde Dikkat Edilmesi Gerekenler

Section titled “5. Scroll İşlemlerinde Dikkat Edilmesi Gerekenler”
  • Scroll işlemi sonrası elementin gerçekten görünür olup olmadığını isDisplayed() ile kontrol edin.
  • JavaScriptExecutor kullanırken Thread.sleep() yerine WebDriverWait tercih edin.
  • Scroll işlemlerini test adımlarında gereksiz yere kullanmaktan kaçının; elementler görünürse Selenium zaten otomatik olarak scroll yapabilir.

YöntemAçıklamaKullanım Alanı
JavaScriptExecutorJS komutlarıyla piksel, element veya sayfa sonuna kaydırmaEn yaygın yöntem
ActionsKlavye tuşları ile kaydırmaKlavye simülasyonu gereken durumlarda
KeysKüçük adımlı yukarı/aşağı hareketlerDinamik içerik yüklemede
Döngü ile ScrollSonsuz sayfalarTwitter, e-ticaret sayfaları

Selenium’da scroll işlemleri doğrudan API ile gelmese de, JavaScriptExecutor ve Actions sınıfları ile kolayca uygulanabilir.
Test senaryolarında scroll işlemleri genellikle element etkileşimlerinden önce görünürlük sağlamak için kullanılır.