登录后重定向逻辑不适用于 TestCafe 角色

如何解决登录后重定向逻辑不适用于 TestCafe 角色

我正在为 React SPA 编写 e2e 测试。我的登录逻辑如下:

  1. 如果用户在未登录的情况下访问受保护的路由,该路由将保存在 localStorage (post_login_redirect) 中,然后用户将被重定向登录页面
  2. 登录成功后,如果localStorage中存在post_login_redirect,则重定向到保存的路由,否则重定向到home(/)。

在我的测试中,我在每个钩子之前的夹具中调用了 useRole。见下文:

const adminUser = Role(
  `http://myapp.com/login`,async t => {
    await t
      .typeText('input[name="username"]',"admin@admin.com")
      .typeText('input[name="password"]',"12345")
      .click('button[type="submit"]');
  }
);

fixture("Some fixture").page("http://myapp.com/companies/").beforeEach(async t => {
  await t.useRole(adminUser);
});

test("Company list",async t => {
  await t.expect(Selector("div").withText("COMPANY LIST").exists).ok();
});

运行此测试时会发生什么:

  1. testcafe 导航到 /companies
  2. 我的应用代码检测到用户登录,创建 post_login_redirect重定向/login
  3. testcafe 通过导航到 /login 并提交表单来执行我的角色
  4. 我的应用代码用户重定向/(而不是保存在 localStorage 中的预期 /companies/
  5. testcafe 导航到 /login

据我所知,在第 3 步,localStorage 正在被清除,这解释了第 4 步。

如果我对我的角色使用 preserveUrl:true,则不会执行第 5 步。无论如何它应该导航到 /companies,因为它是我的装置定义的 URL。

我希望在 Role 执行后恢复第 2 步中的 localStorage,或者 testcafe 记住它在 Role 执行后需要导航到的实际 URL。

感谢您的帮助。

解决方法

您的测试似乎是正确的,TestCafe 应该可以使用它。使用 Roles 机制应该不会清除 localStorage,因此您的 post_login_redirect 值被清除是意料之外的。

我们愿意协助您研究该问题。请使用以下链接在 GitHub 上创建一个单独的问题并共享您的项目或创建一个演示该问题的最小示例:https://github.com/DevExpress/testcafe/issues/new?assignees=&labels=&template=bug-report.md

如果您无法在 GitHub 上共享您的项目,可以将其发送至 support@devexpress.com

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?