Bird
Raised Fist0
Selenium Pythontesting~5 mins

Retry mechanism for flaky tests in Selenium Python - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a flaky test in software testing?
A flaky test is a test that sometimes passes and sometimes fails without any changes in the code. It behaves unpredictably, often due to timing or environment issues.
Click to reveal answer
beginner
Why do we use a retry mechanism for flaky tests?
We use retry mechanisms to automatically rerun tests that fail due to temporary issues. This helps reduce false failures and makes test results more reliable.
Click to reveal answer
intermediate
How can you implement a retry mechanism in Selenium with Python?
You can implement retry by using a decorator or a loop that reruns the test function a set number of times until it passes or the retries run out.
Click to reveal answer
intermediate
What is a simple example of a retry decorator in Python for flaky tests?
A retry decorator runs a test function multiple times if it raises an exception, stopping early if the test passes. It helps handle flaky failures automatically.
Click to reveal answer
beginner
Name one common cause of flaky tests in Selenium automation.
Common causes include timing issues like waiting for elements to load, network delays, or asynchronous page behavior.
Click to reveal answer
What does a retry mechanism do in test automation?
AReruns failed tests automatically to reduce false failures
BSkips tests that fail
CRuns tests only once
DIgnores all test failures
Which of these is a common cause of flaky tests?
AConsistent test data
BStable network connection
CProper synchronization
DTiming issues like slow page loads
In Python, what feature can help implement retries elegantly?
ADecorators
BGlobal variables
CList comprehensions
DLambda functions
What should a retry mechanism do when a test passes on a retry?
AContinue retrying until max retries
BStop retrying and mark test as passed
CMark test as failed anyway
DSkip the test
Which Selenium Python tool can help wait for elements to avoid flaky tests?
ARandom sleeps
BPrint statements
CExplicit waits
DHardcoded delays
Explain what a flaky test is and why retry mechanisms help in Selenium testing.
Think about tests that fail sometimes without code changes and how retrying helps.
You got /5 concepts.
    Describe how you would implement a simple retry mechanism in Python for Selenium tests.
    Consider wrapping the test function to catch failures and retry.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a retry mechanism in Selenium tests?
      easy
      A. To permanently ignore failed tests without rerunning
      B. To speed up test execution by running tests in parallel
      C. To rerun tests that fail due to temporary issues like slow loading
      D. To generate detailed logs for every test step

      Solution

      1. Step 1: Understand flaky tests

        Flaky tests fail sometimes due to temporary problems like slow page loads or network delays.
      2. Step 2: Purpose of retry mechanism

        Retry mechanism reruns failed tests to check if failure was temporary, reducing false failures.
      3. Final Answer:

        To rerun tests that fail due to temporary issues like slow loading -> Option C
      4. Quick Check:

        Retry mechanism = rerun flaky tests [OK]
      Hint: Retry fixes temporary failures by rerunning tests [OK]
      Common Mistakes:
      • Thinking retry speeds up tests
      • Assuming retry ignores failures
      • Confusing retry with logging
      2. Which of the following is the correct way to implement a simple retry decorator in Python for Selenium tests?
      easy
      A. def retry(func): try: func() except Exception: func()
      B. def retry(func): def wrapper(): for _ in range(3): try: return func() except Exception: pass return wrapper
      C. def retry(func): while True: func() return func
      D. def retry(func): for _ in range(3): func() return func

      Solution

      1. Step 1: Check retry decorator structure

        def retry(func): def wrapper(): for _ in range(3): try: return func() except Exception: pass return wrapper defines a wrapper function that tries to run the test 3 times catching exceptions.
      2. Step 2: Verify retry logic correctness

        def retry(func): def wrapper(): for _ in range(3): try: return func() except Exception: pass return wrapper retries on exception and returns on success, which is correct retry behavior.
      3. Final Answer:

        def retry(func): def wrapper(): for _ in range(3): try: return func() except Exception: pass return wrapper -> Option B
      4. Quick Check:

        Retry decorator = try 3 times with exception catch [OK]
      Hint: Retry decorator wraps function with try-except loop [OK]
      Common Mistakes:
      • Not catching exceptions inside loop
      • Infinite loops without exit
      • Calling function multiple times without try-except
      3. Given this retry decorator and test function, what will be printed?
      def retry(func):
          def wrapper():
              for i in range(2):
                  try:
                      return func()
                  except Exception:
                      print(f"Retry {i+1} failed")
              print("All retries failed")
          return wrapper
      
      @retry
      def test():
          print("Running test")
          raise Exception("Fail")
      
      test()
      medium
      A. Running test Retry 1 failed Running test Retry 2 failed All retries failed
      B. Running test All retries failed
      C. Running test Retry 1 failed Retry 2 failed
      D. Running test Retry 1 failed Running test Retry 2 failed

      Solution

      1. Step 1: Analyze retry loop

        The wrapper tries to run test twice. Each time test() prints "Running test" then raises Exception.
      2. Step 2: Trace output

        On first try, prints "Running test", then exception triggers "Retry 1 failed". Second try repeats same steps, then prints "Retry 2 failed". After loop ends, prints "All retries failed".
      3. Final Answer:

        Running test Retry 1 failed Running test Retry 2 failed All retries failed -> Option A
      4. Quick Check:

        Retry prints on each failure, then final failure message [OK]
      Hint: Each retry prints failure message, then final failure after loop [OK]
      Common Mistakes:
      • Missing repeated 'Running test' print
      • Ignoring final 'All retries failed' print
      • Assuming retry stops after first failure
      4. You wrote this retry decorator but it does not retry on failure. What is the bug?
      def retry(func):
          def wrapper():
              for _ in range(3):
                  try:
                      func()
                  except Exception:
                      continue
          return wrapper
      medium
      A. The decorator is missing the @functools.wraps(func) call
      B. The except block should raise the exception instead of continue
      C. The loop should be a while loop instead of for loop
      D. The function does not return the result or stop retrying on success

      Solution

      1. Step 1: Check retry logic

        The wrapper calls func() but never returns its result or breaks loop on success.
      2. Step 2: Effect of missing return

        Without return, wrapper always completes loop and returns None, so retry never stops on success.
      3. Final Answer:

        The function does not return the result or stop retrying on success -> Option D
      4. Quick Check:

        Missing return causes always 3 retries even on success [OK]
      Hint: Always return on success to stop retries [OK]
      Common Mistakes:
      • Not returning function result inside try
      • Misusing continue in except block
      • Ignoring decorator metadata preservation
      5. You want to implement a retry mechanism in Selenium tests that retries up to 3 times with a 2-second delay between tries. Which code snippet correctly implements this?
      hard
      A. import time def retry(func): def wrapper(): for i in range(3): try: return func() except Exception: if i < 2: time.sleep(2) else: raise return wrapper
      B. import time def retry(func): def wrapper(): for _ in range(3): try: func() except Exception: time.sleep(2) return wrapper
      C. def retry(func): def wrapper(): try: return func() except Exception: time.sleep(2) return func() return wrapper
      D. import time def retry(func): def wrapper(): while True: try: return func() except Exception: time.sleep(2) return wrapper

      Solution

      1. Step 1: Check retry count and delay

        import time def retry(func): def wrapper(): for i in range(3): try: return func() except Exception: if i < 2: time.sleep(2) else: raise return wrapper retries 3 times with a 2-second sleep between tries except after last attempt.
      2. Step 2: Verify exception handling

        import time def retry(func): def wrapper(): for i in range(3): try: return func() except Exception: if i < 2: time.sleep(2) else: raise return wrapper raises exception after last retry, correctly stopping retries on failure.
      3. Final Answer:

        import time def retry(func): def wrapper(): for i in range(3): try: return func() except Exception: if i < 2: time.sleep(2) else: raise return wrapper -> Option A
      4. Quick Check:

        Retry with delay and raise after last try [OK]
      Hint: Use loop with sleep and raise after last retry [OK]
      Common Mistakes:
      • Not raising exception after last retry
      • Missing delay between retries
      • Retrying infinitely without limit
      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