輸入後驗證欄位
field_entry 對控制項輸入後就*指望*它生效了。緩慢的 IME、焦點被搶、輸入遮罩或自動格式化都可能
悄悄竄改或漏掉字元,而沒有任何東西讀回欄位來察覺。這有別於 action_effect``(目標附近是否有*任何*
變化?)與 ``postcondition.text_present``(該文字是否出現在畫面*某處*?)——兩者都無法確認*這個*欄位
現在等於*這個*值。``verify_field 補上讀回這道缺口。
compare_field_value()——純函式:在某個比對mode下比較預期與實際值——exact/trim/ci``(不分大小寫)/ ``normalized``(Unicode NFKC + 大小寫摺疊 + 空白)/ ``contains。verify_field_value()——透過可注入的reader讀回欄位並比較。fill_and_verify()——透過可注入的filler輸入、讀回、並重試(可選擇先清空), 直到相符或用完次數。
在執行器中,reader 即原生無障礙值,但每個比較與重試決策都是純函式,可在沒有真實控制項的情況下測試。
不匯入 PySide6。
無頭 API
from je_auto_control import (
compare_field_value, verify_field_value, fill_and_verify,
)
compare_field_value("café", "café", mode="normalized")["match"] # True
# 讀回控制項並斷言它取得了該值
ok = verify_field_value("invoice.pdf",
reader=lambda: read_control_value())["match"]
# 輸入、讀回、最多重試 3 次(每次重試前先清空)
fill_and_verify("2026-06-26", filler=type_into_field,
reader=read_control_value, attempts=3, clear=select_all_del)
fill_and_verify 回傳最終的 compare_field_value() 結果加上 attempts 次數,
讓流程能在持續不符時分支處理,而非盲目輸入。filler / reader / clear 皆可注入,
故重試邏輯能在沒有真實欄位的情況下完整測試。
執行器指令
AC_compare_field_value``(``expected / actual / mode → {match,
mode, expected, actual},純函式)與 AC_verify_field_value``(``expected 加上
name / role / app_name / automation_id / mode → 比對結果,
透過無障礙後端讀取控制項的值)。皆以對應的唯讀 ac_* MCP 工具及 Script Builder 指令
(位於 Flow 分類下)形式提供。:func:`fill_and_verify`(包裹一個輸入 callable)則是 Python API 介面。