AutoRpa/codes/rpa_yisaiqi/verify_selenium_fill.py

180 lines
6.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""用真实 Selenium Chrome 验证合同建单填表流程(dry_run,不提交)。"""
import os
import sys
import time
# 确保能 import rpa_yisaiqi 包
BASE = os.path.dirname(os.path.abspath(__file__))
PARENT = os.path.dirname(BASE)
if PARENT not in sys.path:
sys.path.insert(0, PARENT)
from rpa_yisaiqi.apa_browser_adapter import ApaBrowserAdapter
from rpa_yisaiqi.contract_flow_steps import (
ContractFlowContext,
ContractGoodsLine,
login_contract_system,
enter_contract_create,
select_contract_template,
fill_contract_signatory_info,
fill_contract_basic_info,
fill_contract_amount_and_dates,
fill_contract_goods_lines,
fill_contract_payment_info,
)
CONTRACT_URL = "http://contract-test.gzmpc.com:8080/"
def build_ctx() -> ContractFlowContext:
return ContractFlowContext(
contract_url=CONTRACT_URL,
username="test002",
password="1",
supplier_name="重庆亿昊药业有限公司",
order_date="2026-08-12",
source_type="YYC",
template_type="NON_FORMAT",
template_name="非格式-采购协议",
customer_code="DW0100046361",
customer_name="重庆亿昊药业有限公司",
contract_category="采购协议",
settlement_type="付款",
contract_background="自动化测试合同起草",
contract_nature="主合同",
amount="50000",
contract_end_date="2026-12-31",
is_major_contract="否",
is_prepayment="否",
belong_year="2026",
payment_method="账期支付",
payment_days="30",
contract_status="正式合同",
contains_blood_products="否",
submit_mode="dry_run",
goods_lines=[
ContractGoodsLine(
operation_code="ADD",
goods_code="YP-001",
goods_name="测试药品A",
approval_no="国药准字H00000001",
spec="50mg*30片",
unit="盒",
quantity=10,
)
],
)
def read_values(driver):
"""回读表单中已填入的值,用于校验。"""
script = """
function getVal(name) {
var el = document.querySelector('input[name="' + name + '"],textarea[name="' + name + '"],select[name="' + name + '"]');
return el ? (el.value || '') : '(missing)';
}
var keys = [
'extendDataFormInfo.value(fd_customeropcode)',
'extendDataFormInfo.value(fd_customername)',
'extendDataFormInfo.value(fd_contract_cate_type)',
'fdAccount',
'fdSigndate',
'fdEffedate',
'fdEnddate',
'extendDataFormInfo.value(fd_is_major_contract)',
'extendDataFormInfo.value(fd_advance_amout)',
'extendDataFormInfo.value(fd_contract_year_text)',
'extendDataFormInfo.value(fd_paytype)',
'extendDataFormInfo.value(fd_pay_time_limit)',
'extendDataFormInfo.value(fd_suconstatus)',
'extendDataFormInfo.value(fd_3d1ce3953f1162)',
'extendDataFormInfo.value(fd_detail1.0.fd_opcode)',
'extendDataFormInfo.value(fd_detail1.0.fd_goodsname)',
'extendDataFormInfo.value(fd_detail1.0.fd_registdocno)',
'extendDataFormInfo.value(fd_detail1.0.fd_goodstype)',
'extendDataFormInfo.value(fd_detail1.0.fd_goodsunit)',
'extendDataFormInfo.value(fd_detail1.0.fd_goodsqty)'
];
var out = {};
for (var i = 0; i < keys.length; i++) { out[keys[i]] = getVal(keys[i]); }
var bg = document.querySelector('textarea[name="extendDataFormInfo.value(fd_desc_info)"]');
out['background'] = bg ? bg.value : '(missing)';
return JSON.stringify(out);
"""
return driver.execute_script(script)
def main():
print("=" * 60)
print("Selenium 合同建单填表验证 (dry_run, 不提交)")
print("=" * 60)
adapter = ApaBrowserAdapter(CONTRACT_URL)
ctx = build_ctx()
print("[1/6] 打开合同系统并登录 ...")
adapter.open_url(CONTRACT_URL)
time.sleep(2)
login_contract_system(adapter, ctx)
print(" [OK] 登录成功")
print("[2/6] 进入合同起草页 ...")
enter_contract_create(adapter)
print(" [OK] 已进入模板选择页")
print("[3/6] 选择模板 ...")
select_contract_template(adapter, ctx)
time.sleep(2)
print(" [OK] 模板已选择")
print("[4/6] 填写签约方 + 基础信息 ...")
fill_contract_signatory_info(adapter, ctx)
fill_contract_basic_info(adapter, ctx)
print(" [OK] 已填写")
print("[5/6] 填写金额日期 + 货品 + 付款 ...")
fill_contract_amount_and_dates(adapter, ctx)
fill_contract_goods_lines(adapter, ctx)
fill_contract_payment_info(adapter, ctx)
print(" [OK] 已填写")
print("[6/6] 回读校验 ...")
time.sleep(1)
values = read_values(adapter._driver)
print(" 回读值:")
import json
for k, v in json.loads(values).items():
print(f" {k} = {v}")
# 校验关键字段
expected = {
"extendDataFormInfo.value(fd_customeropcode)": "DW0100046361",
"extendDataFormInfo.value(fd_customername)": "重庆亿昊药业有限公司",
"extendDataFormInfo.value(fd_contract_cate_type)": "采购协议",
"fdAccount": "50000.00",
"fdSigndate": "2026-08-12",
"fdEnddate": "2026-12-31",
"extendDataFormInfo.value(fd_paytype)": "账期支付",
"extendDataFormInfo.value(fd_pay_time_limit)": "30",
"extendDataFormInfo.value(fd_detail1.0.fd_goodsqty)": "10",
}
actual = json.loads(values)
all_ok = True
for k, v in expected.items():
got = actual.get(k, "")
status = "OK" if str(got) == str(v) else "MISMATCH"
if status != "OK":
all_ok = False
print(f" [{status}] {k}: 期望={v} 实际={got}")
print("=" * 60)
print("验证结果:", "全部通过" if all_ok else "存在不匹配,请检查")
print("=" * 60)
print("浏览器保持打开(detach),可人工核对。")
sys.exit(0 if all_ok else 1)
if __name__ == "__main__":
main()