338 lines
13 KiB
Python
338 lines
13 KiB
Python
from selenium import webdriver
|
||
from selenium.webdriver.common.by import By
|
||
from selenium.webdriver.chrome.service import Service
|
||
from selenium.webdriver.support.ui import WebDriverWait
|
||
from selenium.webdriver.support import expected_conditions as EC
|
||
from webdriver_manager.chrome import ChromeDriverManager
|
||
from selenium.webdriver.common.keys import Keys
|
||
from selenium.common.exceptions import TimeoutException
|
||
import time
|
||
import os
|
||
import sys
|
||
|
||
# Import login
|
||
try:
|
||
from login import login_to_cms
|
||
print("✅ Successfully imported login_to_cms from login.py")
|
||
except ImportError as e:
|
||
print(f"❌ Failed to import login_to_cms: {e}")
|
||
sys.exit(1)
|
||
|
||
def test_about_us_card_type():
|
||
driver = None
|
||
try:
|
||
driver = login_to_cms()
|
||
print("✅ Logged in, starting About Us > Card Types test")
|
||
|
||
wait = WebDriverWait(driver, 20)
|
||
|
||
# Click the 'About Us' dropdown by targeting the div with exact text
|
||
about_us_menu = wait.until(EC.element_to_be_clickable((
|
||
By.XPATH, "//div[contains(@class, 'ant-menu-submenu-title')][.//span[text()='About Us']]"
|
||
)))
|
||
driver.execute_script("arguments[0].click();", about_us_menu)
|
||
print("✅ Clicked on 'About Us' to reveal submenu")
|
||
|
||
|
||
# Click "Card Types"
|
||
card_types_link = wait.until(EC.element_to_be_clickable(
|
||
(By.XPATH, "//a[@href='/about-us/card-types']")))
|
||
card_types_link.click()
|
||
print("✅ Clicked on 'Card Types'")
|
||
|
||
# Click "Add Card"
|
||
add_card_btn = wait.until(EC.element_to_be_clickable(
|
||
(By.XPATH, "//button[.//span[text()='Add Card']]")))
|
||
add_card_btn.click()
|
||
print("✅ Clicked on 'Add Card'")
|
||
|
||
# Fill Card Code
|
||
card_code_input = wait.until(EC.presence_of_element_located(
|
||
(By.NAME, "code")))
|
||
card_code_input.send_keys("MARJORIECODE")
|
||
print("✅ Inputted Card Code")
|
||
|
||
# Fill Card Type Description
|
||
# Find all inputs with name="type"
|
||
type_inputs = wait.until(EC.presence_of_all_elements_located((By.NAME, "type")))
|
||
|
||
# Input in the first one: Card Type Description
|
||
type_inputs[0].send_keys("test card description")
|
||
print("✅ Card Type Description input filled")
|
||
|
||
# Fill in the Card Type Short Description (textarea with name="description")
|
||
short_desc_textarea = wait.until(EC.presence_of_element_located((By.NAME, "description")))
|
||
short_desc_textarea.send_keys("this is a card type short description")
|
||
print("✅ Card Type Short Description input filled")
|
||
|
||
# Upload Card Type Image
|
||
upload_inputs = driver.find_elements(By.CSS_SELECTOR, "input[type='file']")
|
||
if upload_inputs:
|
||
image_path = os.path.abspath(r"C:\\Users\\MARJORIE ANITO\\unioil_testing\\image\\image.jpg")
|
||
upload_inputs[0].send_keys(image_path)
|
||
print("✅ Card Type Image uploaded")
|
||
time.sleep(3) # wait for upload preview to show
|
||
else:
|
||
print("❌ File input for Card Type Image not found")
|
||
|
||
# Select Black radio button
|
||
try:
|
||
black_radio = driver.find_element(By.CSS_SELECTOR, "input[type='radio'][value='2']")
|
||
driver.execute_script("arguments[0].click();", black_radio)
|
||
print("✅ Selected 'Black' radio button")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to select 'Black' radio button: {e}")
|
||
|
||
# Upload Card Type Cover
|
||
upload_inputs = driver.find_elements(By.CSS_SELECTOR, "input[type='file']")
|
||
if len(upload_inputs) > 1:
|
||
cover_path = os.path.abspath(r"C:\\Users\\MARJORIE ANITO\\unioil_testing\\image\\image.jpg")
|
||
upload_inputs[1].send_keys(cover_path)
|
||
print("✅ Card Type Cover uploaded")
|
||
time.sleep(3)
|
||
else:
|
||
print("❌ File input for Card Type Cover not found")
|
||
|
||
# Add Terms and Conditions
|
||
try:
|
||
terms_textarea = driver.find_element(By.NAME, "terms_and_conditions")
|
||
terms_textarea.clear()
|
||
terms_textarea.send_keys("TESTING")
|
||
print("✅ Terms and Conditions entered")
|
||
except Exception as e:
|
||
print(f"❌ Failed to enter Terms and Conditions: {e}")
|
||
|
||
# Add FAQs
|
||
try:
|
||
faqs_textarea = driver.find_element(By.NAME, "faqs")
|
||
faqs_textarea.clear()
|
||
faqs_textarea.send_keys("TESTING")
|
||
print("✅ FAQs entered")
|
||
except Exception as e:
|
||
print(f"❌ Failed to enter FAQs: {e}")
|
||
|
||
# Click Submit
|
||
try:
|
||
submit_btn = driver.find_element(By.XPATH, "//button[.//span[text()='Submit']]")
|
||
driver.execute_script("arguments[0].click();", submit_btn)
|
||
print("✅ Submit button clicked")
|
||
except Exception as e:
|
||
print(f"❌ Failed to click Submit button: {e}")
|
||
|
||
# After clicking Submit, handle error modal if it appears
|
||
try:
|
||
close_error_icon = WebDriverWait(driver, 5).until(
|
||
EC.element_to_be_clickable((By.XPATH, "//i[contains(@class, 'ant-notification-close-icon')]"))
|
||
)
|
||
close_error_icon.click()
|
||
print("🟡 Error/notification modal appeared and was closed")
|
||
|
||
# Click Cancel to exit the form
|
||
cancel_btn = WebDriverWait(driver, 5).until(
|
||
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Cancel']]"))
|
||
)
|
||
cancel_btn.click()
|
||
print("✅ Cancel button clicked after closing error modal")
|
||
|
||
# Click Yes on the confirmation modal
|
||
yes_btn = WebDriverWait(driver, 5).until(
|
||
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Yes']]"))
|
||
)
|
||
yes_btn.click()
|
||
print("✅ Clicked Yes on cancel confirmation after error modal")
|
||
|
||
time.sleep(2)
|
||
except TimeoutException:
|
||
print("ℹ️ No error modal appeared, proceeding normally...")
|
||
|
||
# Search for PRIVATEB
|
||
try:
|
||
search_input = WebDriverWait(driver, 10).until(
|
||
EC.presence_of_element_located((By.CSS_SELECTOR, "input[placeholder='Search']"))
|
||
)
|
||
search_input.clear()
|
||
search_input.send_keys("PRIVATEB")
|
||
search_input.send_keys(Keys.ENTER)
|
||
print("✅ Searched for PRIVATEB")
|
||
time.sleep(3) # wait for search results
|
||
except Exception as e:
|
||
print(f"❌ Search input error: {e}")
|
||
|
||
# Click View icon
|
||
try:
|
||
view_icon = driver.find_element(By.CSS_SELECTOR, "i.anticon-right-circle-o")
|
||
driver.execute_script("arguments[0].click();", view_icon)
|
||
print("✅ View icon clicked")
|
||
time.sleep(2)
|
||
except Exception as e:
|
||
print(f"❌ Failed to click View icon: {e}")
|
||
|
||
# Click Delete and then No
|
||
try:
|
||
delete_btn = driver.find_element(By.XPATH, "//button[.//span[text()='Delete']]")
|
||
driver.execute_script("arguments[0].click();", delete_btn)
|
||
print("✅ Delete button clicked")
|
||
|
||
no_btn = WebDriverWait(driver, 5).until(
|
||
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='No']]"))
|
||
)
|
||
no_btn.click()
|
||
print("✅ Clicked No on confirmation")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Delete/No click failed: {e}")
|
||
|
||
# Click Update and then Cancel
|
||
try:
|
||
update_btn = driver.find_element(By.XPATH, "//button[.//span[text()='Update']]")
|
||
driver.execute_script("arguments[0].click();", update_btn)
|
||
print("✅ Update button clicked")
|
||
time.sleep(2)
|
||
|
||
cancel_btn = driver.find_element(By.XPATH, "//button[.//span[text()='Cancel']]")
|
||
cancel_btn.click()
|
||
print("✅ Cancel button clicked")
|
||
|
||
yes_btn = WebDriverWait(driver, 5).until(
|
||
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Yes']]"))
|
||
)
|
||
yes_btn.click()
|
||
print("✅ Clicked Yes on cancel confirmation")
|
||
except Exception as e:
|
||
print(f"❌ Update/Cancel sequence failed: {e}")
|
||
|
||
# Click Terms & Privacy
|
||
try:
|
||
terms_privacy_link = wait.until(EC.element_to_be_clickable(
|
||
(By.XPATH, "//a[@href='/about-us/term-privacy']")))
|
||
terms_privacy_link.click()
|
||
print("✅ Clicked on 'Terms & Privacy'")
|
||
time.sleep(2)
|
||
except Exception as e:
|
||
print(f"❌ Failed to click 'Terms & Privacy': {e}")
|
||
|
||
# Click Add button (dropdown trigger)
|
||
try:
|
||
add_dropdown_btn = wait.until(EC.element_to_be_clickable(
|
||
(By.CSS_SELECTOR, "button.terms-management")))
|
||
add_dropdown_btn.click()
|
||
print("✅ Clicked on 'Add' dropdown")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to click 'Add' dropdown: {e}")
|
||
|
||
# Click 'Terms & Condition' option
|
||
try:
|
||
terms_option = wait.until(EC.element_to_be_clickable(
|
||
(By.XPATH, "//li[contains(text(), 'Terms & Condition')]")))
|
||
terms_option.click()
|
||
print("✅ Clicked on 'Terms & Condition'")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to select 'Terms & Condition': {e}")
|
||
|
||
# Fill in Title
|
||
try:
|
||
title_input = wait.until(EC.presence_of_element_located(
|
||
(By.XPATH, "//input[@name='title']")))
|
||
title_input.clear()
|
||
title_input.send_keys("T&C Title")
|
||
print("✅ Entered T&C Title")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to enter T&C Title: {e}")
|
||
|
||
# Fill in Details
|
||
try:
|
||
details_textarea = wait.until(EC.presence_of_element_located(
|
||
(By.XPATH, "//textarea[@name='details']")))
|
||
details_textarea.clear()
|
||
details_textarea.send_keys("T&C Details")
|
||
print("✅ Entered T&C Details")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to enter T&C Details: {e}")
|
||
|
||
# Submit the form
|
||
try:
|
||
submit_btn = wait.until(EC.element_to_be_clickable(
|
||
(By.XPATH, "//button[.//span[text()='Submit']]")))
|
||
submit_btn.click()
|
||
print("✅ Submitted T&C form")
|
||
time.sleep(2)
|
||
except TimeoutException as e:
|
||
print(f"❌ Failed to submit T&C form: {e}")
|
||
|
||
|
||
# Click Add button (dropdown trigger) again
|
||
try:
|
||
add_dropdown_btn = wait.until(EC.element_to_be_clickable(
|
||
(By.CSS_SELECTOR, "button.terms-management")))
|
||
add_dropdown_btn.click()
|
||
print("✅ Clicked on 'Add' dropdown")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to click 'Add' dropdown: {e}")
|
||
|
||
# Select Privacy Policy from the dropdown
|
||
try:
|
||
privacy_policy_option = WebDriverWait(driver, 10).until(
|
||
EC.element_to_be_clickable((By.XPATH, "//li[.//text()='Privacy Policy']"))
|
||
)
|
||
privacy_policy_option.click()
|
||
print("✅ Selected 'Privacy Policy' from dropdown")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to select 'Privacy Policy' from dropdown: {e}")
|
||
|
||
# Add Title for Privacy Policy
|
||
try:
|
||
title_input = WebDriverWait(driver, 10).until(
|
||
EC.presence_of_element_located((By.NAME, "title"))
|
||
)
|
||
title_input.clear()
|
||
title_input.send_keys("PP Title")
|
||
print("✅ Inputted Privacy Policy Title")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to input Privacy Policy Title: {e}")
|
||
|
||
# Add Details for Privacy Policy
|
||
try:
|
||
details_textarea = WebDriverWait(driver, 10).until(
|
||
EC.presence_of_element_located((By.NAME, "details"))
|
||
)
|
||
details_textarea.clear()
|
||
details_textarea.send_keys("PP Details")
|
||
print("✅ Inputted Privacy Policy Details")
|
||
time.sleep(1)
|
||
except Exception as e:
|
||
print(f"❌ Failed to input Privacy Policy Details: {e}")
|
||
|
||
# Submit the form for Privacy Policy
|
||
try:
|
||
submit_btn = WebDriverWait(driver, 10).until(
|
||
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Submit']]"))
|
||
)
|
||
submit_btn.click()
|
||
print("✅ Submitted Privacy Policy form")
|
||
time.sleep(2)
|
||
except TimeoutException as e:
|
||
print(f"❌ Failed to submit Privacy Policy form: {e}")
|
||
|
||
|
||
|
||
print("🎉 Test completed successfully")
|
||
|
||
except Exception as e:
|
||
print(f"❌ Test failed: {e}")
|
||
finally:
|
||
if driver:
|
||
print("🔒 Closing the browser in 10 seconds...")
|
||
time.sleep(10)
|
||
driver.quit()
|
||
|
||
if __name__ == "__main__":
|
||
test_about_us_card_type()
|