feat: AR-House initial commit
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
"""Probe Civitek Case Search tab structure."""
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def probe():
|
||||
from playwright.sync_api import sync_playwright
|
||||
|
||||
out_dir = Path(__file__).parent.parent / "_probe_out" / "civitek"
|
||||
|
||||
with sync_playwright() as p:
|
||||
browser = p.chromium.launch(headless=True)
|
||||
page = browser.new_context().new_page()
|
||||
|
||||
# Walk to search
|
||||
page.goto("https://www.civitekflorida.com/ocrs/county/27/")
|
||||
page.wait_for_timeout(1500)
|
||||
page.locator("button:has-text('Public')").first.click()
|
||||
page.wait_for_timeout(2500)
|
||||
page.locator("button:has-text('I Agree')").first.click()
|
||||
page.wait_for_timeout(2500)
|
||||
|
||||
# Click "Case Search" tab (data-index=1)
|
||||
print("[1] Clicking 'Case Search' tab...")
|
||||
case_tab = page.locator("li[role='tab']:has-text('Case Search')").first
|
||||
case_tab.click()
|
||||
page.wait_for_timeout(2500)
|
||||
(out_dir / "05_case_search_tab.html").write_text(page.content(), encoding="utf-8")
|
||||
|
||||
# Find new fields exposed under Case Search tab
|
||||
print("\n[2] Inputs visible after switching tab:")
|
||||
for inp in page.locator("input:visible, select:visible").all()[:30]:
|
||||
try:
|
||||
tag = inp.evaluate("el => el.tagName.toLowerCase()")
|
||||
id_ = inp.get_attribute("id") or ""
|
||||
name = inp.get_attribute("name") or ""
|
||||
type_ = inp.get_attribute("type") or ""
|
||||
placeholder = inp.get_attribute("placeholder") or ""
|
||||
if type_ == "hidden":
|
||||
continue
|
||||
# Get label
|
||||
label_for = ""
|
||||
if id_:
|
||||
lbl = page.locator(f"label[for='{id_}']").first
|
||||
if lbl.count() > 0:
|
||||
label_for = lbl.inner_text()[:50]
|
||||
print(f" <{tag}> id={id_!r} type={type_!r} label={label_for!r}")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Test: search for a known case_number from our realauction inventory
|
||||
# Most realauction cases are like "2024-CA-001234" or "23-2024-CA-001234"
|
||||
# Try a generic test case number first to see the UI behavior
|
||||
print("\n[3] Looking for case_number input field name...")
|
||||
case_inputs = page.locator("input[id*='case' i], input[id*='Case'], input[name*='case' i]").all()
|
||||
for inp in case_inputs[:5]:
|
||||
try:
|
||||
id_ = inp.get_attribute("id") or ""
|
||||
name = inp.get_attribute("name") or ""
|
||||
print(f" case-like input: id={id_!r} name={name!r}")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Submit empty to see validation errors
|
||||
print("\n[4] Submitting empty Case Search to see required fields...")
|
||||
search_btn = page.locator("button:has(.ui-button-text:text-is('Search'))").first
|
||||
if search_btn.count() == 0:
|
||||
search_btn = page.locator("button:has-text('Search')").first
|
||||
try:
|
||||
search_btn.click()
|
||||
page.wait_for_timeout(2500)
|
||||
except Exception as e:
|
||||
print(f" click error: {e}")
|
||||
|
||||
# Capture error messages
|
||||
print("\n[5] Validation messages after empty submit:")
|
||||
for sel in [".ui-messages-error", ".ui-message-error", ".ui-message"]:
|
||||
for m in page.locator(sel).all()[:5]:
|
||||
try:
|
||||
t = (m.inner_text() or "").strip()[:200]
|
||||
if t:
|
||||
print(f" [{sel}] {t}")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
(out_dir / "06_case_search_empty_submit.html").write_text(page.content(), encoding="utf-8")
|
||||
page.screenshot(path=str(out_dir / "06_case_search.png"), full_page=True)
|
||||
print(f"\n[OK] saved to {out_dir}/")
|
||||
browser.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
probe()
|
||||
Reference in New Issue
Block a user