{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9cb6e86a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from selenium import webdriver\n",
    "from selenium.webdriver.common.by import By\n",
    "from selenium.webdriver.common.keys import Keys\n",
    "from selenium.webdriver.common.action_chains import ActionChains\n",
    "from selenium.webdriver.support.ui import WebDriverWait, Select\n",
    "from selenium.webdriver.support import expected_conditions as EC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "902d7ea7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Google\n"
     ]
    }
   ],
   "source": [
    "#TASK1: Open a Website and Verify the Title\n",
    "driver = webdriver.Chrome()\n",
    "driver.implicitly_wait(10)\n",
    "driver.get(\"https://www.google.com\")\n",
    "print(driver.title)\n",
    "assert driver.title == \"Google\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "43c58955",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Daamia - Google Search\n"
     ]
    }
   ],
   "source": [
    "#TASK2: Perform a Search on Google\n",
    "driver.get(\"https://www.google.com\")\n",
    "driver.find_element(By.NAME, \"q\").send_keys(\"Daamia\", Keys.ENTER)\n",
    "WebDriverWait(driver, 10).until(EC.title_contains(\"Daamia\"))\n",
    "print(driver.title)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "40455e1b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "You logged into a secure area!\n",
      "×\n"
     ]
    }
   ],
   "source": [
    "#TASK3: Fill Out a Login Form\n",
    "driver.get(\"https://the-internet.herokuapp.com/login\")\n",
    "driver.find_element(By.ID, \"username\").send_keys(\"tomsmith\")\n",
    "driver.find_element(By.ID, \"password\").send_keys(\"SuperSecretPassword!\")\n",
    "driver.find_element(By.CSS_SELECTOR, \"button[type='submit']\").click()\n",
    "print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, \"flash\"))).text)\n",
    "assert \"You logged into a secure area!\" in driver.find_element(By.ID, \"flash\").text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2f80bdf0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "I am a JS Alert\n",
      "You clicked: Cancel\n",
      "You entered: Selenium\n"
     ]
    }
   ],
   "source": [
    "#TASK4: Handle Alerts\n",
    "driver.get(\"https://the-internet.herokuapp.com/javascript_alerts\")\n",
    "driver.find_element(By.XPATH, \"//button[text()='Click for JS Alert']\").click()\n",
    "print(WebDriverWait(driver, 10).until(EC.alert_is_present()).text)\n",
    "driver.switch_to.alert.accept()\n",
    "driver.find_element(By.XPATH, \"//button[text()='Click for JS Confirm']\").click()\n",
    "WebDriverWait(driver, 10).until(EC.alert_is_present()).dismiss()\n",
    "print(driver.find_element(By.ID, \"result\").text)\n",
    "driver.find_element(By.XPATH, \"//button[text()='Click for JS Prompt']\").click()\n",
    "WebDriverWait(driver, 10).until(EC.alert_is_present()).send_keys(\"Shoaib\")\n",
    "driver.switch_to.alert.accept()\n",
    "print(driver.find_element(By.ID, \"result\").text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "task05",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Purple\n"
     ]
    }
   ],
   "source": [
    "#TASK5: Automate a Dropdown\n",
    "driver.get(\"https://demoqa.com/select-menu\")\n",
    "Select(driver.find_element(By.ID, \"oldSelectMenu\")).select_by_index(2)\n",
    "Select(driver.find_element(By.ID, \"oldSelectMenu\")).select_by_value(\"4\")\n",
    "Select(driver.find_element(By.ID, \"oldSelectMenu\")).select_by_visible_text(\"Purple\")\n",
    "print(Select(driver.find_element(By.ID, \"oldSelectMenu\")).first_selected_option.text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task06",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK6: Automate File Upload\n",
    "driver.get(\"https://the-internet.herokuapp.com/upload\")\n",
    "driver.find_element(By.ID, \"file-upload\").send_keys(os.path.abspath(\"selenium.ipynb\"))\n",
    "driver.find_element(By.ID, \"file-submit\").click()\n",
    "print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.ID, \"uploaded-files\"))).text)\n",
    "assert driver.find_element(By.ID, \"uploaded-files\").text == \"selenium.ipynb\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task07",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK7: Extract Data from a Table\n",
    "driver.get(\"https://the-internet.herokuapp.com/tables\")\n",
    "for row in driver.find_elements(By.CSS_SELECTOR, \"#table1 tbody tr\"):\n",
    "    print(row.text)\n",
    "assert \"jsmith@gmail.com\" in driver.find_element(By.ID, \"table1\").text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task08",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK8: Handle Frames\n",
    "driver.get(\"https://the-internet.herokuapp.com/iframe\")\n",
    "driver.switch_to.frame(\"mce_0_ifr\")\n",
    "driver.find_element(By.ID, \"tinymce\").send_keys(\" Hello from Selenium\")\n",
    "print(driver.find_element(By.ID, \"tinymce\").text)\n",
    "driver.switch_to.default_content()\n",
    "print(driver.find_element(By.TAG_NAME, \"h3\").text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task09",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK9: Handle Dynamic Elements\n",
    "driver.get(\"https://the-internet.herokuapp.com/dynamic_loading/1\")\n",
    "driver.find_element(By.CSS_SELECTOR, \"#start button\").click()\n",
    "print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, \"finish\"))).text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task10",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK10: Automate a Slider\n",
    "driver.get(\"https://demoqa.com/slider\")\n",
    "ActionChains(driver).drag_and_drop_by_offset(driver.find_element(By.CSS_SELECTOR, \"input[type='range']\"), 100, 0).perform()\n",
    "print(driver.find_element(By.ID, \"sliderValue\").get_attribute(\"value\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task11",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK11: Automate Hover Actions\n",
    "driver.get(\"https://demoqa.com/tool-tips\")\n",
    "ActionChains(driver).move_to_element(driver.find_element(By.ID, \"toolTipButton\")).perform()\n",
    "print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, \"tooltip-inner\"))).text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task12",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK12: Automate Drag and Drop\n",
    "driver.get(\"https://demoqa.com/droppable\")\n",
    "ActionChains(driver).drag_and_drop(WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, \"#draggable.ui-draggable\"))), driver.find_element(By.ID, \"droppable\")).perform()\n",
    "print(driver.find_element(By.ID, \"droppable\").text)\n",
    "assert driver.find_element(By.ID, \"droppable\").text == \"Dropped!\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task13",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK13: Automate Web Scraping with Selenium\n",
    "driver.get(\"https://books.toscrape.com\")\n",
    "for product in driver.find_elements(By.CLASS_NAME, \"product_pod\"):\n",
    "    print(product.find_element(By.CSS_SELECTOR, \"h3 a\").get_attribute(\"title\"), \"-\", product.find_element(By.CLASS_NAME, \"price_color\").text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task14",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK14: Automate CAPTCHA\n",
    "driver.get(\"https://www.google.com/recaptcha/api2/demo\")\n",
    "print(driver.find_element(By.CSS_SELECTOR, \"iframe[title='reCAPTCHA']\").is_displayed())\n",
    "input(\"Solve the CAPTCHA in the browser, then press Enter\")\n",
    "driver.find_element(By.ID, \"recaptcha-demo-submit\").click()\n",
    "print(driver.find_element(By.CLASS_NAME, \"recaptcha-success\").text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "task15",
   "metadata": {},
   "outputs": [],
   "source": [
    "#TASK15: Test a Search Feature\n",
    "driver.get(\"https://www.amazon.com\")\n",
    "WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, \"twotabsearchtextbox\"))).send_keys(\"laptops\", Keys.ENTER)\n",
    "for title in WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, \"[data-component-type='s-search-result'] h2\"))):\n",
    "    print(title.text)\n",
    "assert any(\"laptop\" in title.text.lower() for title in driver.find_elements(By.CSS_SELECTOR, \"[data-component-type='s-search-result'] h2\"))\n",
    "driver.quit()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python (Selenium Task)",
   "language": "python",
   "name": "selenium-task"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
