Add configurable UPC and RA setup flows

This commit is contained in:
2026-09-29 13:33:45 +05:30
parent 97158d2006
commit ec38d5f65f
9 changed files with 228 additions and 29 deletions
+3 -4
View File
@@ -5,7 +5,7 @@ from selenium.webdriver.support.ui import WebDriverWait
import pytest
from tests.step_actions import StepActions
from tests.helpers import login, select_ui_dropdown
from tests.helpers import login, select_ui_dropdown, open_trading_maintenance_page
from tests.config_reader import get_setup_configs
from tests.locators import Locator
@@ -24,9 +24,8 @@ def get_session_window(config):
def create_session(driver, step, config):
step.click((By.XPATH, Locator.tradingmaintenance), "trading_maintenance")
step.click((By.XPATH, Locator.tradingsession), "trading_session")
open_trading_maintenance_page(driver, Locator.tradingsession)
step.capture("trading_session")
step.click((By.XPATH, Locator.addsessionbtn), "add_session")
+10 -11
View File
@@ -18,22 +18,21 @@ def test_session_and_token_setup(driver, test_context, config):
wait = WebDriverWait(driver, 20)
step = StepActions(driver, wait, test_context)
driver.get(config["url"])
step.capture("open_application")
if not getattr(driver, "_pxil_logged_in", False):
driver.get(config["url"])
step.capture("open_application")
login(
driver,
config["login"]["username"],
config["login"]["password"]
)
step.capture("login")
save_session_backup(driver, test_context, "login_session_backup")
if not getattr(driver, "_pxil_logged_in", False):
login(driver, config["login"]["username"], config["login"]["password"])
driver._pxil_logged_in = True
step.capture("login")
save_session_backup(driver, test_context, "login_session_backup")
create_session(driver, step, config)
if config.get("setup", {}).get("run_session", True):
create_session(driver, step, config)
for product_code in get_product_codes(token):
product_token = dict(token)
product_token["product_code"] = product_code
run_token_setup(driver, step, product_token)
logout(driver)
+64 -4
View File
@@ -73,7 +73,7 @@ def get_time_session_times(token, row_text, default_start_time, default_end_time
def get_product_codes(token):
product_codes = parse_product_codes(token.get("product_codes"))
product_codes = parse_product_codes(token.get("create_product_codes", token.get("product_codes")))
if product_codes:
return product_codes
@@ -225,7 +225,36 @@ def create_rtm_token(driver, step, token):
handle_transient_popups(driver)
def create_upc_token(driver, step, token):
open_trading_maintenance_page(driver, Locator.tokengenerator)
handle_transient_popups(driver)
step.capture("open_token_generator_upc")
fields = [(Locator.generatormarketcode, token["market_code"], "market_code"), (Locator.generatorproductcode, token["product_code"], "product_code")]
if driver.find_elements(By.ID, Locator.generatorgenerationmode):
fields.append((Locator.generatorgenerationmode, token["generation_mode"], "generation_mode"))
for element_id, value, name in fields:
select_bootstrap_dropdown_by_id(driver, element_id, value, exact=True)
step.capture(f"select_{name}_upc")
step.click((By.XPATH, Locator.addnewtokenbtn), "click_add_new_token_upc")
timings = token.get("upc_times", {})
for name, locator, value in (
("order_normal_start", Locator.upcorderstart, timings.get("order_normal_start_time")),
("order_normal_end", Locator.upcorderend, timings.get("order_normal_end_time")),
("trade_start", Locator.upctradestart, timings.get("trade_session_start_time")),
("trade_end", Locator.upctradeend, timings.get("trade_session_end_time")),
):
if value:
type_first_visible_input(driver, locator, value)
step.capture(f"enter_{name}_upc")
step.click((By.XPATH, Locator.savetokenbtn), "save_token_upc")
handle_transient_popups(driver)
step.click((By.XPATH, Locator.tokengeneratorresetbtn), "reset_token_generator_upc")
def run_token_setup(driver, step, token):
if token.get("product_type", "").upper() == "UPC":
create_upc_token(driver, step, token)
return
if token.get("product_type", "").upper() == "RTM":
create_rtm_token(driver, step, token)
else:
@@ -251,17 +280,48 @@ def create_and_activate_token(driver, step, token):
select_labeled_ui_dropdown(driver, "PRODUCT CODE", product_code)
step.capture(f"select_product_code_{product_code.lower()}")
generation_mode = token.get("generation_mode")
if generation_mode:
mode_elements = driver.find_elements(By.ID, Locator.generatorgenerationmode)
if mode_elements:
select_bootstrap_dropdown_by_id(driver, Locator.generatorgenerationmode, generation_mode, exact=True)
step.capture(f"select_generation_mode_{product_code.lower()}")
step.click((By.XPATH, Locator.addnewtokenbtn), f"click_add_new_token_{product_code.lower()}")
next_day, token_expiry = get_delivery_date_and_expiry(token)
step.type((By.XPATH, Locator.tokendeliverystartdate), next_day, f"enter_delivery_start_date_{product_code.lower()}")
step.type((By.XPATH, Locator.tokendeliveryenddate), next_day, f"enter_delivery_end_date_{product_code.lower()}")
step.type((By.XPATH, Locator.tokenexpirydate), token_expiry, f"enter_token_expiry_date_{product_code.lower()}")
if token.get("product_type", "").upper() == "UPC":
today = datetime.now().strftime("%d/%m/%Y")
if token.get("generation_mode") == "AnyDayUPC":
step.type((By.XPATH, Locator.tokentradedate), today, f"enter_trade_date_{product_code.lower()}")
timings = token.get("upc_times", {})
normal_start = timings.get("order_normal_start_time")
if normal_start is None and timings.get("order_normal_start_offset_minutes") is not None:
normal_start = (datetime.now() + timedelta(minutes=timings["order_normal_start_offset_minutes"])).strftime("%H:%M")
values = {
Locator.upcordernormalstart: normal_start,
Locator.upcordernormalend: timings.get("order_normal_end_time"),
Locator.upctradesessionstart: timings.get("trade_session_start_time"),
Locator.upctradesessionend: timings.get("trade_session_end_time"),
}
for locator, value in values.items():
if value is None:
continue
type_first_visible_input(driver, locator, value)
if token.get("generation_mode") not in ("WeeklyUPC", "MonthlyUPC"):
step.type((By.XPATH, Locator.tokendeliverystartdate), next_day, f"enter_delivery_start_date_{product_code.lower()}")
step.type((By.XPATH, Locator.tokendeliveryenddate), next_day, f"enter_delivery_end_date_{product_code.lower()}")
step.type((By.XPATH, Locator.tokenexpirydate), token_expiry, f"enter_token_expiry_date_{product_code.lower()}")
step.click((By.XPATH, Locator.savetokenbtn), f"save_token_{product_code.lower()}")
handle_transient_popups(driver)
if token.get("product_type", "").upper() == "UPC":
step.click((By.XPATH, Locator.tokengeneratorresetbtn), f"reset_token_generator_{product_code.lower()}")
return
complete_time_session_edits_from_saved_token(driver, step, token)