Testing_Unioil_Web/topup_test.py

170 lines
6.1 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
from selenium.webdriver.common.keys import Keys
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_top_up():
driver = None
try:
driver = login_to_cms()
print("Logged in, proceeding to Top-Up test")
WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "li.ant-menu-item"))
)
print("Sidebar loaded")
# Click the "Top-Up" link in the sidebar
topup_link = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//a[.//span[text()='Top-Up']]"))
)
topup_link.click()
print("✔️ Clicked on 'Top-Up' in sidebar")
time.sleep(2)
# Click View icon for one data
view_icon = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//i[contains(@class, 'anticon-right-circle-o')]"))
)
view_icon.click()
print("✔️ Clicked on View icon of one data")
time.sleep(2)
# Click Update button
update_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Update']]"))
)
update_btn.click()
print("✔️ Clicked Update button")
time.sleep(2)
# Add a value: First clear any existing value, then input 10
value_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "input[placeholder='Value']"))
)
# Clear the input field before entering the new value
value_input.send_keys(Keys.CONTROL + "a") # Select all text in the field
value_input.send_keys(Keys.BACKSPACE) # Delete the selected text
time.sleep(1)
# Ensure the field is empty before entering the new value
assert value_input.get_attribute('value') == "", "The input field was not cleared!"
value_input.send_keys("10") # Enter the new value "10"
print("✔️ Value input set to 10")
time.sleep(1)
# Click Submit button
submit_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Submit']]"))
)
submit_btn.click()
print("✔️ Submit button clicked")
time.sleep(1)
# Click Yes in confirmation
confirm_yes_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'ant-btn-primary') and .//span[text()='Yes']]"))
)
confirm_yes_btn.click()
print("✔️ Confirmed Submit by clicking Yes")
time.sleep(2)
# Click another View icon (for a second data entry)
view_icon = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "(//i[contains(@class, 'anticon-right-circle-o')])[2]"))
)
view_icon.click()
print("✔️ Clicked on View icon of another data")
time.sleep(2)
# Click Update for the second entry
update_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Update']]"))
)
update_btn.click()
print("✔️ Clicked Update button")
time.sleep(2)
# Click Cancel for the second entry
cancel_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Cancel']]"))
)
cancel_btn.click()
print("✔️ Clicked Cancel button")
time.sleep(2)
# Confirm Cancel by clicking Yes
confirm_yes_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'ant-btn-primary') and .//span[text()='Yes']]"))
)
confirm_yes_btn.click()
print("✔️ Confirmed Cancel by clicking Yes")
time.sleep(2)
# ------------------- Add New Top-Up Data -------------------
# Click the Add button
add_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Add']]"))
)
add_btn.click()
print("✔️ Clicked Add button")
time.sleep(2)
# Input Name ("Marjorie")
name_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//input[@name='name']"))
)
name_input.send_keys("Marjorie")
print("✔️ Entered Name: Marjorie")
time.sleep(1)
# Input Value ("500")
value_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Value']"))
)
value_input.send_keys("500")
print("✔️ Entered Value: 500")
time.sleep(1)
# Click Submit to add the data
submit_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Submit']]"))
)
submit_btn.click()
print("✔️ Clicked Submit button to add data")
time.sleep(1)
# Click Yes in confirmation
confirm_yes_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'ant-btn-primary') and .//span[text()='Yes']]"))
)
confirm_yes_btn.click()
print("✔️ Confirmed Submit by clicking Yes")
time.sleep(2)
finally:
# Close the browser after a brief wait
if driver:
print("Test completed. Closing the browser in 10 seconds...")
time.sleep(10)
driver.quit()
if __name__ == "__main__":
test_top_up()