Focuses on web UI automation with Selenium WebDriver and Java: writing stable locators, handling waits, frames, windows, dropdowns and tables, and organising tests with TestNG and page objects. Interviews are practical and test-heavy, asking you to write XPath and CSS selectors, explain exceptions, and fix flaky tests on the spot.
3 QUESTIONS FREESign up to unlock the full question bank and track your progress.Unlock every question and answer, then continue practising company-wise and package-wise.
Put explicit waits in page methods or BasePage helpers, not in tests. For example click() waits for elementToBeClickable before clicking, and a page's isLoaded() waits for a key element. Avoid Thread.sleep and avoid mixing implicit and explicit waits. Keep the timeout configurable so CI can use a slightly longer value than local runs.
04
How do you start a standalone Chrome container and run your tests against it?
Run docker run -d -p 4444:4444 -p 7900:7900 --shm-size=2g selenium/standalone-chrome:latest, preferably with a pinned version tag instead of latest. It starts a mini Grid with one Chrome node. Point RemoteWebDriver to http://localhost:4444 with ChromeOptions and the tests run inside the container. Port 7900 lets you watch through noVNC. Stop it with docker stop when finished, or use --rm so it is removed automatically.
05
An assertion on element text fails even though the text looks identical on screen. What could be the reason?
The text may contain extra whitespace, a line break or a non-breaking space that looks normal visually. getText() also returns only visible text and applies CSS text-transform, so uppercase styling changes the value. Print the string with its length or character codes to spot hidden characters. Fix it by trimming and normalising whitespace before comparing, or compare with the expected case-insensitively when the UI uses text-transform.
An authorisation framework where a client obtains an access token from an auth server and sends it as a Bearer token; tests fetch and reuse the token in setup.
POM is a design pattern where each page or component of the application has a class holding its locators and the actions a user can perform there, such as login() or searchProduct(). Tests call these methods instead of using Selenium directly. When the UI changes, you update one page class instead of dozens of tests, which reduces duplication and makes tests readable.
Method chaining means page methods return a page object, either this or the next page, so calls can be linked: loginPage.enterUser("asha").enterPassword("x").submit().openOrders(). Returning the next page models navigation and makes tests read like a user journey. Be careful when an action can lead to different pages; return the correct type or provide separate methods for success and failure.
Use TestNG parallel="methods | classes | tests" with thread-count, keep WebDriver in a ThreadLocal, and use Selenium Grid or a cloud grid for multiple browsers.
14
What is RemoteWebDriver and how is it different from ChromeDriver?
ChromeDriver starts and controls a browser on the same machine as the test. RemoteWebDriver sends the same WebDriver commands over HTTP to a remote endpoint, such as a Selenium Grid, a Docker container or a cloud provider, which starts the browser elsewhere. You pass the Grid URL and browser options, and the rest of the test code stays the same. ChromeDriver itself actually extends RemoteWebDriver.
15
A cookie consent banner appears randomly and blocks clicks in your Selenium tests. How do you handle it?
The most stable fix is preventing it: set the consent cookie before the test with driver.manage().addCookie after opening the domain, or ask developers for a test flag that disables the banner. If it must be handled in the UI, write one helper that checks for the banner with a short wait using findElements and closes it if present. Call it from the BasePage after navigation, not scattered in tests.
16
How do you extract a value from one response and use it in the next request?
Situation: an API test kept failing intermittently and developers called it a test issue. Task: prove or disprove it. Action: I collected logs from ten failures, showed the same race condition in the order service with request IDs, and reproduced it with a small parallel script. Result: developers fixed a real concurrency bug before it reached customers, and trust in the suite improved.
@Test(timeOut = 5000) fails the test if it runs longer than 5000 milliseconds. It can also be set at suite or test level in testng.xml. It protects pipelines from hanging tests, for example a stuck network call. It is not a performance test; use reasonable limits so slow but correct environments do not cause false failures.
19
Write a DataProvider that supplies two sets of login data and a test that uses it.
For layout checks you can set the window size, like driver.manage().window().setSize(new Dimension(390, 844)). For closer emulation in Chrome use mobile emulation in ChromeOptions: options.setExperimentalOption("mobileEmulation", Map.of("deviceName", "Pixel 7")), which also sets the user agent, pixel ratio and touch events. This catches responsive layout bugs quickly, but it is not a replacement for testing on real mobile browsers.
22
How do you structure packages in a Selenium POM framework?
A common layout: src/main/java with pages, components, base, utils, config and drivers packages; src/test/java with tests grouped by feature, plus listeners; src/test/resources with testng.xml, config properties per environment, test data and log configuration. Keep framework code separate from tests so it can be reused, and keep each package focused on one responsibility.
public class LoginPage {
private final WebDriver driver;
private final By user = By.id("username");
private final By pass = By.id("password");
private final By submit = By.cssSelector("button[type='submit']");
public LoginPage(WebDriver driver) { this.driver = driver; }
public HomePage loginAs(String u, String p) {
driver.findElement(user).sendKeys(u);
driver.findElement(pass).sendKeys(p);
driver.findElement(submit).click();
return new HomePage(driver);
}
}
25
What is the difference between @Test(priority) and dependsOnMethods in TestNG?
priority only orders tests; a lower number runs first, and a failed test does not stop the others. dependsOnMethods creates a real dependency: if the parent test fails, dependent tests are skipped. Both make tests order-dependent, which hurts parallel runs and isolation, so use them sparingly. Prefer independent tests with their own setup.
26
What is the test pyramid and how does it guide automation?
The pyramid suggests many fast unit tests at the base, fewer API or service tests in the middle and a small number of UI end-to-end tests at the top. Lower-level tests are faster and less flaky. An inverted pyramid with mostly UI tests leads to slow, brittle pipelines. Use it as a guide to put each check at the cheapest level that still catches the bug.
27
What is WebDriver and how does it communicate with the browser?
Situation: during a sprint, my nightly regression showed checkout failing only for one payment option. Task: confirm if it was a test issue or a real bug. Action: I reproduced it manually, checked the API response and found a wrong tax value, then logged a clear defect with steps, logs and screenshots. Result: developers fixed it before the release and the test was added to the smoke suite.
29
What is the difference between parallel="methods", "classes" and "tests" in testng.xml?
methods runs each @Test method in its own thread, giving the most parallelism but requiring fully independent tests and thread-safe drivers. classes runs all methods of one class in the same thread, with different classes in parallel. tests runs each <test> tag in parallel, often used to run different browsers. instances is also available for factory instances. thread-count sets the pool size.
Because locators live only in page classes, I check which page object methods fail, update the changed locators in those few classes, and rerun. Usually 40 failures map to two or three locators. I would also ask developers to add stable data-testid attributes and review UI changes with QA early, so future changes do not break tests unexpectedly.
findElement returns the first match and throws NoSuchElementException if nothing is found. findElements returns a List (empty if nothing is found) — handy to check whether an element exists.
33
Write an XPath for a button with the text "Login".
Inside a <test>, add <groups><run><include name="smoke"/><exclude name="broken"/></run></groups>. Only methods in the included groups run, minus excluded ones. Configuration methods must have alwaysRun = true or belong to the groups, or they will be skipped. You can also pass -Dgroups=smoke from Maven Surefire for CI selection.
35
Write a BasePage helper that clicks an element after waiting for it to be clickable.
Situation: in my internship I repeated the same regression checks every release. Task: I wanted to free time for exploratory testing. Action: I learnt Selenium and Java and automated our login and search regression in my spare time. Result: the checks went from two hours to ten minutes, and I realised I enjoy building tools that improve quality, which is why I want this role.
37
What is the difference between a page object and a utility class in a test framework?
A page object models one screen or component: its locators and the user actions possible there, such as LoginPage.loginAs. A utility class holds generic helpers not tied to any page, such as reading config, generating test data, date formatting or taking screenshots. Mixing them makes page objects bloated and utilities dependent on the UI. Keep page objects in a pages package and helpers in a utils package.
38
How do you take a screenshot on failure in TestNG?
Prefer stable attributes in this order: dedicated test attributes like data-testid, id, name, then short CSS selectors, and XPath only when text or complex relationships are needed. Avoid absolute XPaths and index-based locators. Keep locators as private final By fields at the top of the class with clear names, so updates are quick and readable.
POM adds upfront design effort and extra classes, which can feel heavy for tiny projects. Poorly designed page objects become large god classes, mix assertions with actions, or use deep inheritance chains that are hard to follow. It also does not solve flaky waits or bad test data by itself. Good conventions, components and code reviews are needed to get its benefits.
Frequently asked questions
What does a Selenium Tester do?
Focuses on web UI automation with Selenium WebDriver and Java: writing stable locators, handling waits, frames, windows, dropdowns and tables, and organising tests with TestNG and page objects. Interviews are practical and test-heavy, asking you to write XPath and CSS selectors, explain exceptions, and fix flaky tests on the spot.
Which skills are tested in a Selenium Tester interview?
Expect questions on XPath and CSS locators, Explicit waits, TestNG suites, Page objects, Cross-browser testing. Most rounds also ask you to explain a project and solve one practical problem live.
How do I prepare for a Selenium Tester interview?
Revise Selenium WebDriver, TestNG Framework, Page Object Model first using the topic sheets, practise the questions on this page aloud, then do one full mock interview to practise timing.