232 lines
6.3 KiB
Python
232 lines
6.3 KiB
Python
import time
|
|
from urllib.parse import urlparse
|
|
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.support import expected_conditions as EC
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
|
|
from tests.regression.ui_helpers import (
|
|
click_select2_option_by_text,
|
|
open_bootstrap_nav_submenu,
|
|
select_select2_value_by_container_id,
|
|
wait_for_select2_option_by_text,
|
|
)
|
|
|
|
|
|
TRADING_MARKET_LABELS = {
|
|
"GDAM": "GDAM Order Entry",
|
|
"DAM": "DAM Order Entry",
|
|
"HPDAM": "HPDAM Order Entry",
|
|
}
|
|
|
|
TRADING_MARKET_HREFS = {
|
|
"GDAM": "../IDAS/GDAMOrderEntry.aspx",
|
|
"DAM": "../IDAS/DAMOrderEntry.aspx",
|
|
"HPDAM": "../IDAS/HPDAMOrderEntry.aspx",
|
|
}
|
|
|
|
|
|
BIDDING_SCREEN_LABELS = {
|
|
"single_bid": "Single Bid",
|
|
"block_bid": "Block Bid",
|
|
}
|
|
|
|
|
|
BLOCK_BULK_UPLOAD_HREF = "../FrontOffice/BulkOrderUploadIDAS.aspx"
|
|
|
|
|
|
def open_idas_market_page(driver, trading_market):
|
|
|
|
open_bootstrap_nav_submenu(
|
|
driver,
|
|
"Trading",
|
|
"IDAS",
|
|
TRADING_MARKET_HREFS[trading_market]
|
|
)
|
|
|
|
wait = WebDriverWait(driver, 20)
|
|
wait.until(
|
|
EC.any_of(
|
|
EC.url_contains("OrderEntry.aspx"),
|
|
EC.visibility_of_element_located((By.XPATH, "//a[normalize-space()='Single Bid']")),
|
|
EC.visibility_of_element_located((By.ID, "s2id_ddlproduct"))
|
|
)
|
|
)
|
|
|
|
|
|
def open_idas_block_bulk_upload_page(driver):
|
|
|
|
open_bootstrap_nav_submenu(
|
|
driver,
|
|
"Trading",
|
|
"IDAS",
|
|
"BulkOrderUploadIDAS.aspx"
|
|
)
|
|
|
|
wait = WebDriverWait(driver, 20)
|
|
wait.until(
|
|
EC.any_of(
|
|
EC.url_contains("BulkOrderUploadIDAS.aspx"),
|
|
EC.visibility_of_element_located((By.XPATH, "//*[contains(normalize-space(),'IDAS Bulk Order Upload')]")),
|
|
EC.visibility_of_element_located((By.ID, "validateOrder"))
|
|
)
|
|
)
|
|
|
|
|
|
def open_idas_market_page_direct(driver, trading_market):
|
|
|
|
current_url = urlparse(driver.current_url)
|
|
base_url = f"{current_url.scheme}://{current_url.netloc}"
|
|
order_entry_path = TRADING_MARKET_HREFS[trading_market].replace("../", "/")
|
|
|
|
driver.get(f"{base_url}{order_entry_path}")
|
|
|
|
wait = WebDriverWait(driver, 20)
|
|
wait.until(
|
|
EC.any_of(
|
|
EC.url_contains("OrderEntry.aspx"),
|
|
EC.visibility_of_element_located((By.XPATH, "//a[normalize-space()='Single Bid']")),
|
|
EC.visibility_of_element_located((By.ID, "s2id_ddlproduct"))
|
|
)
|
|
)
|
|
|
|
|
|
def open_bidding_screen(driver, bidding_screen):
|
|
|
|
if bidding_screen == "single_bid":
|
|
return
|
|
|
|
tab_label = BIDDING_SCREEN_LABELS[bidding_screen]
|
|
wait = WebDriverWait(driver, 20)
|
|
|
|
active_or_visible_tab = wait.until(
|
|
EC.visibility_of_element_located(
|
|
(
|
|
By.XPATH,
|
|
f"//*[self::a or self::button or self::span][normalize-space()='{tab_label}']"
|
|
)
|
|
)
|
|
)
|
|
|
|
tab_classes = (active_or_visible_tab.get_attribute("class") or "").lower()
|
|
if "active" in tab_classes:
|
|
return
|
|
|
|
tab = wait.until(
|
|
EC.element_to_be_clickable(
|
|
(
|
|
By.XPATH,
|
|
f"//*[self::a or self::button or self::span][normalize-space()='{tab_label}']"
|
|
)
|
|
)
|
|
)
|
|
try:
|
|
tab.click()
|
|
except Exception:
|
|
driver.execute_script("arguments[0].click();", tab)
|
|
|
|
|
|
def select_bidding_filters(
|
|
driver,
|
|
product_code,
|
|
tm_id,
|
|
tac_id,
|
|
product_to_tm_delay_seconds=0,
|
|
tm_to_tac_delay_seconds=0,
|
|
tm_timeout_seconds=30,
|
|
tm_attempts=3,
|
|
tac_timeout_seconds=15,
|
|
tac_attempts=2,
|
|
bidding_screen_ready_wait_seconds=10
|
|
):
|
|
|
|
if bidding_screen_ready_wait_seconds > 0:
|
|
time.sleep(bidding_screen_ready_wait_seconds)
|
|
wait_for_bidding_product_configuration(driver)
|
|
select_select2_value_by_container_id(driver, "s2id_ddlproduct", product_code, exact=True)
|
|
if product_to_tm_delay_seconds > 0:
|
|
time.sleep(product_to_tm_delay_seconds)
|
|
wait_for_select2_option_by_text(
|
|
driver,
|
|
"s2id_ddlTMID",
|
|
tm_id,
|
|
timeout_seconds=tm_timeout_seconds,
|
|
attempts=tm_attempts
|
|
)
|
|
click_select2_option_by_text(driver, "s2id_ddlTMID", tm_id)
|
|
if tm_to_tac_delay_seconds > 0:
|
|
time.sleep(tm_to_tac_delay_seconds)
|
|
wait_for_select2_option_by_text(
|
|
driver,
|
|
"s2id_ddlTACID",
|
|
tac_id,
|
|
timeout_seconds=tac_timeout_seconds,
|
|
attempts=tac_attempts
|
|
)
|
|
click_select2_option_by_text(driver, "s2id_ddlTACID", tac_id)
|
|
|
|
|
|
def select_bidding_filters_for_trading_member(
|
|
driver,
|
|
product_code,
|
|
tac_id,
|
|
tac_timeout_seconds=15,
|
|
tac_attempts=2,
|
|
bidding_screen_ready_wait_seconds=10
|
|
):
|
|
|
|
if bidding_screen_ready_wait_seconds > 0:
|
|
time.sleep(bidding_screen_ready_wait_seconds)
|
|
wait_for_bidding_product_configuration(driver)
|
|
select_select2_value_by_container_id(driver, "s2id_ddlproduct", product_code, exact=True)
|
|
wait_for_select2_option_by_text(
|
|
driver,
|
|
"s2id_ddlTACID",
|
|
tac_id,
|
|
timeout_seconds=tac_timeout_seconds,
|
|
attempts=tac_attempts
|
|
)
|
|
click_select2_option_by_text(driver, "s2id_ddlTACID", tac_id)
|
|
|
|
|
|
def select_bidding_product_and_tm(
|
|
driver,
|
|
product_code,
|
|
tm_id,
|
|
product_to_tm_delay_seconds=0,
|
|
tm_timeout_seconds=30,
|
|
tm_attempts=3,
|
|
bidding_screen_ready_wait_seconds=10
|
|
):
|
|
|
|
if bidding_screen_ready_wait_seconds > 0:
|
|
time.sleep(bidding_screen_ready_wait_seconds)
|
|
wait_for_bidding_product_configuration(driver)
|
|
select_select2_value_by_container_id(driver, "s2id_ddlproduct", product_code, exact=True)
|
|
if product_to_tm_delay_seconds > 0:
|
|
time.sleep(product_to_tm_delay_seconds)
|
|
wait_for_select2_option_by_text(
|
|
driver,
|
|
"s2id_ddlTMID",
|
|
tm_id,
|
|
timeout_seconds=tm_timeout_seconds,
|
|
attempts=tm_attempts
|
|
)
|
|
click_select2_option_by_text(driver, "s2id_ddlTMID", tm_id)
|
|
|
|
|
|
def wait_for_bidding_product_configuration(driver, timeout_seconds=60):
|
|
|
|
wait = WebDriverWait(driver, timeout_seconds)
|
|
wait.until(
|
|
lambda _driver: not any(
|
|
element.is_displayed()
|
|
for element in _driver.find_elements(
|
|
By.XPATH,
|
|
"//*[contains(translate(normalize-space(), "
|
|
"'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), "
|
|
"'begin product configuration')]"
|
|
)
|
|
)
|
|
)
|