54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
from framework.core.base_ui import BaseUI
|
||
from framework.config.settings import Config
|
||
from framework.core.logger import get_logger
|
||
import time
|
||
|
||
logger = get_logger("LoginPage")
|
||
|
||
class LoginPage(BaseUI):
|
||
# --- 元素定位器 ---
|
||
USERNAME_INPUT = "input[placeholder*='账号'], #account"
|
||
PASSWORD_INPUT = "input[placeholder*='密码'], #password"
|
||
LOGIN_BUTTON = "button.loginBtn"
|
||
|
||
SUCCESS_INDICATOR = ".ant-layout-sider, .user-name"
|
||
|
||
def __init__(self, headless=False):
|
||
super().__init__(headless=headless)
|
||
|
||
def login(self, username, password):
|
||
"""执行登录流程"""
|
||
# 直接使用 Config.LOGIN_URL
|
||
login_url = Config.LOGIN_URL
|
||
self.navigate(login_url)
|
||
|
||
logger.info("等待登录页面加载...")
|
||
self.wait_for_selector(self.USERNAME_INPUT)
|
||
|
||
self.fill(self.USERNAME_INPUT, username)
|
||
self.fill(self.PASSWORD_INPUT, password)
|
||
|
||
logger.info("正在点击登录按钮...")
|
||
time.sleep(1)
|
||
self.click(self.LOGIN_BUTTON)
|
||
|
||
logger.info("登录请求已发送,等待进入系统...")
|
||
try:
|
||
# 1. 强制等待关键 UI 元素出现 (证明已经跳过 SSO 到了主页)
|
||
self.page.wait_for_selector(self.SUCCESS_INDICATOR, timeout=10000)
|
||
|
||
# 2. 二次确认 URL 是否已经离开 SSO,回到业务主域名
|
||
if "robogo-fat" in self.page.url:
|
||
logger.info(f"🎉 登录流程圆满成功!进入主系统 URL: {self.page.url}")
|
||
return True
|
||
except Exception as e:
|
||
logger.warning(f"等待主站 UI 加载超时 (可能是 SSO 跳转慢): {e}")
|
||
|
||
# 兜底:如果还是在 login 或 sso 页面则失败
|
||
if "/login" in self.page.url or "sso" in self.page.url:
|
||
self.page.screenshot(path="login_failed.png")
|
||
logger.error(f"❌ 登录认证失败,目前停留在: {self.page.url}")
|
||
return False
|
||
|
||
return True
|