Day 6 of 100daysofcode : Testing Interactive Elements using Selenium
To test all the interactive elements on the DemoQA website using Selenium, we need to cover different types of elements such as:
- Checkboxes
- Radio Buttons
- Text Inputs
- Buttons
- Links
- Alerts
- Sliders
- Forms
Below is an example Selenium script that tests all major elements on the DemoQA website
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# Initialize WebDriver (Chrome in this example)
options = webdriver.ChromeOptions()
options.add_argument('--start-maximized')
driver = webdriver.Chrome(options=options)
# Function to test all elements on the DemoQA website
def test_demoqa_elements():
driver.get("https://demoqa.com/")
# Wait for the page to load
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
# Test Checkboxes
print("Testing Checkboxes...")
driver.find_element(By.XPATH, "//span[text()='Elements']").click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//span[text()='Checkbox']"))).click()
checkbox1 = driver.find_element(By.CLASS_NAME, "rct-checkbox")
checkbox1.click()
time.sleep(1)
print("Checkbox selected.")
checkbox1.click() # Deselecting
print("Checkbox deselected.")
# Test Radio Buttons
print("Testing Radio Buttons...")
driver.find_element(By.XPATH, "//span[text()='Radio Button']").click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//label[text()='Yes']"))).click()
time.sleep(1)
print("Radio Button 'Yes' selected.")
# Test Text Inputs
print("Testing Text Inputs...")
driver.find_element(By.XPATH, "//span[text()='Text Box']").click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "userName"))).send_keys("John Doe")
driver.find_element(By.ID, "userEmail").send_keys("john.doe@example.com")
driver.find_element(By.ID, "currentAddress").send_keys("123 Main St.")
driver.find_element(By.ID, "permanentAddress").send_keys("456 Oak St.")
driver.find_element(By.XPATH, "//button[text()='Submit']").click()
time.sleep(1)
print("Text box form submitted.")
# Test Buttons
print("Testing Buttons...")
driver.find_element(By.XPATH, "//span[text()='Buttons']").click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "doubleClickBtn"))).click()
time.sleep(1)
print("Button clicked.")
# Test Links
print("Testing Links...")
driver.find_element(By.XPATH, "//span[text()='Links']").click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//a[text()='Home']"))).click()
print("Navigated to 'Home' link.")
time.sleep(2)
# Test Alerts
print("Testing Alerts...")
driver.find_element(By.XPATH, "//span[text()='Alerts, Frame & Windows']").click()
driver.find_element(By.ID, "alertButton").click()
WebDriverWait(driver, 10).until(EC.alert_is_present())
driver.switch_to.alert.accept() # Accept the alert
print("Alert accepted.")
# Test Sliders
print("Testing Sliders...")
driver.find_element(By.XPATH, "//span[text()='Slider']").click()
slider = driver.find_element(By.XPATH, "//input[@type='range']")
ActionChains(driver).drag_and_drop_by_offset(slider, 50, 0).perform() # Move slider
time.sleep(1)
print("Slider value changed.")
# Test Modal Dialog
print("Testing Modal Dialog...")
driver.find_element(By.XPATH, "//span[text()='Modal Dialogs']").click()
driver.find_element(By.ID, "showSmallModal").click() # Open small modal
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "closeSmallModal"))).click() # Close modal
print("Modal dialog tested.")
# Test Accordions
print("Testing Accordions...")
driver.find_element(By.XPATH, "//span[text()='Accordions']").click()
driver.find_element(By.XPATH, "//button[text()='First Button']").click() # Expand first section
time.sleep(1)
print("Accordion section expanded.")
# Run the test function
try:
test_demoqa_elements()
finally:
driver.quit()