104 lines
3.6 KiB
Python
104 lines
3.6 KiB
Python
from selenium import webdriver
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.chrome.service import Service
|
|
from webdriver_manager.chrome import ChromeDriverManager
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
from selenium.webdriver.support import expected_conditions as EC
|
|
import time
|
|
import sys
|
|
import os
|
|
|
|
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_promotions():
|
|
driver = None
|
|
try:
|
|
driver = login_to_cms()
|
|
print("Logged in, proceeding to User Management test")
|
|
|
|
WebDriverWait(driver, 20).until(
|
|
EC.presence_of_element_located((By.CSS_SELECTOR, "li.ant-menu-item"))
|
|
)
|
|
print("Sidebar loaded")
|
|
|
|
# Click Promotions tab
|
|
promotions_tab = WebDriverWait(driver, 20).until(
|
|
EC.element_to_be_clickable((By.XPATH, "//a[span[text()='Promotions']]"))
|
|
)
|
|
driver.execute_script("arguments[0].scrollIntoView(true);", promotions_tab)
|
|
time.sleep(1)
|
|
promotions_tab.click()
|
|
print("✅ Clicked Promotions tab")
|
|
|
|
# Search for Title 'Advisory'
|
|
search_input = WebDriverWait(driver, 20).until(
|
|
EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Search']"))
|
|
)
|
|
search_input.send_keys("Advisory")
|
|
print("Typed 'Advisory' in search")
|
|
time.sleep(2)
|
|
|
|
# Click View icon (first occurrence assumed)
|
|
view_icon = WebDriverWait(driver, 20).until(
|
|
EC.element_to_be_clickable((By.XPATH, "//i[contains(@class, 'anticon-right-circle-o')]"))
|
|
)
|
|
view_icon.click()
|
|
print("Clicked View icon")
|
|
time.sleep(2)
|
|
|
|
# Click Update icon (same icon class, assuming second one)
|
|
update_button = WebDriverWait(driver, 20).until(
|
|
EC.element_to_be_clickable((By.XPATH, "//button[span[text()='Update']]"))
|
|
)
|
|
driver.execute_script("arguments[0].scrollIntoView(true);", update_button)
|
|
time.sleep(1)
|
|
update_button.click()
|
|
print("✅ Clicked Update button")
|
|
|
|
# Click the Cancel button
|
|
cancel_button = WebDriverWait(driver, 10).until(
|
|
EC.element_to_be_clickable((By.XPATH, "//button[span[text()='Cancel']]"))
|
|
)
|
|
driver.execute_script("arguments[0].scrollIntoView(true);", cancel_button)
|
|
time.sleep(1)
|
|
cancel_button.click()
|
|
print("✅ Clicked Cancel button")
|
|
|
|
# Wait for and click the Yes button in the confirmation dialog
|
|
yes_button = WebDriverWait(driver, 10).until(
|
|
EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'ant-btn-primary') and span[text()='Yes']]"))
|
|
)
|
|
time.sleep(1)
|
|
yes_button.click()
|
|
print("✅ Clicked Yes on confirmation dialog")
|
|
|
|
time.sleep(2)
|
|
|
|
# Final screenshot inside 'screenshot' folder
|
|
screenshot_path = os.path.join("screenshot", "promotions_test_result.png")
|
|
driver.save_screenshot(screenshot_path)
|
|
print(f"📸 Screenshot saved as {screenshot_path}")
|
|
|
|
print("🕒 Waiting 10 seconds before closing the browser...")
|
|
time.sleep(10)
|
|
driver.quit()
|
|
|
|
except Exception as e:
|
|
print(f"❌ Test failed: {e}")
|
|
screenshot_path = os.path.join("screenshot", "promotions_test_error.png")
|
|
driver.save_screenshot(screenshot_path)
|
|
print(f"📸 Error screenshot saved as {screenshot_path}")
|
|
raise
|
|
|
|
finally:
|
|
driver.quit()
|
|
print("🚪 Browser closed")
|
|
|
|
if __name__ == "__main__":
|
|
test_promotions()
|