TestCafe-在useRole完全完成之前执行的测试

问题描述 投票:0回答:1

TestCafe 1.8.0,Firefox 76.0(任何人都可以),macOS 10.15.4。

我的T​​estCafe测试(在useRole之后的步骤)甚至在useRole尚未完全完成之前仍在尝试执行。示例:

import { Role } from 'testcafe';

const role = Role('http://example.com/login', async t => {
    await t
        .typeText('#login', 'username')
        .typeText('#password', 'password')
        .click('#sign-in'); // Redirects to http://example.com/session
});

fixture `My Fixture`;

test('My test', async t => {
    await t
        .navigateTo('http://example.com/')
        .useRole(role);
        .click()
        .typeText('#search', 'query')
        // Further tests.
        ....... 
  1. 正在使用角色->用户被重定向到:最后是http://example.com/session
  2. 一旦角色执行完成-> TestCafe返回My test 并且它再次重新加载http://example.com/

这是一个巨大的问题,因为在此页面之间重新加载了片刻的时间,并且'TestCafe正在快速工作.click()。现在页面重新加载,因此测试执行停止。页面加载后,测试制动器会刹车,因为它试图在没有.typeText(...)的情况下尝试.click()

尝试此解决方案:

  1. 等待直到只有第一次工作。第二次使用useRole(从缓存)的代码将在第二次重新加载页面之前执行。 .expect(getUrl()).eql('desiredurl', { timeout: 10000 })
  2. 众所周知,.wait(3000)或减慢测试.setTestSpeed(0.7)都可以,但是从代码角度来看,这不是一个好的解决方案。测试仍然可能会不时失败,因此我需要并希望稳定性。
  3. 使用{ preserveUrl: true },它只会重新加载http://example.com/session,因此,使用此选项并不重要。重新加载仍在发生。

有什么想法吗?如何让我的测试知道等待完全相同的页面重新加载,而无需使用任何硬编码的等待和代码睡眠?

javascript testing automated-tests e2e-testing testcafe
1个回答
0
投票

据我了解,主要问题是出于某些原因在错误的页面上执行了click操作。它不会等到页面完全重新加载。此行为是意外的。如果您创建可重现的样本,我们将不胜感激。

我同意使用waitsetTestSpeed是不合适的解决方案。

[我看到您尝试使用断言:.expect(getUrl()).eql('desiredurl', { timeout: 10000 })。我认为这种方法应该可行,但是我不能确定,因为我无法重现该问题。

您可以使用preserveUrl: true定义您的角色。然后,提取useRole方法,如下所示:

async function useRole (t, role) {
    await t.useRole(role);

    await t.expect(getUrl()).eql('http://example.com/session', {timeout: 10000 });
}

现在,您可以使用新的useRole(t, role)方法,该方法将等待页面完全加载。

© www.soinside.com 2019 - 2024. All rights reserved.