Search code examples
testingautomated-testse2e-testingtestcafeweb-testing

Restart fixture when it fails


I wrote a test that passes 95% of the time, failing the other 5%. I still don't know why it fails (my guess is that components are not rendered correctly).

I implemented a page reload call to reload the page and try again, but it's not very reliable.

What's the best way to restart the fixture in case it fails?

Here's a sample test that intentionally fails to emulate my selector that works most of the time, but fails sometimes.

import { Selector } from 'testcafe';

const URL = 'https://www.youtube.com/watch?v=RWQtB6Xv01Q';

fixture `Portal Experience playback`
  .page `${URL}`;

test('Testing YouTube', async t => {
  await t.click(Selector('.wrong-selector')); // to emulate my unstable test
});

Results in

✖ Testing YouTube

   1) The specified selector does not match any element in the DOM tree.

Is it possible to put the test in a for loop and have it break out of the loop in case the test passes?


Solution

  • The quarantine mode serves this purpose. In this mode, TestCafe will restart a failed test again until it passes or fails 3 times and will consider it failed only if it fails 3 times. Get more details about the quarantine mode in this article: Quarantine Mode.