85 lines
3.2 KiB
JavaScript
85 lines
3.2 KiB
JavaScript
/**
|
|
* 龙蛟IBP系统登录页面对象模型
|
|
*/
|
|
const BasePage = require('../utils/BasePage');
|
|
const { getEnv } = require('../utils/env');
|
|
|
|
class LongiLoginPage extends BasePage {
|
|
|
|
constructor(page) {
|
|
super(page);
|
|
|
|
// 页面元素选择器
|
|
this.selectors = {
|
|
usernameInput: 'input[name="username"]', // 用户名输入框
|
|
passwordInput: 'input[name="passWord"]', // 密码输入框
|
|
captchaInput: 'input[placeholder*="验证码"]', // 验证码输入框
|
|
captchaImage: 'img[style*="width: 78px"]', // 验证码图片
|
|
loginButton: 'button.el-button--large.container-button', // 登录按钮
|
|
loginButtonByText: 'button:text("登录"):not(:text("SSO登录"))', // 通过文本定位登录按钮
|
|
loginButtonFirst: 'button:has-text("登录")', // 通过文本定位登录按钮(使用first()方法)
|
|
errorMessage: '.el-form-item__error, .el-form-item.is-error', // 错误消息
|
|
ssoLoginButton: 'button:has-text("SSO登录")' // SSO登录按钮
|
|
};
|
|
|
|
// 设置超时时间
|
|
this.timeout = 10000;
|
|
}
|
|
|
|
/**
|
|
* 导航到登录页面
|
|
*/
|
|
async navigateToLoginPage() {
|
|
console.log('当前使用的 BASE_URL:', process.env.BASE_URL);
|
|
await this.navigate(process.env.BASE_URL);
|
|
}
|
|
|
|
|
|
/**
|
|
* 点击登录按钮
|
|
* @returns {Promise<boolean>} 是否成功点击登录按钮
|
|
*/
|
|
async clickLoginButton() {
|
|
try {
|
|
// 方法1: 使用更精确的选择器,指定包含特定类的按钮
|
|
await this.click(this.selectors.loginButton);
|
|
console.log('使用 container-button 类选择器成功点击登录按钮');
|
|
await this.waitForPageLoad();
|
|
return true;
|
|
} catch (error) {
|
|
console.log('第一种方法失败,尝试备用方法...');
|
|
try {
|
|
// 方法2: 使用精确文本匹配
|
|
await this.page.locator(this.selectors.loginButtonByText).click();
|
|
console.log('使用精确文本匹配成功点击登录按钮');
|
|
await this.waitForPageLoad();
|
|
return true;
|
|
} catch (secondError) {
|
|
console.log('第二种方法也失败,尝试第三种方法...');
|
|
try {
|
|
// 方法3: 使用first()选择第一个匹配的按钮
|
|
await this.page.locator(this.selectors.loginButtonFirst).first().click();
|
|
console.log('使用first()方法成功点击登录按钮');
|
|
await this.waitForPageLoad();
|
|
return true;
|
|
} catch (thirdError) {
|
|
console.error('所有方法都失败,无法点击登录按钮', thirdError);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 检查登录是否成功
|
|
* @returns {Promise<boolean>} 登录是否成功
|
|
*/
|
|
async isLoginSuccessful() {
|
|
// 登录成功后通常会重定向到其他页面
|
|
const currentUrl = await this.getCurrentUrl();
|
|
return currentUrl.includes('/dashboard');
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = LongiLoginPage;
|