1. What is POM in Selenium, and why do we use it?
Answer:
Page Object Model (POM) is a design pattern that creates an object repository for
web elements. It improves code maintainability and reusability.
Code Snippet:
public class LoginPage {
WebDriver driver;
@FindBy(id = "username") WebElement username;
@FindBy(id = "password") WebElement password;
@FindBy(id = "loginBtn") WebElement loginBtn;
public LoginPage(WebDriver driver) {
[Link] = driver;
[Link](driver, this);
}
public void login(String user, String pass) {
[Link](user);
[Link](pass);
[Link]();
}
}
2. Difference between POM and Page Factory?
Answer:
POM: Manual initialization of WebElements.
Page Factory: Uses @FindBy and [Link] for lazy element loading.
Code Snippet (Without PageFactory):
WebElement username = [Link]([Link]("username"));
Code Snippet (With PageFactory):
@FindBy(id = "username") WebElement username;
3. How do you handle dynamic web elements?
Answer:
By using XPath/CSS with dynamic attributes or partial matching.
Code Snippet:
WebElement element = [Link](
[Link]("//input[contains(@id, 'user')]")
);
4. How do you handle dropdowns in Selenium?
Answer:
Using the Select class.
Code Snippet:
Select country = new Select([Link]([Link]("country")));
[Link]("India");
5. How do you implement explicit waits?
Answer:
Explicit waits wait until a condition is met.
Code Snippet:
WebDriverWait wait = new WebDriverWait(driver, [Link](10));
WebElement element =
[Link]([Link]([Link]("username")));
6. How do you handle multiple windows in Selenium?
Answer:
Store parent window handle, switch to child.
Code Snippet:
String parent = [Link]();
for (String win : [Link]()) {
[Link]().window(win);
}
// Switch back
[Link]().window(parent);
7. How do you upload a file in Selenium?
Answer:
Directly send the file path to <input type="file">.
Code Snippet:
[Link]([Link]("upload")).sendKeys("C:\\path\\[Link]");
8. How do you handle alerts in Selenium?
Answer:
Use [Link]().alert().
Code Snippet:
Alert alert = [Link]().alert();
[Link](); // or [Link]();
9. How do you take screenshots in Selenium?
Answer:
Use TakesScreenshot interface.
Code Snippet:
File src = ((TakesScreenshot) driver).getScreenshotAs([Link]);
[Link]([Link](), new File("[Link]").toPath());
10. How do you run Selenium tests in parallel?
Answer:
Use TestNG’s parallel attribute in XML.
Code Snippet ([Link]):
<suite name="Suite" parallel="tests" thread-count="2">
<test name="Test1">...</test>
</suite>
11. How do you scroll in Selenium?
Answer:
Using JavaScript Executor.
Code Snippet:
JavascriptExecutor js = (JavascriptExecutor) driver;
[Link]("[Link](0,500)");
12. How do you perform mouse hover?
Answer:
Using Actions class.
Code Snippet:
Actions actions = new Actions(driver);
WebElement menu = [Link]([Link]("menu"));
[Link](menu).perform();
13. How do you perform drag-and-drop?
Answer:
Using Actions class.
Code Snippet:
Actions actions = new Actions(driver);
[Link](source, target).perform();
14. How do you handle stale element exceptions?
Answer:
Re-locate the element after DOM changes.
Code Snippet:
try {
[Link]();
} catch (StaleElementReferenceException e) {
element = [Link]([Link]("username"));
[Link]();
}
15. How do you run headless tests in Selenium?
Answer:
Use ChromeOptions.
Code Snippet:
ChromeOptions options = new ChromeOptions();
[Link]("--headless");
WebDriver driver = new ChromeDriver(options);