You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cypress自动化时点击链接后网站意外登出问题求助

问题场景

使用Cypress对https://admin.britex.pw/进行自动化测试时,执行多个it块后,触发cy.get('table#table tbody tr').first().find('td').eq(2).find('a').click()命令会导致网站意外登出,但手动操作无此问题。已设置testIsolation:false,跳过该点击命令则测试流程正常。

排查与解决方案

1. 验证目标标签的实际跳转地址

先确认点击的链接是否误指向登出页面,排除元素定位错误:

cy.get('table#table tbody tr').first().find('td').eq(2).find('a')
  .invoke('attr', 'href')
  .then(href => {
    cy.log('目标链接地址:', href);
    // 验证地址是否符合预期,排除登出路径
    expect(href).not.to.include('/logout');
  });

2. 优化元素定位逻辑,避免DOM重查询问题

原代码在then回调中重新查询DOM元素,可能因页面状态变化导致定位到错误元素。建议用别名缓存目标行,减少重复查询:

it('Selecting user to create a custom invoice', () => {
    cy.get('.form-control#validationDefaultUsername')
        .should('be.visible')
        .clear()
        .type('muhammadafnan.senarios@gmail.com');

    cy.get('li>.searchEmail').click({ force: true });
    cy.wait(3000);

    // 缓存目标行元素
    cy.get('table#table tbody tr').first().as('targetUserRow');
    
    cy.get('@targetUserRow').invoke('text').then((value) => {
        cy.log('目标行内容:', value);
        // 使用缓存的元素执行点击操作
        cy.get('@targetUserRow').find('td').eq(2).find('a').click();
        cy.wait(5000);
    });
});

3. 用cy.session管理登录状态(官方推荐)

虽然设置了testIsolation:false,但跨it块的会话保持仍可能不稳定。改用cy.session持久化登录状态,确保各测试块间会话一致:

describe('', () => {
    before(() => {
        Cypress.on('uncaught:exception', (err, runnable) => {
            return false;
        });

        // 用cy.session封装登录逻辑,持久化会话
        cy.session('admin-login', () => {
            cy.visit("https://admin.britex.pw", { failOnStatusCode: false });
            cy.loginAdmin('gulraiz@gmail.com', '12345678');
        }, {
            // 配置会话验证规则,确保登录状态有效
            validate() {
                cy.visit("https://admin.britex.pw");
                cy.get('.custom-select[name="company"]').should('be.visible');
            }
        });
    });

    it('Selecting Teltik Test as Company', () => {
        cy.visit("https://admin.britex.pw");
        cy.get('.custom-select[name="company"]').select('1');
        cy.wait(2000);
        cy.get('.swal-button').click();
        cy.wait(6300);
    });

    // 其余测试块保持逻辑不变,无需重复登录
});

4. 检查点击事件的前端逻辑

手动操作正常但Cypress触发异常,可能是前端事件绑定存在差异:

5. 禁用不必要的缓存清理

原before钩子中清理了所有缓存,但cy.session会自动管理会话,可移除冗余的清理命令:

before(() => {
    Cypress.on('uncaught:exception', (err, runnable) => {
        return false;
    });
    // 移除以下清理命令,避免影响会话持久化
    // cy.clearCookies();
    // cy.clearLocalStorage();
    // cy.clearAllSessionStorage();
});

内容的提问来源于stack exchange,提问作者Muhammad Afnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:57:41