Files
datie-bom/browser_login/test_fill_date.py

92 lines
3.5 KiB
Python

"""
测试脚本:尝试在 ERP 质量报表页面填写“下单日期(开始)”
目标: 验证 DrissionPage 是否能成功清除并输入 ElementUI 的日期选择器。
"""
import sys
import time
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from login import get_page, log
HOME_URL = "https://yunmes.tftykj.cn/"
def test_fill_date():
log("INFO", "=== 🧪 启动日期输入框填写测试 ===")
page = get_page(port=9222)
try:
log("INFO", f"正在回到主页起点: {HOME_URL}")
page.get(HOME_URL)
page.wait.load_start()
time.sleep(2)
menus = [
("进入质量报表", 'xpath://*[@id="el-collapse-content-21"]/div/div/div/div[1]/div/div/div[6]/div')
]
log("INFO", "开始模拟人工点击左侧导航菜单...")
for name, xpath in menus:
ele = page.ele(xpath, timeout=5)
if ele:
try: ele.click()
except: page.run_js("arguments[0].click();", ele)
else:
log("ERR", f"找不到菜单元素: {name}")
return
log("OK", "✅ 成功点开质量报表界面!")
# 等待页面稍微加载一下
time.sleep(2)
# 尝试寻找并填写下单日期(开始)
date_xpath = 'xpath://*[@id="customTable-search-area"]/div[1]/div/div[2]/div[11]/div[2]/span/input[1]'
log("INFO", f"正在寻找日期输入框: {date_xpath}")
date_input = page.ele(date_xpath, timeout=5)
if date_input:
log("INFO", "✅ 找到输入框!尝试清除并输入 '2026-05-01'...")
# ElementUI 的日期输入框比较难搞,通常需要组合拳
# 放弃在 UI 层面折腾这个顽固的日期选择器
# 我们采用“黑客”做法:直接在浏览器底层拦截并篡改即将发出的网络请求数据包!
API_TARGET = "SearchCustomReportBySQL_Proxy"
# 1. 设置请求拦截器
log("INFO", f"正在开启全局请求拦截器,目标: {API_TARGET}")
page.listen.start(API_TARGET)
# 2. 我们不需要在输入框里填东西了,直接去点击查询按钮
query_btn_xpath = 'xpath://*[@id="customTable-search-area"]/div[1]/div/div[1]/a[2]/span/span'
query_btn = page.ele(query_btn_xpath, timeout=3)
if query_btn:
log("INFO", "准备点击【查询】按钮触发网络请求...")
try:
query_btn.click()
except:
page.run_js("arguments[0].click();", query_btn)
# 3. 拦截请求
packet = page.listen.wait(timeout=10)
if packet:
log("OK", "✅ 成功拦截到了查询请求!")
# 打印一下它原来发送的数据体,看看结构
raw_post_data = packet.request.postData
log("INFO", "原始发送的数据截断前100字符: " + str(raw_post_data)[:100])
log("OK", "如果这种拦截思路可行,我们下一步就可以在发送前篡改它里面的日期参数!")
else:
log("ERR", "未能拦截到查询请求,可能超时。")
else:
log("ERR", "未找到【查询】按钮。")
except Exception as e:
log("ERR", f"发生异常: {e}")
if __name__ == "__main__":
test_fill_date()