48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
from playwright.sync_api import Page
|
||
|
||
from zhyy.test_case.Resource.UI.base_page import BasePage
|
||
|
||
|
||
class LoginPage(BasePage):
|
||
"""
|
||
登录页对象。
|
||
|
||
注意:
|
||
当前用例未提供登录页侦察结果,因此以下 selector 使用 TODO 占位。
|
||
落地执行前请通过页面侦察补充真实 selector。
|
||
"""
|
||
|
||
USERNAME_INPUT = "TODO_LOGIN_USERNAME_INPUT_SELECTOR"
|
||
PASSWORD_INPUT = "TODO_LOGIN_PASSWORD_INPUT_SELECTOR"
|
||
LOGIN_BUTTON = "TODO_LOGIN_BUTTON_SELECTOR"
|
||
|
||
def __init__(self, page: Page):
|
||
super().__init__(page)
|
||
|
||
def is_login_page(self) -> bool:
|
||
"""
|
||
判断当前是否处于登录页。
|
||
由于缺少真实登录页 selector,这里通过 TODO selector 判断。
|
||
若系统已通过 SSO 或已有登录态直接进入业务页,可返回 False。
|
||
"""
|
||
if "TODO" in self.USERNAME_INPUT:
|
||
# 未补充登录页定位时,不主动执行登录,避免误判。
|
||
return False
|
||
|
||
try:
|
||
return self.page.locator(self.USERNAME_INPUT).first.is_visible(timeout=3_000)
|
||
except Exception:
|
||
return False
|
||
|
||
def login_if_needed(self, username: str, password: str):
|
||
"""
|
||
如当前页面需要登录,则执行登录。
|
||
"""
|
||
if not self.is_login_page():
|
||
return
|
||
|
||
self.fill(self.USERNAME_INPUT, username)
|
||
self.fill(self.PASSWORD_INPUT, password)
|
||
self.click(self.LOGIN_BUTTON)
|
||
self.wait_for_network_idle()
|