""" 测试脚本:尝试在 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()