提交 834df1d9 authored 作者: 陈泽健's avatar 陈泽健

fix(smart-locate): 自动修正 fill 步骤的 value 值

智能定位自动从步骤名称中提取正确的 value:
- "输入账号:admin@xty" -> value="admin@xty"
- "输入密码:Ubains@13579" -> value="Ubains@13579"
支持中文冒号和普通冒号格式
Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
上级 311403f6
...@@ -140,6 +140,9 @@ def extract_value_from_description(description: str) -> Optional[str]: ...@@ -140,6 +140,9 @@ def extract_value_from_description(description: str) -> Optional[str]:
从步骤描述中提取操作值 从步骤描述中提取操作值
例如:"输入用户名 admin@xty" -> "admin@xty" 例如:"输入用户名 admin@xty" -> "admin@xty"
例如:"输入账号:admin@xty" -> "admin@xty"
例如:"输入密码:Ubains@13579" -> "Ubains@13579"
例如:"输入参考价值:100" -> "100"
Args: Args:
description (str): 步骤描述 description (str): 步骤描述
...@@ -147,13 +150,19 @@ def extract_value_from_description(description: str) -> Optional[str]: ...@@ -147,13 +150,19 @@ def extract_value_from_description(description: str) -> Optional[str]:
Returns: Returns:
Optional[str]: 提取的值,未找到返回 None Optional[str]: 提取的值,未找到返回 None
""" """
# 匹配模式:动作 + 目标 + 空格 + 值 # 匹配模式1:动作 + 目标 + 冒号 + 值(中文冒号)
# 例如:"输入用户名 admin@xty" # 例如:"输入账号:admin@xty" -> "admin@xty"
match = re.search(r'(?:输入|填写|填入|键入|写入)\s*[^::]*[::]\s*([\w@.\-]+)\s*$', description)
if match:
return match.group(1)
# 匹配模式2:动作 + 目标 + 空格 + 值
# 例如:"输入用户名 admin@xty" -> "admin@xty"
match = re.search(r'(?:输入|填写|填入|键入|写入)\s*.*?\s+([\w@.\-]+)\s*$', description) match = re.search(r'(?:输入|填写|填入|键入|写入)\s*.*?\s+([\w@.\-]+)\s*$', description)
if match: if match:
return match.group(1) return match.group(1)
# 匹配模式:值在引号中 # 匹配模式3:值在引号中
match = re.search(r'["\']([^"\']+)["\']', description) match = re.search(r'["\']([^"\']+)["\']', description)
if match: if match:
return match.group(1) return match.group(1)
......
...@@ -403,6 +403,15 @@ class SmartLocateService: ...@@ -403,6 +403,15 @@ class SmartLocateService:
if result['success'] and result['selectors'].get('primary'): if result['success'] and result['selectors'].get('primary'):
result['params']['selector'] = result['selectors']['primary'] result['params']['selector'] = result['selectors']['primary']
# ⚠️ 自动修正 fill 步骤的 value
if action == 'fill' and result['success']:
current_value = result['params'].get('value', '')
# 从步骤名称中提取正确的 value
extracted_value = extract_value_from_description(name)
if extracted_value and extracted_value != current_value:
logger.info(f"步骤 {order} 自动修正 value: '{current_value}' -> '{extracted_value}'")
result['params']['value'] = extracted_value
# 截图 # 截图
try: try:
screenshot_path = os.path.join( screenshot_path = os.path.join(
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论