# --------------------------------------------------------------------------------- # IMPORTS: Importing necessary modules from the Selenium and standard Python libraries # --------------------------------------------------------------------------------- from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time from selenium.webdriver.support.ui import Select from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.action_chains import ActionChains # --------------------------------------------------------------------------------- # INITIALIZATION FUNCTIONS (Corrected function and variable names) # --------------------------------------------------------------------------------- # initialize_service: Sets up the Chrome driver service. def initialize_service(): # Corrected variable name: executable_path executable_path = r"C:\Users\karan\Downloads\chromedriver-win64\chromedriver.exe" # Creates a Service object for the Chrome browser. service = Service(executable_path=executable_path) return service # open_website: Opens the specified URL and maximizes the window. def open_website(driver): # Corrected variable name: url. Removed '#' from the end of the URL. url = r"file:///C:/Users/karan/Desktop/selenium_test_page.html" # Navigates the browser to the local HTML file. driver.get(url) # Corrected method name: maximize_window() driver.maximize_window() # Pauses execution for 2 seconds to allow the page to fully load. time.sleep(2) # --------------------------------------------------------------------------------- # TASK FUNCTIONS (Web Interactions) - Using IDs for stability # --------------------------------------------------------------------------------- def task1(driver): print("Executing Task 1: Basic Inputs...") # Click on the Radio Button "Option B" driver.find_element(By.XPATH, "/html/body/div/div/section[1]/div/div[1]/div/div[2]/label[2]/input").click() time.sleep(1) # Click on the Checkbox driver.find_element(By.ID, "myCheckbox").click() time.sleep(1) # Select "Option 2" from the Standard Dropdown dropdown_element = driver.find_element(By.ID, "basic-dropdown") select = Select(dropdown_element) select.select_by_visible_text("Option 2") time.sleep(1) def task2(driver): print("Executing Task 2: Delayed Alert Simulation...") # Click to trigger the custom alert modal driver.find_element(By.ID, "alert-trigger-btn").click() # Wait for the custom alert modal to become visible wait = WebDriverWait(driver, 10) wait.until(EC.visibility_of_element_located((By.ID, "custom-alert-modal"))) # Input text into the alert's input field (simulating send_keys) alert_input_element = driver.find_element(By.ID, "alert-input") alert_input_element.clear() alert_input_element.send_keys("Welcome to Selenium") time.sleep(2) # Accept the alert (simulates clicking 'OK') driver.find_element(By.XPATH, "//button[text()='OK']").click() time.sleep(2) def task3(driver): print("Executing Task 3: Multi-step Dropdown and Hover...") # Click on "Redirect link page" to switch to the Task 3 section driver.find_element(By.ID, "redirect-link-page").click() time.sleep(1) # Click on "Redirect to Country info page" (stays on the same section for this test page) driver.find_element(By.ID, "redirect-country-link").click() time.sleep(1) # Select value "15" from the dropdown dropdown_driver = driver.find_element(By.ID, "value-dropdown") select = Select(dropdown_driver) select.select_by_value("15") time.sleep(1) # Hover over the element to reveal the hidden option hover_div_element = driver.find_element(By.ID, "hover-div") actions = ActionChains(driver) actions.move_to_element(hover_div_element).perform() time.sleep(1) # Select the revealed option by value hidden_select = driver.find_element(By.ID, "hidden-option-select") select_revealed = Select(hidden_select) select_revealed.select_by_value("revealed") time.sleep(1) def task4(driver): print("Executing Task 4: File Upload...") # Click to navigate to the File Upload section driver.find_element(By.ID, "file-upload-link").click() time.sleep(2) # Finds the file input element by its ID. file_input_element = driver.find_element(By.ID, "uploadFile") # IMPORTANT: The file must exist at this path for send_keys to work. filepath_to_upload = r"C:\Users\karan\Desktop\selenium_test_page.html" # Sends the file path to the input element (performs the upload) file_input_element.send_keys(filepath_to_upload) time.sleep(2) def task5(driver): print("Executing Task 5: Drag and Drop...") # Click to navigate to the Drag and Drop section driver.find_element(By.ID, "drag-drop-link").click() time.sleep(2) # Find the source element source_driver = driver.find_element(By.ID, "dragFrom") # Find the target drop zone element target_driver = driver.find_element(By.ID, "dropZone") # Performs the drag and drop action. actions = ActionChains(driver) actions.drag_and_drop(source_driver, target_driver).perform() time.sleep(2) # --------------------------------------------------------------------------------- # MAIN EXECUTION (Centralized control flow) # --------------------------------------------------------------------------------- def main(): driver = None try: print("Starting Selenium Automation Script...") # 1. Initialize the Chrome WebDriver service. service = initialize_service() # 2. Create the WebDriver instance. driver = webdriver.Chrome(service=service) # 3. Open the web page and maximize the window. open_website(driver) # 4. Execute the tasks sequentially. task1(driver) task2(driver) task3(driver) task4(driver) task5(driver) print("Automation tasks completed successfully.") except Exception as e: print(f"\n--- EXECUTION FAILED ---") print(f"An error occurred: {e}") print("\nPlease check the following common issues:") print("1. Your Chrome browser version matches your 'chromedriver.exe' version.") print("2. The path to 'chromedriver.exe' is exactly correct.") print("3. The path to 'selenium_test_page.html' is exactly correct.") finally: # 5. Closes the browser window safely. if driver: print("Quitting driver.") driver.quit() if __name__ == "__main__": main()