message: Retry the before() block in browser.ts 3 times on error.
diff: @@ -170,15 +170,24 @@ function runsIntegrationSuite(
  describer = describe.skip;
  }
  describer(suiteName, function() {
  - const log: string[] = [];
  - const testResults = new TestResults();
  + let log: string[] = [];
  + let testResults: TestResults = new TestResults();
  before(async function() {
  + const maxRetries = 3;
  + let tryNumber = 0;
  + let successful = false;
  + while (tryNumber < maxRetries && !successful) {
  + try {
  + if (tryNumber !== 0) {
  + log = []
  + testResults = new TestResults();
  + }
  const suiteRoot = await makeProperTestDir(dirName);
  const suiteOptions = <any>loadOptionsFile(
  path.join('test', 'fixtures', 'integration', dirName));
  - // Filter the list of browsers within the suite's options by the global
  - // overrides if they are present.
  + // Filter the list of browsers within the suite's options by the
  + // global overrides if they are present.
  if (suiteOptions.plugins !== undefined) {
  if (testLocalBrowsersList.length > 0 &&
  !testLocalBrowsersList.includes('default') &&
  @@ -214,7 +223,8 @@ function runsIntegrationSuite(
  try {
  handler.apply(null, arguments);
  } catch (error) {
  - console.error(`Error inside ${name} handler in integration tests:`);
  + console.error(
  + `Error inside ${name} handler in integration tests:`);
  console.error(error.stack);
  }
  });
  @@ -246,7 +256,8 @@ function runsIntegrationSuite(
  });
  addEventHandler(
  - 'browser-end', (browserDef: BrowserDef, error: any, stats: Stats) => {
  + 'browser-end',
  + (browserDef: BrowserDef, error: any, stats: Stats) => {
  const variantResults =
  testResults.getVariantResults(browserDef.variant || '');
  const browserName = getBrowserName(browserDef);
  @@ -264,6 +275,14 @@ function runsIntegrationSuite(
  } catch (error) {
  testResults.testRunnerError = error.message;
  }
  + successful = true;
  + } catch (error) {
  + ++tryNumber;
  + if (tryNumber === maxRetries) {
  + throw error;
  + }
  + }
  + }
  });
  afterEach(function() {
  