Selenium, genellikle web uygulamalarını otomatikleştirme amacıyla kullanılan bir test çerçevesidir. Çeşitli tarayıcılar ve işletim sistemleri üzerinde testlerin çalıştırılmasını destekler. Selenium, Java, C#, Python, Ruby, JavaScript ve Kotlin gibi bir dizi popüler programlama dilinde test yazmanızı sağlar.
Selenium aslında birkaç bileşenden oluşur:
Selenium WebDriver: Selenium WebDriver, kullanıcıların çeşitli web tarayıcıları üzerinde doğrudan testler çalıştırmasına izin veren bir araçtır. Bir tarayıcıyı otomatik olarak kontrol eder ve kullanıcı eylemlerini simüle eder - tıklama, form doldurma, JavaScript çalıştırma gibi.
Selenium Grid: Selenium Grid, farklı tarayıcılar ve işletim sistemleri üzerinde aynı anda testler çalıştırmayı mümkün kılar. Bu, özellikle birden çok platformda çalışması gereken uygulamalar için çok yararlıdır.
Selenium IDE (Integrated Development Environment): Selenium IDE, tarayıcı eylemlerini yakalamak ve onları daha sonra tekrar oynatmak için kullanılan bir tarayıcı eklentisidir. Ayrıca test durumlarını oluşturmanıza ve düzenlemenize olanak sağlar.
Selenium Remote Control (RC): Selenium RC, önceden var olan Selenium API'sinin bir sürümüdür ve genellikle artık kullanılmaz. Selenium WebDriver'in gelmesiyle Selenium RC'nin kullanımı büyük ölçüde azaldı.
Bu bileşenlerin her biri, uygulamanızın farklı yönlerini test etmek için kullanılır ve birlikte kullanıldığında, genellikle geliştiricilerin ve QA mühendislerinin bir uygulamanın her yönünü kapsamlı bir şekilde test etmelerini sağlarlar. Bunun yanında, Selenium WebDriver ile Page Object Model (POM) gibi tasarım desenlerini kullanarak kodunuzun bakımını kolaylaştırabilir ve testlerinizi daha verimli hale getirebilirsiniz.
Her şeyden önce, Selenium açık kaynaklıdır. Bu, kullanıcıların çerçevenin kaynak kodunu görüntülemesine, değiştirmesine ve hatta kendi ihtiyaçlarına göre geliştirmesine olanak sağlar. Ayrıca büyük ve aktif bir topluluk tarafından desteklenir, bu da genellikle sorunlarınızla ilgili yardım alabileceğiniz anlamına gelir. Eğer devam etmemi istersen daha da derine inebiliriz.
Selenium testlerinin yaratılması ve çalıştırılması, bir web uygulamasının farklı yönlerinin nasıl işlediğini anlamak için çok önemlidir. Selenium WebDriver, web uygulaması ile tarayıcı arasında bir arayüz görevi görerek, kullanıcı etkileşimlerini simüle eder ve sonuçları toplar. Tarayıcıyı otomatik olarak kontrol eder ve kullanıcı etkileşimlerini simüle eder.
WebDriver, genellikle test durumları oluşturmak ve testleri çalıştırmak için bir test çerçevesi ile birlikte kullanılır. Popüler çerçeveler arasında JUnit (Java için), NUnit (.NET için), pytest (Python için) ve RSpec (Ruby için) bulunur.
Bir Selenium testi genellikle aşağıdaki adımları içerir:
Tarayıcı başlatma: WebDriver, belirli bir tarayıcı örneğini başlatır (Chrome, Firefox, Safari, vb.).
Web sayfasına gitme: WebDriver, tarayıcıyı belirli bir URL'ye yönlendirir.
Elementleri bulma: WebDriver, DOM (Document Object Model) üzerinde belirli elementleri (butonlar, metin kutuları, vb.) bulabilir.
Eylemleri gerçekleştirme: WebDriver, belirli eylemleri gerçekleştirir (tıklama, metin girişi, JavaScript işlemi, vb.).
Durumu doğrulama: WebDriver, son durumu kontrol eder ve beklenen sonuçla karşılaştırır. Bu genellikle bir "iddia" (assertion) olarak adlandırılır.
Tarayıcıyı kapatma: WebDriver, tarayıcı örneğini kapatır.
Selenium Grid, birden çok tarayıcı ve işletim sistemi üzerinde testlerin paralel olarak çalıştırılmasını sağlar. Bu, özellikle büyük test süitleri için zaman kazandırır ve uygulamanın farklı platformlarda nasıl performans gösterdiğini daha hızlı bir şekilde anlamanızı sağlar.
Selenium testleri genellikle bir sürekli entegrasyon/teslimat pipeline'ının bir parçasıdır. Yani, kodun her değişiklikte otomatik olarak test edilmesi ve potansiyel hataların erken tespit edilmesi sağlanır. Jenkins, Travis CI ve CircleCI gibi araçlar genellikle bu amaçla kullanılır.
Bununla birlikte, Selenium'un bazı sınırlılıkları da vardır. Örneğin, mobil uygulamaları veya masaüstü uygulamalarını test etmek için tasarlanmamıştır (bunun için Appium veya WinAppDriver gibi araçlara bakabilirsiniz). Ayrıca, genellikle dinamik ve karmaşık modern JavaScript uygulamaları (React, Angular, Vue.js) ile başa çıkmakta zorlanabilir.
Selenium test sürecinde daha fazla derinlemesine bakalım. Öncelikle Selenium testlerini nasıl yazdığımızı anlamak önemlidir. Yukarıda belirttiğim gibi, Selenium birkaç farklı dilde yazılmış testlerle çalışabilir. İşte genel bir Selenium WebDriver testi örneği Python dilinde:
python
Copy code
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox() # Firefox tarayıcısını başlatır
driver.get("http://www.python.org") # Python.org'a gider
assert "Python" in driver.title # Başlıkta "Python" olduğunu doğrular
elem = driver.find_element_by_name("q") # Arama kutusunu bulur
elem.clear() # Arama kutusunu temizler
elem.send_keys("pycon") # Arama kutusuna "pycon" yazar
elem.send_keys(Keys.RETURN) # Enter'a basar
assert "No results found." not in driver.page_source # Arama sonucunu doğrular
driver.close() # Tarayıcıyı kapatır
Bu basit test, Python.org'u ziyaret eder, arama kutusuna "pycon" yazar ve ardından arama sonucunu kontrol eder.
Testleriniz daha karmaşık hale geldikçe, testlerinizi organize etmek için teknikler ve yaklaşımlar kullanmanız önemli hale gelir. Örneğin, Page Object Model (POM) tasarım deseni, test kodunuzu daha düzenli, daha bakımı kolay ve daha tekrar kullanılabilir hale getirir. POM'de, her web sayfası için bir "page object" oluşturulur. Her page object, o sayfadaki belirli elementlere ve bu elementlerle etkileşimlerine yönelik metodlara sahip bir sınıftır.
Selenium Grid ile ilgili olarak, bu özellik genellikle büyük test süitlerinin daha hızlı bir şekilde tamamlanabilmesi için kullanılır. Selenium Grid, testleri aynı anda birden çok tarayıcı ve işletim sistemi üzerinde çalıştırabilen bir sunucu olarak görev yapar. Bu, özellikle birden çok tarayıcı ve işletim sistemi üzerinde kapsamlı test yapmanız gereken durumlarda yararlıdır.
Selenium, bir test çerçevesi olarak değil, bir test aracı olarak en iyi şekilde çalışır. Bu, genellikle test senaryolarınızı yönetmek ve organize etmek için başka bir test çerçevesiyle (örneğin Python'da pytest veya Java'da TestNG) birlikte kullanılması gerektiği anlamına gelir. Bu test çerçeveleri, testlerinizi gruplandırmanıza, tekrar tekrar çalıştırmanıza ve sonuçları toplamanıza yardımcı olabilir.
Son olarak, Selenium'un kapasitesini ve özelliklerini genişletmek için birçok eklenti ve kütüphane mevcuttur. Örneğin, Selenium WebDriver API'si genellikle web elementlerini bulmak için CSS veya XPath seçicilerini kullanır, ancak bu bazen karmaşık ve hata yapma olasılığı yüksektir. Bu sorunu çözmek için, daha kullanıcı dostu bir API sağlayan ve elementlerin daha kolay bulunmasına yardımcı olan bir dizi yardımcı kütüphane mevcuttur.
Bir sonraki adım, belki de Selenium testlerinizi nasıl yazacağınıza dair daha detaylı bilgi almak veya belirli bir konuyu daha ayrıntılı olarak incelemek olabilir. Daha fazla bilgi almak isterseniz, belirli bir konuda daha fazla bilgi talep edebilirsiniz.
Yukarıda belirtilenlerin ışığında, Selenium'un nasıl daha etkin bir şekilde kullanılacağına dair bazı ipuçları ve en iyi uygulamalarla ilerleyelim.
1. Dinamik Elementlerle Başa Çıkmak:
Modern web uygulamalarında, dinamik içerik ve AJAX çağrıları yaygındır. Bir elementin sayfada görünmesi için beklemek veya bir AJAX çağrısının tamamlanmasını beklemek gerekebilir. Selenium WebDriver'da bunu başarmak için "explicit waits" ve "implicit waits" adı verilen iki yöntem vardır.
Bir explicit wait, WebDriver'ın belirli bir koşulun gerçekleşmesini belirli bir süre beklemesini sağlar. Örneğin, bir elementin sayfada görünmesini bekleyebilirsiniz.
Bir implicit wait ise WebDriver'ın belirli bir süre boyunca bir elementi bulmayı denemesini sağlar. Bu süre zarfında WebDriver, belirli bir süre boyunca belirli bir elementi bulmak için aramaya devam eder.
2. CSS Seçicileri ve XPath Kullanımı:
Web elementlerini bulmak için Selenium, CSS Seçicileri ve XPath ifadeleri kullanır. CSS Seçicileri genellikle daha hızlı ve daha kolay okunurken, XPath ifadeleri daha karmaşık sorguları destekler. İhtiyaçlarınıza bağlı olarak her ikisini de kullanabilirsiniz, ancak genellikle CSS Seçicileri daha yaygın olarak kullanılır.
3. Page Object Model (POM):
Page Object Model (POM), Selenium testlerini organize etmek ve yönetmek için yaygın bir desendir. Bu modelde, her web sayfası için bir sınıf oluşturursunuz ve bu sınıf, o sayfadaki belirli web elementlerine yönelik metotları içerir. Bu, test kodunuzu düzenli ve tekrar kullanılabilir hale getirir ve bakımı kolaylaştırır.
4. Test Sonuçlarının Raporlanması:
Testlerinizi çalıştırdıktan sonra, sonuçları analiz etmek önemlidir. Selenium'un kendisi bir raporlama aracı olarak hizmet etmez, ancak başka araçlarla birlikte kullanılabilir. Örneğin, Allure, ExtentReports veya ReportNG gibi üçüncü taraf kütüphaneler, detaylı ve anlaşılır test raporları oluşturmanıza yardımcı olabilir.
5. Sürekli Entegrasyon ile Selenium:
Selenium testleri genellikle bir sürekli entegrasyon (CI) pipeline'ının bir parçasıdır. Bu, her kod değişikliğinde veya belirli bir zaman aralığında testlerin otomatik olarak çalıştırılması anlamına gelir. Jenkins, Travis CI, CircleCI ve GitHub Actions gibi araçlar bu amaçla kullanılabilir.
Selenium'un kullanımı geniş ve çeşitlidir, ve bu yüzden başarılı bir şekilde kullanılması için birçok farklı yaklaşım ve teknik vardır. Yukarıda belirtilenler sadece bazı örneklerdir. Eğer belirli bir konu üzerinde daha fazla bilgi almak isterseniz, lütfen belirtin.
Java kod örnekleri ile beraber Selenium mülakat soruları ve cevapları
Selenium ile ilgili sıkça sorulan bazı mülakat soruları ve cevapları aşağıda verilmiştir. Bu soruların cevaplarına ilişkin Java kod örnekleri de dahil edilmiştir.
1. Soru: Selenium nedir?
Cevap: Selenium, genellikle web uygulamalarını otomatikleştirme amacıyla kullanılan popüler bir açık kaynaklı test aracıdır. Selenium'un dört bileşeni vardır: Selenium IDE, Selenium RC, Selenium WebDriver ve Selenium Grid.
2. Soru: Selenium WebDriver ve Selenium RC arasındaki fark nedir?
Cevap: Selenium RC, Selenium'un eski bir sürümüdür ve bir sunucu aracılığıyla çalışır. Selenium WebDriver, doğrudan tarayıcıya komut gönderen daha yeni ve daha hızlı bir araçtır. WebDriver'ın API'si de daha kolaydır ve modern tarayıcılarla daha iyi uyumludur.
3. Soru: Bir WebElement'i nasıl bulursunuz?
Cevap: Selenium WebDriver, bir WebElement'i bulmak için çeşitli yöntemler sunar. Bu yöntemlerden bazıları findElement(By.id("id")), findElement(By.name("name")), findElement(By.className("class")) ve findElement(By.cssSelector("cssSelector")) yöntemleridir. Aşağıda bir örnek gösterilmiştir:
java
Copy code
WebDriver driver = new FirefoxDriver();
driver.get("http://www.example.com");
WebElement element = driver.findElement(By.id("exampleId"));
4. Soru: Explicit wait ve Implicit wait arasındaki fark nedir?
Cevap: Explicit wait, belirli bir koşulun karşılanmasını belirli bir süre boyunca bekler. Örneğin, bir elementin görünür olmasını bekleyebilir. Implicit wait, belirli bir süre boyunca bir elementi bulmayı denemeye devam eder.
Explicit wait örneği:
java
Copy code
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("exampleId")));
Implicit wait örneği:
java
Copy code
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
WebElement element = driver.findElement(By.id("exampleId"));
5. Soru: Bir dropdown menüsünden nasıl bir seçim yaparsınız?
Cevap: Selenium WebDriver, Select sınıfını kullanarak dropdown menülerle etkileşim kurmamızı sağlar. Örneğin:
java
Copy code
WebElement dropdown = driver.findElement(By.id("dropdownId"));
Select select = new Select(dropdown);
select.selectByVisibleText("Option1");
6. Soru: Bir testin başarısız olduğunu nasıl kontrol edersiniz?
Cevap: Selenium WebDriver, bir testin başarısız olup olmadığını kontrol etmek için 'assertions' (doğrulamalar) kullanır. Bir assertion, belirli bir durumun doğru olup olmadığını kontrol eder. Örneğin, JUnit framework'ünün assertEquals() metodu kullanılabilir:
java
Copy code
String expectedTitle = "Example Title";
String actualTitle = driver.getTitle();
assertEquals(expectedTitle, actualTitle);
7. Soru: Sayfanın yüklenmesini nasıl beklersiniz?
Cevap: Sayfanın yüklenmesini beklemek için driver.manage().timeouts().pageLoadTimeout() metodunu kullanabilirsiniz. Örneğin:
java
Copy code
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
8. Soru: Alert/Popup pencereleriyle nasıl başa çıkarız?
Cevap: Alert/Popup pencereleriyle başa çıkmak için Selenium WebDriver, Alert sınıfını kullanır. Aşağıda bir örneğini görebilirsiniz:
java
Copy code
// Alert'e geçiş yapar
Alert alert = driver.switchTo().alert();
// Alert'teki mesajı alır
String alertMessage = alert.getText();
// Alert'i kabul eder (OK butonuna basar)
alert.accept();
// veya Alert'i reddeder (Cancel butonuna basar)
alert.dismiss();
9. Soru: Bir elementin var olup olmadığını nasıl kontrol edersiniz?
Cevap: Bir elementin var olup olmadığını kontrol etmek için, öncelikle findElement() metodunu kullanırsınız ve ardından yakalanan NoSuchElementException hatasını kontrol edersiniz. Örneğin:
java
Copy code
public boolean isElementPresent(By locator) {
try {
driver.findElement(locator);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
10. Soru: Çerçeveler (frames) arasında nasıl geçiş yapılır?
Cevap: Selenium WebDriver, switchTo().frame() metodunu kullanarak çerçeveler arasında geçiş yapmanızı sağlar. Frame'ye index, isim veya WebElement olarak referans verilebilir. Örneğin:
java
Copy code
// index ile
driver.switchTo().frame(0);
// isim ile
driver.switchTo().frame("frameName");
// WebElement ile
WebElement frameElement = driver.findElement(By.id("frameId"));
driver.switchTo().frame(frameElement);
11. Soru: WebDriver'da birden çok pencere veya sekmeyle nasıl başa çıkarsınız?
Cevap: WebDriver, driver.getWindowHandles() ve driver.switchTo().window() metodlarıyla birden çok pencere veya sekmeyle başa çıkmayı sağlar. İşte bir örneği:
java
Copy code
// Tüm pencerelerin veya sekmelerin tanıtıcılarını alır
Set<String> handles = driver.getWindowHandles();
for(String handle : handles) {
// Her bir pencereye veya sekmeye geçiş yapar
driver.switchTo().window(handle);
}
12. Soru: Bir test senaryosunu nasıl parametrize edersiniz?
Cevap: TestNG veya JUnit gibi bir test framework'ü kullanarak bir test senaryosunu parametrize edebilirsiniz. TestNG'de @Parameters veya @DataProvider anotasyonları veya JUnit'te @Parameterized anotasyonu kullanılabilir. TestNG için bir örnek:
java
Copy code
@Test(dataProvider = "loginData")
public void testLogin(String username, String password) {
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
// Login işlemini tamamlayın ve doğrulama yapın...
}
@DataProvider(name = "loginData")
public Object[][] getData() {
return new Object[][]{
{"user1", "pass1"},
{"user2", "pass2"},
{"user3", "pass3"}
};
}
13. Soru: Selenium Grid nedir ve ne için kullanılır?
Cevap: Selenium Grid, aynı anda birden çok tarayıcı örneğinde testler çalıştırmak için kullanılan bir araçtır. Bu, paralel test yapmayı mümkün kılar ve böylece test süresini önemli ölçüde azaltır. Selenium Grid, ayrıca farklı tarayıcı, işletim sistemi ve makine kombinasyonları arasında dağıtılmış testler yapmayı mümkün kılar.
14. Soru: WebElement'i nasıl doğrularsınız?
Cevap: Bir WebElement'in var olup olmadığını, görünür olup olmadığını ve belirli bir durumda olup olmadığını doğrulamak için Selenium'un çeşitli metotlarını kullanabilirsiniz. Örneğin:
java
Copy code
WebElement element = driver.findElement(By.id("exampleId"));
// Elementin var olup olmadığını kontrol eder
boolean isPresent = element != null;
// Elementin görünür olup olmadığını kontrol eder
boolean isDisplayed = element.isDisplayed();
// Elementin belirli bir durumda olup olmadığını kontrol eder (örneğin, seçili olup olmadığını)
boolean isSelected = element.isSelected();
15. Soru: Birden çok testi nasıl organize edersiniz?
Cevap: Birden çok testi organize etmek için test suite'lerini kullanabilirsiniz. TestNG veya JUnit gibi test framework'leri, testleri gruplamak ve bir test suite olarak çalıştırmak için araçlar sağlar. Örneğin, TestNG'de bir test suite'i XML dosyası kullanarak tanımlayabilir ve ardından bu dosyayı kullanarak tüm suite'i çalıştırabilirsiniz.
16. Soru: Selenium'da bir tarayıcı oturumunu nasıl başlatırsınız ve nasıl sonlandırırsınız?
Cevap: Selenium'da bir tarayıcı oturumu, WebDriver örneği oluşturularak başlatılır. Oturumun sonlandırılması ise driver.quit() veya driver.close() metodu ile yapılır. Örneğin:
java
Copy code
WebDriver driver = new ChromeDriver(); // Oturum başlatılır
// Some tests...
driver.quit(); // Oturum sonlandırılır
17. Soru: TestNG nedir ve Selenium ile nasıl kullanılır?
Cevap: TestNG, Java'da bir test framework'üdür ve genellikle Selenium ile birlikte kullanılır. TestNG, testleri gruplama, paralel test yapma, testler için veri sağlama (data-driven testing) gibi özellikler sunar. TestNG, Selenium testlerini daha yapılandırılmış ve esnek bir şekilde oluşturmayı mümkün kılar.
TestNG örneği:
java
Copy code
public class ExampleTest {
private WebDriver driver;
@BeforeMethod
public void setUp() {
driver = new ChromeDriver();
}
@Test
public void testExample() {
driver.get("http://www.example.com");
// Test işlemleri...
}
@AfterMethod
public void tearDown() {
driver.quit();
}
}
18. Soru: JavaScript ile çalışmak için Selenium'da nasıl bir yaklaşım kullanılır?
Cevap: Selenium WebDriver, JavaScript ile çalışmak için JavascriptExecutor interface'ini kullanır. Bu, bir WebDriver örneğini JavaScript kodunu çalıştırabilecek bir şekilde dönüştürür. İşte bir örneği:
java
Copy code
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('example').click();");
19. Soru: Selenium'da, bir elementin belirli bir özelliğini nasıl alırsınız?
Cevap: Selenium WebDriver'da, bir elementin belirli bir özelliğini getAttribute() metodu kullanarak alabilirsiniz. Örneğin, bir input elementinin değerini almak için:
java
Copy code
WebElement input = driver.findElement(By.id("inputId"));
String value = input.getAttribute("value");
20. Soru: Bir sayfanın title'ını veya URL'sini nasıl alırsınız?
Cevap: Bir sayfanın title'ını veya URL'sini WebDriver'ın getTitle() ve getCurrentUrl() metodları kullanarak alabilirsiniz. İşte bir örneği:
java
Copy code
String title = driver.getTitle();
String url = driver.getCurrentUrl();
21. Soru: Selenium WebDriver'da scroll işlemi nasıl gerçekleştirilir?
Cevap: Selenium WebDriver'da, sayfa içinde scroll işlemi JavascriptExecutor kullanılarak gerçekleştirilir. İşte bir örneği:
java
Copy code
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,500)"); // 500 piksel aşağıya kaydırır
22. Soru: Selenium'da negatif test senaryolarını nasıl yürütürsünüz?
Cevap: Negatif test senaryoları, genellikle bir uygulamanın belirli bir işlevinin yanlış veya beklenmeyen bir girişle nasıl başa çıktığını test etmek için kullanılır. Selenium WebDriver'da, bir assertion (doğrulama) kullanarak negatif bir test senaryosunu yürütebilirsiniz. İşte bir örneği:
java
Copy code
try {
driver.findElement(By.id("nonexistentId"));
fail("Expected NoSuchElementException to be thrown");
} catch (NoSuchElementException e) {
// Test passed
}
23. Soru: Selenium WebDriver'da cookie'leri nasıl kullanırsınız?
Cevap: Selenium WebDriver, driver.manage().getCookies() metodu ile mevcut cookie'leri almayı, driver.manage().addCookie(Cookie cookie) ile bir cookie eklemeyi, driver.manage().deleteCookie(Cookie cookie) ile bir cookie silmeyi ve driver.manage().deleteAllCookies() ile tüm cookie'leri silmeyi sağlar.
24. Soru: Selenium'da bir dropdown menüden seçim yapmak için hangi metotları kullanırsınız?
Cevap: Selenium'da, bir dropdown menüden seçim yapmak için Select sınıfını kullanabilirsiniz. Select sınıfı, selectByVisibleText, selectByValue ve selectByIndex gibi metodları sunar. Örneğin:
java
Copy code
Select dropdown = new Select(driver.findElement(By.id("dropdownId")));
dropdown.selectByVisibleText("Option1");
25. Soru: Sayfada bir elementin yüklenmesini nasıl beklersiniz?
Cevap: Selenium'da bir elementin yüklenmesini beklemek için genellikle "explicit wait" ve "implicit wait" olmak üzere iki yaklaşım kullanılır.
"Implicit wait", driver'ın belirtilen süre boyunca bir elementin mevcut olmasını beklemesi için kullanılır:
java
Copy code
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
"Explicit wait" ise belirli bir durumun gerçekleşmesini bekler. Örneğin, bir elementin görünür olmasını beklemek için:
java
Copy code
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId")));
26. Soru: Bir web sayfasına nasıl geçiş yaparsınız?
Cevap: Bir web sayfasına geçiş yapmak için, driver.get() metodu kullanılır. Metoda, açmak istediğiniz web sayfasının URL'si argüman olarak verilir. Örneğin:
java
Copy code
driver.get("http://www.example.com");
27. Soru: Sayfa kaynak kodunu nasıl alırsınız?
Cevap: Bir sayfanın kaynak kodunu almak için driver.getPageSource() metodu kullanılır. Örneğin:
java
Copy code
String source = driver.getPageSource();
28. Soru: WebElement'in CSS özelliklerini nasıl alırsınız?
Cevap: Bir WebElement'in CSS özelliklerini almak için getCssValue() metodu kullanılır. Metoda, almak istediğiniz CSS özelliğinin adı argüman olarak verilir. Örneğin:
java
Copy code
WebElement element = driver.findElement(By.id("elementId"));
String color = element.getCssValue("color");
29. Soru: WebElement'e tıklayarak veya klavye tuşları ile etkileşimde bulunmak için hangi metotları kullanırsınız?
Cevap: WebElement'lere tıklamak için click(), klavye tuşları ile etkileşime geçmek için sendKeys() metotları kullanılır. Örneğin:
java
Copy code
WebElement button = driver.findElement(By.id("buttonId"));
button.click();
WebElement textbox = driver.findElement(By.id("textboxId"));
textbox.sendKeys("Some text");
Bu örnekler, Selenium mülakatlarında karşılaşılabilecek çeşitli konuları kapsar. Başka bir konuda daha fazla bilgi almak isterseniz, lütfen belirtin.
30. Soru: WebDriver'ın "navigate" metotları nelerdir ve ne için kullanılırlar?
Cevap: WebDriver'ın navigate() metodu, bir dizi navigasyon metotlarına erişim sağlar. Bu metotlar:
to(String url): Belirtilen URL'ye tarayıcıda bir geçiş yapar.
back(): Tarayıcının 'geri' düğmesine basar.
forward(): Tarayıcının 'ileri' düğmesine basar.
refresh(): Aktif web sayfasını yeniler.
Örneğin:
java
Copy code
driver.navigate().to("http://www.example.com");
driver.navigate().back();
driver.navigate().forward();
driver.navigate().refresh();
31. Soru: Action Class nedir ve nasıl kullanılır?
Cevap: Selenium'daki Action Class, daha karmaşık kullanıcı etkileşimlerini (mouse hover, drag and drop, vb.) simüle etmek için kullanılır. Örneğin, bir element üzerinde mouse hover işlemi yapmak için:
java
Copy code
Actions actions = new Actions(driver);
WebElement element = driver.findElement(By.id("elementId"));
actions.moveToElement(element).perform();
32. Soru: findElement ve findElements metotları arasındaki fark nedir?
Cevap: findElement metodu, belirtilen koşulları karşılayan ilk WebElement'i döndürür. Eğer böyle bir element bulunamazsa, NoSuchElementException hatası fırlatır.
findElements metodu ise, belirtilen koşulları karşılayan tüm WebElement'leri bir liste olarak döndürür. Eğer böyle bir element bulunamazsa, boş bir liste döndürür.
33. Soru: Selenium'da bir alert dialog ile nasıl etkileşime geçilir?
Cevap: Selenium'da bir alert dialog ile etkileşime geçmek için Alert interface'i kullanılır. Alert interface'i, alert dialog ile etkileşime geçmeyi sağlayan accept(), dismiss(), getText() ve sendKeys(String stringToSend) metotlarını sunar. Örneğin:
java
Copy code
Alert alert = driver.switchTo().alert();
alert.accept();
34. Soru: Selenium'da dinamik web elementler ile nasıl başa çıkılır?
Cevap: Selenium'da, dinamik web elementler genellikle XPath veya CSS Selector kullanılarak bulunur. XPath veya CSS Selector'lar, bir elementin attribute'ları, sırası veya hiyerarşik konumu gibi özelliklere göre belirlenebilir.
Ayrıca, bir elementin mevcut olmasını veya belirli bir durumda olmasını beklemek için "explicit wait" kullanılabilir. "Explicit wait", WebDriverWait ve ExpectedConditions sınıfları ile kullanılır.
Bu örnekler, Selenium mülakatlarında karşılaşılabilecek çeşitli konuları kapsar. Başka bir konuda daha fazla bilgi almak isterseniz, lütfen belirtin.
35. Soru: Peki, bir pop-up penceresi ile nasıl başa çıkılır?
Cevap: Selenium WebDriver, farklı pencere veya sekme işlemlerini yönetmek için switchTo() metodu kullanır. Belirli bir pencereye geçiş yapmak için driver.switchTo().window(String windowHandle) kullanılır. Tüm aktif pencerelerin handle'larını almak için driver.getWindowHandles() metodu kullanılır.
java
Copy code
String parentWindow = driver.getWindowHandle(); // Ana pencerenin handle'ını al
for (String windowHandle : driver.getWindowHandles()) {
if (!windowHandle.equals(parentWindow)) {
driver.switchTo().window(windowHandle); // Yeni pencereye geçiş yap
// Yeni penceredeki işlemler
driver.close(); // Yeni pencereyi kapat
}
}
driver.switchTo().window(parentWindow); // Ana pencereye geri dön
36. Soru: Frames içindeki elementlere nasıl erişirsiniz?
Cevap: WebDriver'ın switchTo() metodu, bir frame veya iframe içindeki elementlere erişim sağlar. Frame veya iframe'ye geçiş yapmak için driver.switchTo().frame(int index) veya driver.switchTo().frame(String nameOrId) kullanılır.
java
Copy code
driver.switchTo().frame("frameName");
WebElement element = driver.findElement(By.id("elementId"));
// İşlemler
driver.switchTo().defaultContent(); // Ana içeriğe geri dön
37. Soru: WebDriver’ın close ve quit metotları arasındaki fark nedir?
Cevap: WebDriver’ın close metodu, aktif pencereyi veya aktif sekme kapatır. Eğer açık tek bir sekme varsa, tarayıcıyı kapatır. quit metodu ise, tarayıcıdaki tüm pencereleri ve sekmeleri kapatır ve WebDriver oturumunu sonlandırır.
38. Soru: 'Stale Element Reference' hatası nedir ve nasıl çözülür?
Cevap: 'Stale Element Reference' hatası, bir WebElement'e bir işlem yapılmaya çalışıldığında, ancak elementin DOM üzerinde artık mevcut olmadığında fırlatılır. Bu genellikle sayfanın yeniden yüklenmesi veya DOM'un dinamik olarak güncellenmesi durumlarında olur.
Bu hatayı çözmek için genellikle "explicit wait" kullanılır. ExpectedConditions sınıfının refreshed metodu, belirli bir durumun sonucunu yenileyerek stale element durumunu ele alır.
java
Copy code
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOfElementLocated(By.id("elementId"))));
39. Soru: 'Element Not Visible' hatası nedir ve nasıl çözülür?
Cevap: 'Element Not Visible' hatası, bir işlem yapmaya çalışılan WebElement'in görünür olmadığı zaman fırlatılır. Bu genellikle elementin var olmasına rağmen, kullanıcıya görünür olmadığı durumlar için geçerlidir (örneğin, CSS'te display: none özelliği ayarlanmışsa).
Bu hatayı çözmek için genellikle "explicit wait" kullanılır, ve ExpectedConditions sınıfının visibilityOfElementLocated metodu ile elementin görünür olmasını bekleriz.
java
Copy code
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId")));