What is the purpose of the <code>ExpectedConditions</code> class in Selenium?
The <code>ExpectedConditions</code> class provides a set of common conditions to wait for during Selenium tests, such as waiting for an element to be visible or clickable. It helps make tests more reliable by synchronizing actions with the web page state.
Click to reveal answer
beginner
Name three common conditions provided by the ExpectedConditions class.
1. visibilityOfElementLocated(By locator) - waits until the element is visible. 2. elementToBeClickable(By locator) - waits until the element is clickable. 3. presenceOfElementLocated(By locator) - waits until the element is present in the DOM.
Click to reveal answer
beginner
How do you use ExpectedConditions with WebDriverWait?
You create a WebDriverWait object with a timeout, then call its until() method passing an ExpectedConditions condition. For example:
new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.visibilityOfElementLocated(By.id("myId")));
Click to reveal answer
beginner
Why is using ExpectedConditions better than using Thread.sleep() in tests?
ExpectedConditions waits only as long as needed for a condition to be true, making tests faster and more reliable. Thread.sleep() pauses for a fixed time regardless of page state, which can slow tests and cause failures if the wait is too short or too long.
Click to reveal answer
beginner
What happens if the condition in ExpectedConditions is not met within the timeout?
If the condition is not met within the specified timeout, WebDriverWait throws a TimeoutException. This signals that the expected state was not reached in time, and the test can handle this failure accordingly.
Click to reveal answer
Which method waits until an element is clickable using ExpectedConditions?
AinvisibilityOfElementLocated(By locator)
BelementToBeClickable(By locator)
CpresenceOfElementLocated(By locator)
DvisibilityOfElementLocated(By locator)
✗ Incorrect
The method elementToBeClickable(By locator) waits until the element is visible and enabled so it can be clicked.
What does WebDriverWait.until() return when the condition is met?
AAlways returns false
BAlways returns true
CThe WebElement or true depending on the condition
DThrows TimeoutException
✗ Incorrect
until() returns the result of the condition, often the WebElement found or a Boolean true.
Why should you avoid using Thread.sleep() in Selenium tests?
AIt causes fixed delays and can slow tests unnecessarily
BIt waits only until the condition is met
CIt improves test speed
DIt automatically retries failed steps
✗ Incorrect
Thread.sleep() pauses for a fixed time regardless of page state, which can slow tests and cause flakiness.
What exception is thrown if ExpectedConditions is not met in time?
AElementNotVisibleException
BNoSuchElementException
CStaleElementReferenceException
DTimeoutException
✗ Incorrect
If the wait times out, TimeoutException is thrown indicating the condition was not met.
Which ExpectedConditions method waits for an element to be present in the DOM but not necessarily visible?
ApresenceOfElementLocated(By locator)
BvisibilityOfElementLocated(By locator)
CelementToBeClickable(By locator)
DinvisibilityOfElementLocated(By locator)
✗ Incorrect
presenceOfElementLocated(By locator) waits for the element to exist in the DOM regardless of visibility.
Explain how the ExpectedConditions class improves test reliability in Selenium.
Think about how waiting for elements to be ready helps tests run smoothly.
You got /4 concepts.
Describe how to use ExpectedConditions with WebDriverWait to wait for an element to be visible.
Remember the syntax: new WebDriverWait(driver, Duration).until(condition).
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of the ExpectedConditions class in Selenium WebDriver?
easy
A. To perform browser navigation actions
B. To locate web elements on the page
C. To wait for certain conditions or states of web elements before proceeding
D. To execute JavaScript code on the page
Solution
Step 1: Understand the role of ExpectedConditions
The ExpectedConditions class provides predefined conditions to wait for, such as visibility or clickability of elements.
Step 2: Compare with other Selenium functions
Locating elements, navigation, and JavaScript execution are handled by other classes or methods, not ExpectedConditions.
Final Answer:
To wait for certain conditions or states of web elements before proceeding -> Option C
Quick Check:
ExpectedConditions = wait for element states [OK]
Hint: ExpectedConditions waits for element states before actions [OK]
Common Mistakes:
Confusing ExpectedConditions with element locators
Thinking it performs actions like clicking
Assuming it runs JavaScript
2. Which of the following is the correct syntax to wait until an element located by By.id("submit") is clickable using ExpectedConditions and WebDriverWait?
easy
A. WebDriverWait(driver, 10).wait(ExpectedConditions.elementToBeClickable(By.id("submit")));
B. new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.id("submit")));
C. new WebDriverWait(driver, 10).waitFor(ExpectedConditions.elementToBeClickable(By.id("submit")));
D. WebDriverWait(driver, 10).until(ExpectedConditions.elementIsClickable(By.id("submit")));
Solution
Step 1: Identify correct WebDriverWait constructor and method
The correct way is to create a new WebDriverWait object and call the until method.
Step 2: Check ExpectedConditions method name
The method is elementToBeClickable, not elementIsClickable, and the locator is passed correctly.
Final Answer:
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.id("submit"))); -> Option B
Quick Check:
Use new WebDriverWait + until + elementToBeClickable [OK]
Hint: Use new WebDriverWait(driver, time).until(condition) [OK]
Common Mistakes:
Using wait() instead of until()
Wrong method name like elementIsClickable
Not creating new WebDriverWait instance
3. Consider the following code snippet:
WebDriverWait wait = new WebDriverWait(driver, 5);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".login-button")));
element.click();
What happens if the element with class login-button is not visible within 5 seconds?
medium
A. The test passes without clicking the element
B. The code clicks on the element anyway
C. The wait silently ignores and continues without clicking
D. A TimeoutException is thrown and the test fails
Solution
Step 1: Understand behavior of WebDriverWait with ExpectedConditions
If the condition is not met within the timeout, WebDriverWait throws a TimeoutException.
Step 2: Analyze the code flow
Since the element is not visible within 5 seconds, wait.until throws an exception, so element.click() is not executed.
Final Answer:
A TimeoutException is thrown and the test fails -> Option D
Quick Check:
TimeoutException if condition unmet in wait [OK]
Hint: Wait throws TimeoutException if condition unmet [OK]
Common Mistakes:
Assuming click happens even if element not visible
Thinking wait ignores failure silently
Believing test passes without clicking
4. Identify the error in the following code snippet:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated("#username"));
medium
A. The locator should be a By object, not a String
B. The timeout value should be in milliseconds
C. ExpectedConditions.presenceOfElementLocated does not exist
D. WebDriverWait cannot be used with ExpectedConditions
Solution
Step 1: Check the argument type for presenceOfElementLocated
This method requires a By locator, not a plain string.
Step 2: Verify the locator usage
Instead of passing "#username", it should be By.cssSelector("#username") or another By method.
Final Answer:
The locator should be a By object, not a String -> Option A
Quick Check:
presenceOfElementLocated needs By locator [OK]
Hint: Use By locators, not strings, with ExpectedConditions [OK]
Common Mistakes:
Passing string selector instead of By object
Confusing timeout units (seconds vs milliseconds)
Thinking ExpectedConditions methods don't exist
5. You want to wait until either an element with id loading disappears or a maximum of 15 seconds passes before clicking a button with id continue. Which code snippet correctly uses ExpectedConditions to achieve this?
hard
A. new WebDriverWait(driver, 15).until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading")));
driver.findElement(By.id("continue")).click();
B. new WebDriverWait(driver, 15).until(ExpectedConditions.visibilityOfElementLocated(By.id("loading")));
driver.findElement(By.id("continue")).click();
C. new WebDriverWait(driver, 15).until(ExpectedConditions.elementToBeClickable(By.id("loading")));
driver.findElement(By.id("continue")).click();
D. new WebDriverWait(driver, 15).until(ExpectedConditions.presenceOfElementLocated(By.id("continue")));
driver.findElement(By.id("loading")).click();
Solution
Step 1: Identify the condition to wait for
The requirement is to wait until the element with id "loading" disappears, which matches invisibilityOfElementLocated.
Step 2: Confirm the action after wait
After waiting, the code clicks the button with id "continue" as required.
Final Answer:
new WebDriverWait(driver, 15).until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading")));
driver.findElement(By.id("continue")).click(); -> Option A
Quick Check:
Wait for invisibility, then click continue [OK]
Hint: Wait for invisibilityOfElementLocated before clicking [OK]
Common Mistakes:
Waiting for visibility instead of invisibility
Clicking wrong element after wait
Using presenceOfElementLocated for disappearance
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.