Bird
Raised Fist0
Selenium Pythontesting~15 mins

Selenium vs Cypress vs Playwright comparison in Selenium Python - Automation Approaches Compared

Choose your learning style10 modes available
Compare login functionality automation using Selenium, Cypress, and Playwright
Preconditions (3)
Step 1: Open the login page
Step 2: Enter 'testuser' in the username field
Step 3: Enter 'Test@1234' in the password field
Step 4: Click the login button
Step 5: Verify that the URL changes to the dashboard page URL
Step 6: Verify that a welcome message with text 'Welcome, testuser!' is visible on the dashboard
✅ Expected Result: User is successfully logged in and redirected to the dashboard page with the welcome message displayed
Automation Requirements - Selenium with Python
Assertions Needed:
Verify current URL is 'https://example.com/dashboard'
Verify welcome message text is 'Welcome, testuser!'
Best Practices:
Use explicit waits to wait for elements to be visible or clickable
Use By.ID or By.NAME locators instead of brittle XPath
Structure code with setup and teardown methods
Use clear and descriptive assertion messages
Automated Solution
Selenium Python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import unittest

class TestLogin(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.wait = WebDriverWait(self.driver, 10)

    def test_login_success(self):
        driver = self.driver
        wait = self.wait
        driver.get('https://example.com/login')

        # Enter username
        username_field = wait.until(EC.visibility_of_element_located((By.ID, 'username')))
        username_field.clear()
        username_field.send_keys('testuser')

        # Enter password
        password_field = wait.until(EC.visibility_of_element_located((By.ID, 'password')))
        password_field.clear()
        password_field.send_keys('Test@1234')

        # Click login button
        login_button = wait.until(EC.element_to_be_clickable((By.ID, 'loginBtn')))
        login_button.click()

        # Verify URL
        wait.until(EC.url_to_be('https://example.com/dashboard'))
        current_url = driver.current_url
        self.assertEqual(current_url, 'https://example.com/dashboard', 'URL after login should be dashboard URL')

        # Verify welcome message
        welcome_message = wait.until(EC.visibility_of_element_located((By.ID, 'welcomeMsg')))
        self.assertEqual(welcome_message.text, 'Welcome, testuser!', 'Welcome message text should match')

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

This test script uses Selenium WebDriver with Python's unittest framework.

setUp: Initializes the Chrome browser and sets an explicit wait of 10 seconds.

test_login_success: Automates the login steps precisely as per the manual test case:

  • Opens the login page URL.
  • Waits for username and password fields to be visible, then enters credentials.
  • Waits for the login button to be clickable and clicks it.
  • Waits until the URL changes to the dashboard URL and asserts it.
  • Waits for the welcome message element and asserts its text.

Explicit waits ensure the test waits only as long as needed for elements or URL changes, avoiding flaky tests.

tearDown: Closes the browser after the test finishes.

Locators use By.ID for reliability and readability. Assertions have clear messages to help identify failures.

Common Mistakes - 4 Pitfalls
Using time.sleep() instead of explicit waits
Using brittle XPath locators like absolute paths
Not clearing input fields before sending keys
Not closing the browser after test
Bonus Challenge

Now add data-driven testing with 3 different username and password combinations to verify login success or failure.

Show Hint

Practice

(1/5)
1. Which testing tool is known for supporting multiple programming languages including Python and JavaScript, and offers broad browser support?
easy
A. Cypress
B. Playwright
C. Selenium
D. JUnit

Solution

  1. Step 1: Identify language support

    Selenium supports many languages like Python, Java, C#, etc., unlike Cypress which mainly supports JavaScript.
  2. Step 2: Check browser support

    Selenium supports many browsers including Chrome, Firefox, Safari, Edge, and more, making it broad in browser support.
  3. Final Answer:

    Selenium -> Option C
  4. Quick Check:

    Multi-language + broad browsers = Selenium [OK]
Hint: Multi-language and broad browser support points to Selenium [OK]
Common Mistakes:
  • Confusing Cypress as multi-language
  • Thinking Playwright supports more languages than Selenium
  • Choosing JUnit which is a Java testing framework
2. Which of the following is the correct way to start a Playwright browser session in Python?
easy
A. browser = playwright.chromium.launch()
B. browser = Playwright.start()
C. browser = playwright.startBrowser()
D. browser = Playwright.launchChromium()

Solution

  1. Step 1: Recall Playwright Python syntax

    Playwright uses the syntax playwright.chromium.launch() to start a Chromium browser session.
  2. Step 2: Check other options for correctness

    Options B, C, and D do not match the official Playwright Python API method names.
  3. Final Answer:

    browser = playwright.chromium.launch() -> Option A
  4. Quick Check:

    Correct Playwright launch syntax = browser = playwright.chromium.launch() [OK]
Hint: Playwright uses playwright.chromium.launch() in Python [OK]
Common Mistakes:
  • Using incorrect method names like startBrowser()
  • Confusing Playwright with Selenium syntax
  • Capitalizing Playwright incorrectly in code
3. Given the following code snippet using Cypress, what will be the output if the element with id #submit is not found?
cy.get('#submit').click()
medium
A. Test fails with an error that element was not found
B. Test passes silently without clicking
C. Test retries indefinitely until element appears
D. Test skips the click and logs a warning

Solution

  1. Step 1: Understand Cypress default behavior

    Cypress automatically retries commands for a default timeout but if the element is not found within that time, it throws an error.
  2. Step 2: Analyze the code effect

    Since cy.get('#submit').click() requires the element, failure to find it causes the test to fail with an error.
  3. Final Answer:

    Test fails with an error that element was not found -> Option A
  4. Quick Check:

    Cypress fails test if element missing [OK]
Hint: Cypress fails test if element not found after retries [OK]
Common Mistakes:
  • Thinking Cypress passes silently
  • Assuming infinite retries
  • Believing it logs warning but continues
4. You wrote this Selenium Python code but it throws an error:
driver = webdriver.Chrome()
driver.get('https://example.com')
element = driver.find_element_by_id('login')
element.click()

What is the likely cause and fix?
medium
A. click() method does not exist; use submit() instead
B. Method find_element_by_id is deprecated; use find_element(By.ID, 'login') instead
C. URL is incorrect; fix the URL string
D. Chrome driver is not installed; install it first

Solution

  1. Step 1: Identify deprecated method usage

    In recent Selenium versions, find_element_by_id is deprecated and replaced by find_element with By.ID locator.
  2. Step 2: Apply correct method usage

    Use from selenium.webdriver.common.by import By and then driver.find_element(By.ID, 'login') to fix the error.
  3. Final Answer:

    Method find_element_by_id is deprecated; use find_element(By.ID, 'login') instead -> Option B
  4. Quick Check:

    Use By.ID locator, not deprecated method [OK]
Hint: Use find_element(By.ID, ...) instead of deprecated find_element_by_id [OK]
Common Mistakes:
  • Ignoring deprecation warnings
  • Assuming click() method is missing
  • Blaming URL or driver installation incorrectly
5. You want to write a test that runs on Chromium, Firefox, and WebKit browsers using Playwright in Python. Which approach correctly achieves this multi-browser testing?
hard
A. Run tests only on Chromium; Playwright does not support Firefox or WebKit
B. Use Cypress since it supports all three browsers natively
C. Use Selenium only because Playwright supports one browser at a time
D. Loop over playwright.chromium, playwright.firefox, and playwright.webkit to launch each browser and run tests

Solution

  1. Step 1: Understand Playwright multi-browser support

    Playwright supports Chromium, Firefox, and WebKit browsers and allows launching each separately.
  2. Step 2: Implement multi-browser testing

    Looping over playwright.chromium, playwright.firefox, and playwright.webkit to launch browsers and run tests is the correct approach.
  3. Final Answer:

    Loop over playwright.chromium, playwright.firefox, and playwright.webkit to launch each browser and run tests -> Option D
  4. Quick Check:

    Playwright multi-browser testing = loop launch [OK]
Hint: Loop over Playwright browsers to test all three [OK]
Common Mistakes:
  • Thinking Playwright supports only one browser
  • Choosing Cypress for multi-browser Python tests
  • Assuming Selenium is the only multi-browser tool
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