Bird
Raised Fist0
Selenium Pythontesting~10 mins

Explicit waits (WebDriverWait) in Selenium Python - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to wait until the element with ID 'submit' is clickable.

Selenium Python
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver, 10)
submit_button = wait.until(EC.[1]((By.ID, 'submit')))
Drag options to blanks, or click blank then click option'
Apresence_of_element_located
Balert_is_present
Cvisibility_of_element_located
Delement_to_be_clickable
Attempts:
3 left
💡 Hint
Common Mistakes
Using presence_of_element_located which only checks if element is in DOM, not clickable.
Using alert_is_present which waits for alerts, not elements.
2fill in blank
medium

Complete the code to wait up to 15 seconds for the element with class name 'loading' to disappear.

Selenium Python
wait = WebDriverWait(driver, 15)
wait.until(EC.[1]((By.CLASS_NAME, 'loading')))
Drag options to blanks, or click blank then click option'
Apresence_of_element_located
Bvisibility_of_element_located
Cinvisibility_of_element_located
Delement_to_be_clickable
Attempts:
3 left
💡 Hint
Common Mistakes
Using visibility_of_element_located which waits for element to appear.
Using presence_of_element_located which only checks presence, not visibility.
3fill in blank
hard

Fix the error in the code to wait for an alert to be present.

Selenium Python
wait = WebDriverWait(driver, 5)
alert = wait.until(EC.[1]())
Drag options to blanks, or click blank then click option'
Aalert_is_present
Bvisibility_of_element_located
Cpresence_of_element_located
Delement_to_be_clickable
Attempts:
3 left
💡 Hint
Common Mistakes
Passing a locator to alert_is_present which does not accept any arguments.
Using element conditions for alerts.
4fill in blank
hard

Fill both blanks to wait until the element with name 'username' is visible and enabled.

Selenium Python
wait = WebDriverWait(driver, 20)
element = wait.until(EC.[1]((By.[2], 'username')))
Drag options to blanks, or click blank then click option'
Avisibility_of_element_located
BID
CNAME
Delement_to_be_clickable
Attempts:
3 left
💡 Hint
Common Mistakes
Using By.ID when the element is located by name.
Using visibility_of_element_located which waits for visibility but not necessarily enabled.
5fill in blank
hard

Fill all three blanks to create a dictionary comprehension that waits for elements with IDs in 'ids' list to be visible, storing them by uppercase ID keys.

Selenium Python
elements = { [1]: wait.until(EC.visibility_of_element_located((By.ID, [2]))) for [3] in ids }
Drag options to blanks, or click blank then click option'
Aid.upper()
Bid
Delement
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'element' as the loop variable instead of 'id'.
Using the wrong key or locator value.

Practice

(1/5)
1. What is the main purpose of using WebDriverWait in Selenium tests?
easy
A. To automatically retry failed tests
B. To pause the test for a fixed amount of time regardless of conditions
C. To speed up the test execution by skipping waits
D. To wait explicitly until a certain condition is met or timeout occurs

Solution

  1. Step 1: Understand the role of explicit waits

    Explicit waits pause the test until a specific condition is true or a timeout happens, making tests more reliable.
  2. Step 2: Compare with other wait types

    Unlike fixed waits, explicit waits respond to page conditions, not just time delays.
  3. Final Answer:

    To wait explicitly until a certain condition is met or timeout occurs -> Option D
  4. Quick Check:

    Explicit wait = wait for condition [OK]
Hint: Explicit waits wait for conditions, not fixed times [OK]
Common Mistakes:
  • Confusing explicit wait with fixed sleep
  • Thinking it speeds up tests
  • Assuming it retries tests automatically
2. Which of the following is the correct syntax to create a WebDriverWait object with a 10-second timeout in Python?
easy
A. wait = WebDriverWait(driver, 10)
B. wait = WebDriverWait(10, driver)
C. wait = WebDriverWait(driver, timeout=10s)
D. wait = WebDriverWait(driver, "10")

Solution

  1. Step 1: Recall WebDriverWait constructor parameters

    The constructor takes the driver first, then the timeout as an integer or float in seconds.
  2. Step 2: Check each option's correctness

    wait = WebDriverWait(driver, 10) matches the correct order and type. wait = WebDriverWait(10, driver) reverses parameters. wait = WebDriverWait(driver, timeout=10s) uses invalid syntax with '10s'. wait = WebDriverWait(driver, "10") passes timeout as string, which is incorrect.
  3. Final Answer:

    wait = WebDriverWait(driver, 10) -> Option A
  4. Quick Check:

    WebDriverWait(driver, seconds) [OK]
Hint: Driver first, then timeout as number [OK]
Common Mistakes:
  • Swapping driver and timeout parameters
  • Using string instead of number for timeout
  • Adding units like 's' in timeout
3. What will be the output of the following code snippet if the element with id 'submit' appears after 3 seconds?
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 5)
element = wait.until(EC.element_to_be_clickable((By.ID, 'submit')))
print('Element found:', element is not None)
medium
A. Element found: False
B. Element found: True
C. TimeoutException error
D. SyntaxError

Solution

  1. Step 1: Understand wait.until behavior

    The wait will pause up to 5 seconds for the element to be clickable. Since the element appears after 3 seconds, it will be found within timeout.
  2. Step 2: Check the print statement output

    The element variable will hold the found element, so 'element is not None' is True, printing 'Element found: True'.
  3. Final Answer:

    Element found: True -> Option B
  4. Quick Check:

    Element appears before timeout = True [OK]
Hint: If element appears before timeout, wait.until returns it [OK]
Common Mistakes:
  • Assuming wait.until returns False if element appears
  • Expecting TimeoutException when element appears in time
  • Confusing syntax errors with runtime behavior
4. Identify the error in this code snippet using WebDriverWait:
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located(By.ID, 'username'))
medium
A. Missing tuple around locator in presence_of_element_located
B. Timeout value should be a string, not integer
C. WebDriverWait requires a third parameter for polling
D. EC.presence_of_element_located does not exist

Solution

  1. Step 1: Check expected condition usage

    The method presence_of_element_located expects a single argument: a tuple like (By.ID, 'username').
  2. Step 2: Identify the mistake in argument format

    The code passes By.ID and 'username' as separate arguments, missing the tuple, causing a TypeError.
  3. Final Answer:

    Missing tuple around locator in presence_of_element_located -> Option A
  4. Quick Check:

    Locator must be tuple (By.ID, 'value') [OK]
Hint: Always wrap locator in a tuple for expected conditions [OK]
Common Mistakes:
  • Passing locator arguments separately instead of tuple
  • Using string timeout instead of number
  • Thinking polling parameter is mandatory
5. You want to wait until either a button with id 'save' is clickable or a text element with id 'status' contains the text 'Ready', whichever happens first. Which approach correctly uses explicit waits to handle this?
hard
A. Use implicit wait instead of explicit wait for both elements
B. Use two separate WebDriverWait calls one after another for each condition
C. Use WebDriverWait with a custom expected condition combining both checks using a lambda function
D. Use time.sleep() to wait a fixed time before checking both elements

Solution

  1. Step 1: Understand waiting for multiple conditions

    WebDriverWait can accept a custom function that returns True when either condition is met, allowing waiting for multiple conditions simultaneously.
  2. Step 2: Evaluate options for efficiency and correctness

    Use WebDriverWait with a custom expected condition combining both checks using a lambda function uses a lambda combining both conditions, so wait ends as soon as one is true. Use two separate WebDriverWait calls one after another for each condition waits sequentially, possibly longer. Use implicit wait instead of explicit wait for both elements uses implicit wait, which is not suitable for condition checks. Use time.sleep() to wait a fixed time before checking both elements uses fixed sleep, which is unreliable.
  3. Final Answer:

    Use WebDriverWait with a custom expected condition combining both checks using a lambda function -> Option C
  4. Quick Check:

    Custom combined condition = fastest wait [OK]
Hint: Combine conditions in one wait with lambda [OK]
Common Mistakes:
  • Waiting sequentially causing longer delays
  • Using implicit wait for condition checks
  • Using fixed sleep instead of waits
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard