123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- import { mockI18nSuccess, mockAllRequiredAPIs } from '../../support/mock/handlers/i18n';
- import { mockLoginSuccess, mockLoginFail } from '../../support/mock/handlers/user';
- import LoginPage from '../../support/pageObjects/LoginPage';
- describe('Login Page - I18n Display Test', () => {
- const loginPage = new LoginPage();
- beforeEach(() => {
- cy.clearAllSessionStorage();
- cy.clearAllLocalStorage();
- mockAllRequiredAPIs();
- });
- describe('中文显示测试', () => {
- it('应该正确显示中文登录页面', () => {
- // Mock 中文多语言资源
- mockI18nSuccess('zh_CN');
- mockAllRequiredAPIs('zh_CN');
- // 设置浏览器语言为中文
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'zh-CN',
- writable: false
- });
- });
- // 访问登录页面
- loginPage.visit();
- // 等待多语言资源加载完成
- cy.wait('@getI18nZH_CNSuccess');
- // 验证所有文本元素显示为中文
- loginPage.verifyLanguage('zh');
- // 验证输入框占位符为中文
- loginPage.verifyPlaceholders('zh');
- // 验证页面上所有中文文本存在
- cy.get('body').should('contain', '用户名');
- cy.get('body').should('contain', '密码');
- cy.get('body').should('contain', '登录');
- cy.get('body').should('contain', '急诊');
- });
- it('应该显示中文的表单验证消息', () => {
- mockI18nSuccess('zh_CN');
- mockAllRequiredAPIs('zh_CN');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'zh-CN',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nZH_CNSuccess');
- // 不输入任何内容,直接点击登录按钮
- loginPage.getLoginButton().click();
- // 验证中文验证消息显示
- cy.contains('请输入用户名').should('be.visible');
- });
- it('应该显示中文的登录成功消息', () => {
- mockI18nSuccess('zh_CN');
- mockAllRequiredAPIs('zh_CN');
- mockLoginSuccess();
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'zh-CN',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nZH_CNSuccess');
- // 执行登录
- loginPage.login('admin', '123456');
- cy.wait('@loginSuccess');
- // 验证中文成功消息
- cy.contains('登录成功').should('be.visible', { timeout: 10000 });
- });
- it('应该显示中文的登录失败消息', () => {
- mockI18nSuccess('zh_CN');
- mockAllRequiredAPIs('zh_CN');
- mockLoginFail();
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'zh-CN',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nZH_CNSuccess');
- // 执行登录
- loginPage.login('wronguser', 'wrongpassword');
- cy.wait('@loginFail');
- // 验证中文失败消息
- cy.contains('登录失败').should('be.visible', { timeout: 10000 });
- });
- });
- describe('英文显示测试', () => {
- it('应该正确显示英文登录页面', () => {
- // Mock 英文多语言资源
- mockI18nSuccess('en_US');
- mockAllRequiredAPIs('en_US');
- // 设置浏览器语言为英文
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'en-US',
- writable: false
- });
- });
- // 访问登录页面
- loginPage.visit();
- // 等待多语言资源加载完成
- cy.wait('@getI18nEN_USSuccess');
- // 验证所有文本元素显示为英文
- loginPage.verifyLanguage('en');
- // 验证输入框占位符为英文
- loginPage.verifyPlaceholders('en');
- // 验证页面上所有英文文本存在
- cy.get('body').should('contain', 'Username');
- cy.get('body').should('contain', 'Password');
- cy.get('body').should('contain', 'Login');
- cy.get('body').should('contain', 'Emergency');
- });
- it('应该显示英文的表单验证消息', () => {
- mockI18nSuccess('en_US');
- mockAllRequiredAPIs('en_US');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'en-US',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nEN_USSuccess');
- // 不输入任何内容,直接点击登录按钮
- loginPage.getLoginButton().click();
- // 验证英文验证消息显示
- cy.contains('Please enter username').should('be.visible');
- });
- it('应该显示英文的登录成功消息', () => {
- mockI18nSuccess('en_US');
- mockAllRequiredAPIs('en_US');
- mockLoginSuccess();
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'en-US',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nEN_USSuccess');
- // 执行登录
- loginPage.login('admin', '123456');
- cy.wait('@loginSuccess');
- // 验证英文成功消息
- cy.contains('Login successful').should('be.visible', { timeout: 10000 });
- });
- it('应该显示英文的登录失败消息', () => {
- mockI18nSuccess('en_US');
- mockAllRequiredAPIs('en_US');
- mockLoginFail();
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'en-US',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nEN_USSuccess');
- // 执行登录
- loginPage.login('wronguser', 'wrongpassword');
- cy.wait('@loginFail');
- // 验证英文失败消息
- cy.contains('Login failed').should('be.visible', { timeout: 10000 });
- });
- });
- describe('语言切换测试', () => {
- it('应该能从中文切换到英文', () => {
- // 首先加载中文
- mockI18nSuccess('zh_CN');
- mockAllRequiredAPIs('zh_CN');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'zh-CN',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nZH_CNSuccess');
- // 验证中文显示
- loginPage.verifyLanguage('zh');
- // 切换到英文
- mockI18nSuccess('en_US');
- mockAllRequiredAPIs('en_US');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'en-US',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nEN_USSuccess');
- // 验证英文显示
- loginPage.verifyLanguage('en');
- });
- it('应该能从英文切换到中文', () => {
- // 首先加载英文
- mockI18nSuccess('en_US');
- mockAllRequiredAPIs('en_US');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'en-US',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nEN_USSuccess');
- // 验证英文显示
- loginPage.verifyLanguage('en');
- // 切换到中文
- mockI18nSuccess('zh_CN');
- mockAllRequiredAPIs('zh_CN');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'zh-CN',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nZH_CNSuccess');
- // 验证中文显示
- loginPage.verifyLanguage('zh');
- });
- });
- describe('Redux 状态验证', () => {
- it('中文模式下 Redux 状态应该正确', () => {
- mockI18nSuccess('zh_CN');
- mockAllRequiredAPIs('zh_CN');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'zh-CN',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nZH_CNSuccess');
- // 验证 Redux 状态
- cy.window().its('store').invoke('getState').then((state) => {
- expect(state.i18n.currentLocale).to.equal('zh_CN');
- expect(state.i18n.loading).to.be.false;
- expect(state.i18n.error).to.be.null;
- expect(state.i18n.messages).to.have.property('login.username', '用户名');
- expect(state.i18n.messages).to.have.property('login.password', '密码');
- expect(state.i18n.messages).to.have.property('login.submit', '登录');
- expect(state.i18n.messages).to.have.property('login.emergency', '急诊');
- });
- });
- it('英文模式下 Redux 状态应该正确', () => {
- mockI18nSuccess('en_US');
- mockAllRequiredAPIs('en_US');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'en-US',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nEN_USSuccess');
- // 验证 Redux 状态
- cy.window().its('store').invoke('getState').then((state) => {
- expect(state.i18n.currentLocale).to.equal('en_US');
- expect(state.i18n.loading).to.be.false;
- expect(state.i18n.error).to.be.null;
- expect(state.i18n.messages).to.have.property('login.username', 'Username');
- expect(state.i18n.messages).to.have.property('login.password', 'Password');
- expect(state.i18n.messages).to.have.property('login.submit', 'Login');
- expect(state.i18n.messages).to.have.property('login.emergency', 'Emergency');
- });
- });
- });
- describe('视觉验证(手动查看)', () => {
- it('[视觉] 中文登录页面完整显示', () => {
- mockI18nSuccess('zh_CN');
- mockAllRequiredAPIs('zh_CN');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'zh-CN',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nZH_CNSuccess');
- // 等待页面完全加载
- loginPage.getUsernameInput().should('be.visible');
- loginPage.getPasswordInput().should('be.visible');
- loginPage.getLoginButton().should('be.visible');
- loginPage.getEmergencyButton().should('be.visible');
- // 添加等待时间供手动查看
- cy.wait(500);
- });
- it('[视觉] 英文登录页面完整显示', () => {
- mockI18nSuccess('en_US');
- mockAllRequiredAPIs('en_US');
- cy.window().then((win) => {
- Object.defineProperty(win.navigator, 'language', {
- value: 'en-US',
- writable: false
- });
- });
- loginPage.visit();
- cy.wait('@getI18nEN_USSuccess');
- // 等待页面完全加载
- loginPage.getUsernameInput().should('be.visible');
- loginPage.getPasswordInput().should('be.visible');
- loginPage.getLoginButton().should('be.visible');
- loginPage.getEmergencyButton().should('be.visible');
- // 添加等待时间供手动查看
- cy.wait(500);
- });
- });
- });
|