generateAction()

in src/formatter/javascript.ts [185:243]


  generateAction(actionInContext: ActionInContext) {
    const { action } = actionInContext;
    const { pageAlias } = actionInContext.frame;
    if (action.name === 'openPage') {
      return '';
    }

    // Don't cleanup page object managed by Synthetics
    const isCleanUp = action.name === 'closePage' && pageAlias === 'page';
    if (isCleanUp) {
      return '';
    }

    const stepIndent = this.insideStep ? 2 : 0;
    const offset = this.isProject ? 2 + stepIndent : 0 + stepIndent;
    const formatter = new JavaScriptFormatter(offset);

    const locators = actionInContext.frame.framePath.map(
      selector => `.${super._asLocator(selector)}.contentFrame()`
    );
    const subject = `${pageAlias}${locators.join('')}`;
    const signals = toSignalMap(action);

    if (signals.dialog) {
      formatter.add(`  ${pageAlias}.once('dialog', dialog => {
    console.log(\`Dialog message: $\{dialog.message()}\`);
    dialog.dismiss().catch(() => {});
  });`);
    }

    if (signals.popup)
      formatter.add(
        `const ${signals.popup.popupAlias}Promise = ${pageAlias}.waitForEvent('popup');`
      );
    if (signals.download)
      formatter.add(
        `const download${signals.download.downloadAlias}Promise = ${pageAlias}.waitForEvent('download');`
      );

    // Add assertion from Synthetics.
    const isAssert = action.name === 'assert' && action.isAssert;
    if (isAssert && action.command) {
      formatter.add(toAssertCall(pageAlias, action));
    } else {
      formatter.add(super._generateActionCall(subject, actionInContext));
    }

    if (signals.popup)
      formatter.add(
        `${signals.popup.popupAlias} = await ${signals.popup.popupAlias}Promise;`
      );
    if (signals.download)
      formatter.add(
        `download${signals.download.downloadAlias} = await download${signals.download.downloadAlias}Promise;`
      );

    this.previousContext = actionInContext;
    return formatter.format();
  }