fix: Tufts SCO claim combobox selects matching option instead of first
_fill_combobox typed the value then used a single unioned XPath (match-by-text | option[1]) to pick the dropdown option. Selenium's find_element on a multi-match XPath returns the first node in document order, not the first union alternative, so option[1] (e.g. tooth "1") was always clicked regardless of what was typed (e.g. "22"). Split into a value-match wait with a separate fallback wait for option[1] only when no match is found.
This commit is contained in:
@@ -552,18 +552,18 @@ class AutomationTuftsSCOClaimSubmit:
|
|||||||
inp.send_keys(str(value))
|
inp.send_keys(str(value))
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
listbox_id = inp.get_attribute("aria-controls") or ""
|
listbox_id = inp.get_attribute("aria-controls") or ""
|
||||||
|
scope = f"//*[@id='{listbox_id}']" if listbox_id else "//*[@role='listbox']"
|
||||||
try:
|
try:
|
||||||
if listbox_id:
|
try:
|
||||||
option = WebDriverWait(self.driver, 4).until(
|
option = WebDriverWait(self.driver, 4).until(
|
||||||
EC.element_to_be_clickable((By.XPATH,
|
EC.element_to_be_clickable((By.XPATH,
|
||||||
f"//*[@id='{listbox_id}']//*[@role='option'][1]"
|
f"{scope}//*[@role='option' and contains(normalize-space(.),'{value}')]"
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
else:
|
except TimeoutException:
|
||||||
option = WebDriverWait(self.driver, 4).until(
|
option = WebDriverWait(self.driver, 2).until(
|
||||||
EC.element_to_be_clickable((By.XPATH,
|
EC.element_to_be_clickable((By.XPATH,
|
||||||
f"//*[@role='listbox']//*[@role='option' and contains(normalize-space(.),'{value}')]"
|
f"{scope}//*[@role='option'][1]"
|
||||||
f" | //*[@role='listbox']//*[@role='option'][1]"
|
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
option.click()
|
option.click()
|
||||||
|
|||||||
Reference in New Issue
Block a user