Part Request submitter: clear 'NOT SIGNED IN' / form-not-loaded error instead of raw Selenium timeout

main
admin 2026-07-15 07:09:21 +00:00
parent 6ad4e9b830
commit 37b5992b0e
No known key found for this signature in database
2 changed files with 14 additions and 2 deletions

Binary file not shown.

View File

@ -56,6 +56,7 @@ from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
def make_driver(debugger_address, chromedriver):
@ -122,7 +123,17 @@ def _attach_files(driver, files):
def submit_request(driver, base, req, no_submit=False):
driver.get(f"{base}/partrequestsmanagement/Tasks/Add")
_wait(driver, EC.presence_of_element_located((By.ID, "Manufacturer")))
try:
_wait(driver, EC.presence_of_element_located((By.ID, "Manufacturer")), t=20)
except TimeoutException:
url = driver.current_url
if any(k in url.lower() for k in ("auth.altium.com", "signin", "login", "oauth")):
raise RuntimeError(
"NOT SIGNED IN — this Chrome (the one on the debug port) is on the Altium login "
"page, so the form never loaded. Open that same Chrome profile, sign into the "
"Workspace (keep me signed in), leave it open, and re-run.")
raise RuntimeError(f"The 'Add new request' form did not load (no #Manufacturer field). "
f"Current page URL: {url}")
_set_text(driver, By.ID, "Manufacturer", req.get("manufacturer", ""))
_set_text(driver, By.ID, "ManufacturerPartNumbers", req.get("mpn", ""))
_set_text(driver, By.ID, "Description", req.get("description", ""))
@ -166,9 +177,10 @@ def main():
try:
r = submit_request(driver, a.base.rstrip("/"), req, no_submit=no_submit)
except Exception as e:
r = {"mpn": req.get("mpn"), "status": "error", "error": str(e)[:300]}
r = {"mpn": req.get("mpn"), "status": "error", "error": str(e).splitlines()[0][:400]}
results.append(r)
print(f"[{i+1}/{len(requests)}] {req.get('mpn')}: {r['status']}"
+ (f" -> {r['error']}" if r.get("error") else "")
+ (f" MISSING {r['missing_files']}" if r.get("missing_files") else ""))
if a.review_first and first and not a.no_submit:
input("Review the first request in the browser, then press Enter to submit the rest...")