@zohodesk/testinglibrary 0.1.8 → 0.1.9-exp-actors

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/.babelrc +3 -0
  2. package/build/bdd-framework/cli/commands/env.js +1 -1
  3. package/build/bdd-framework/config/configDir.js +35 -0
  4. package/build/bdd-framework/config/enrichReporterData.js +23 -0
  5. package/build/bdd-framework/config/index.js +10 -6
  6. package/build/bdd-framework/cucumber/createTestStep.js +43 -0
  7. package/build/bdd-framework/cucumber/formatter/EventDataCollector.js +126 -0
  8. package/build/bdd-framework/cucumber/formatter/GherkinDocumentParser.js +72 -0
  9. package/build/bdd-framework/cucumber/formatter/PickleParser.js +25 -0
  10. package/build/bdd-framework/cucumber/formatter/durationHelpers.js +13 -0
  11. package/build/bdd-framework/cucumber/formatter/getColorFns.js +57 -0
  12. package/build/bdd-framework/cucumber/formatter/index.js +16 -0
  13. package/build/bdd-framework/cucumber/formatter/locationHelpers.js +16 -0
  14. package/build/bdd-framework/cucumber/loadFeatures.js +62 -31
  15. package/build/bdd-framework/cucumber/loadSteps.js +7 -0
  16. package/build/bdd-framework/cucumber/resolveFeaturePaths.js +62 -0
  17. package/build/bdd-framework/cucumber/stepArguments.js +21 -0
  18. package/build/bdd-framework/cucumber/valueChecker.js +23 -0
  19. package/build/bdd-framework/gen/formatter.js +11 -23
  20. package/build/bdd-framework/gen/index.js +41 -20
  21. package/build/bdd-framework/gen/testFile.js +69 -26
  22. package/build/bdd-framework/gen/testMeta.js +60 -0
  23. package/build/bdd-framework/gen/testNode.js +11 -12
  24. package/build/bdd-framework/hooks/scenario.js +29 -6
  25. package/build/bdd-framework/hooks/worker.js +7 -1
  26. package/build/bdd-framework/index.js +8 -1
  27. package/build/bdd-framework/playwright/getLocationInFile.js +36 -9
  28. package/build/bdd-framework/playwright/loadUtils.js +33 -0
  29. package/build/bdd-framework/playwright/transform.js +5 -1
  30. package/build/bdd-framework/reporter/cucumber/base.js +57 -0
  31. package/build/bdd-framework/reporter/cucumber/custom.js +73 -0
  32. package/build/bdd-framework/reporter/cucumber/helper.js +12 -0
  33. package/build/bdd-framework/reporter/cucumber/html.js +35 -0
  34. package/build/bdd-framework/reporter/cucumber/index.js +74 -0
  35. package/build/bdd-framework/reporter/cucumber/json.js +312 -0
  36. package/build/bdd-framework/reporter/cucumber/junit.js +205 -0
  37. package/build/bdd-framework/reporter/cucumber/message.js +20 -0
  38. package/build/bdd-framework/reporter/cucumber/messagesBuilder/AttachmentMapper.js +64 -0
  39. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Builder.js +196 -0
  40. package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocument.js +43 -0
  41. package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocumentClone.js +52 -0
  42. package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocuments.js +105 -0
  43. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Hook.js +70 -0
  44. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Meta.js +45 -0
  45. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Pickles.js +27 -0
  46. package/build/bdd-framework/reporter/cucumber/messagesBuilder/Projects.js +38 -0
  47. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCase.js +128 -0
  48. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCaseRun.js +126 -0
  49. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCaseRunHooks.js +102 -0
  50. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestStepAttachments.js +50 -0
  51. package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestStepRun.js +88 -0
  52. package/build/bdd-framework/reporter/cucumber/messagesBuilder/index.js +30 -0
  53. package/build/bdd-framework/reporter/cucumber/messagesBuilder/pwUtils.js +51 -0
  54. package/build/bdd-framework/reporter/cucumber/messagesBuilder/timing.js +35 -0
  55. package/build/bdd-framework/reporter/cucumber/messagesBuilder/types.js +5 -0
  56. package/build/bdd-framework/run/StepInvoker.js +21 -26
  57. package/build/bdd-framework/run/bddDataAttachment.js +46 -0
  58. package/build/bdd-framework/run/bddFixtures.js +31 -10
  59. package/build/bdd-framework/run/bddWorld.js +5 -2
  60. package/build/bdd-framework/run/bddWorldInternal.js +15 -0
  61. package/build/bdd-framework/snippets/index.js +3 -7
  62. package/build/bdd-framework/stepDefinitions/defineStep.js +1 -1
  63. package/build/bdd-framework/utils/AutofillMap.js +20 -0
  64. package/build/bdd-framework/utils/index.js +23 -0
  65. package/build/bdd-framework/utils/stripAnsiEscapes.js +20 -0
  66. package/build/core/playwright/builtInFixtures/cacheLayer.js +1 -0
  67. package/build/core/playwright/builtInFixtures/context.js +18 -1
  68. package/build/core/playwright/builtInFixtures/i18N.js +33 -0
  69. package/build/core/playwright/builtInFixtures/index.js +17 -1
  70. package/build/core/playwright/builtInFixtures/page.js +87 -39
  71. package/build/core/playwright/builtInFixtures/unauthenticatedPage.js +18 -0
  72. package/build/core/playwright/clear-caches.js +19 -8
  73. package/build/core/playwright/codegen.js +4 -4
  74. package/build/core/playwright/constants/browserTypes.js +12 -0
  75. package/build/core/playwright/custom-commands.js +1 -1
  76. package/build/core/playwright/env-initializer.js +10 -6
  77. package/build/core/playwright/helpers/auth/accountLogin.js +18 -0
  78. package/build/core/playwright/helpers/auth/checkAuthCookies.js +50 -0
  79. package/build/core/playwright/helpers/auth/getUrlOrigin.js +13 -0
  80. package/build/core/playwright/helpers/auth/getUsers.js +111 -0
  81. package/build/core/playwright/helpers/auth/index.js +70 -0
  82. package/build/core/playwright/helpers/auth/loginSteps.js +36 -0
  83. package/build/core/playwright/helpers/configFileNameProvider.js +24 -0
  84. package/build/core/playwright/helpers/getUserFixtures.js +23 -0
  85. package/build/core/playwright/helpers/mergeObjects.js +13 -0
  86. package/build/core/playwright/helpers/parseUserArgs.js +11 -0
  87. package/build/core/playwright/index.js +63 -1
  88. package/build/core/playwright/readConfigFile.js +23 -12
  89. package/build/core/playwright/report-generator.js +7 -7
  90. package/build/core/playwright/setup/config-creator.js +4 -1
  91. package/build/core/playwright/setup/config-utils.js +43 -7
  92. package/build/core/playwright/setup/custom-reporter.js +3 -2
  93. package/build/core/playwright/test-runner.js +20 -10
  94. package/build/core/playwright/types.js +43 -0
  95. package/build/index.d.ts +39 -2
  96. package/build/index.js +60 -11
  97. package/build/lib/cli.js +12 -3
  98. package/build/lib/post-install.js +18 -10
  99. package/build/setup-folder-structure/helper.js +3 -0
  100. package/build/setup-folder-structure/samples/auth-setup-sample.js +20 -21
  101. package/build/utils/cliArgsToObject.js +5 -1
  102. package/build/utils/fileUtils.js +3 -0
  103. package/build/utils/rootPath.js +16 -9
  104. package/changelog.md +13 -0
  105. package/npm-shrinkwrap.json +18 -12
  106. package/package.json +6 -4
  107. package/build/bdd-framework/config/dir.js +0 -27
  108. package/build/bdd-framework/cucumber/loadSources.js +0 -57
  109. /package/build/bdd-framework/cucumber/{gherkin.d.js → types.js} +0 -0
@@ -10,15 +10,15 @@ var _path = _interopRequireDefault(require("path"));
10
10
  var _logger = require("../../utils/logger");
11
11
  var _rootPath = require("../../utils/rootPath");
12
12
  var _readConfigFile = require("./readConfigFile");
13
- const userArgs = process.argv.slice(3);
14
- const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
15
- const command = playwrightPath;
16
- const {
17
- reportPath: htmlPath
18
- } = (0, _readConfigFile.generateConfigFromFile)();
19
- const args = ['show-report', htmlPath].concat(userArgs);
20
13
  async function generateReport() {
21
14
  // await preProcessReport()
15
+ const userArgs = process.argv.slice(3);
16
+ const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
17
+ const command = playwrightPath;
18
+ const {
19
+ reportPath: htmlPath
20
+ } = (0, _readConfigFile.generateConfigFromFile)();
21
+ const args = ['show-report', htmlPath].concat(userArgs);
22
22
  const childProcess = (0, _child_process.spawn)(command, args, {
23
23
  stdio: 'inherit'
24
24
  });
@@ -9,6 +9,8 @@ var _test = require("@playwright/test");
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
  var _readConfigFile = require("../readConfigFile");
11
11
  var _configUtils = require("./config-utils");
12
+ var _bddFramework = require("../../../bdd-framework");
13
+ const defaultCIBrowsers = ['Chrome', 'Firefox', 'Edge', 'Safari'];
12
14
  const {
13
15
  browsers,
14
16
  trace,
@@ -25,8 +27,9 @@ const {
25
27
  stepDefinitionsFolder,
26
28
  testIdAttribute
27
29
  } = (0, _readConfigFile.generateConfigFromFile)();
30
+ const browserList = process.env.mode === 'ci' ? defaultCIBrowsers : browsers;
28
31
  const projects = (0, _configUtils.getProjects)({
29
- browsers,
32
+ browsers: browserList,
30
33
  isAuthMode,
31
34
  authFilePath,
32
35
  expectTimeout,
@@ -4,6 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
+ exports.getBrowsersList = getBrowsersList;
7
8
  exports.getProjects = getProjects;
8
9
  exports.getTestDir = getTestDir;
9
10
  exports.getTestUseOptions = getTestUseOptions;
@@ -11,6 +12,10 @@ var _test = require("@playwright/test");
11
12
  var _path = _interopRequireDefault(require("path"));
12
13
  var _readConfigFile = require("../readConfigFile");
13
14
  var _bddFramework = require("../../../bdd-framework");
15
+ var _logger = require("../../../utils/logger");
16
+ var _browserTypes = require("../constants/browserTypes");
17
+ var _configFileNameProvider = require("../helpers/configFileNameProvider");
18
+ var _fileUtils = require("../../../utils/fileUtils");
14
19
  /**
15
20
  ** Playwright project configuration
16
21
  * @returns {import('@playwright/test').Project}
@@ -31,7 +36,7 @@ function getBrowserConfig({
31
36
  const dependencies = isAuthMode ? ['setup'] : [];
32
37
  if (browser === 'chrome') {
33
38
  return {
34
- name: 'chromium',
39
+ name: _browserTypes.BROWSER_PROJECT_MAPPING.CHROME,
35
40
  use: {
36
41
  ..._test.devices['Desktop Chrome'],
37
42
  ...commonConfig
@@ -44,7 +49,7 @@ function getBrowserConfig({
44
49
  };
45
50
  } else if (browser === 'edge') {
46
51
  return {
47
- name: 'Microsoft Edge',
52
+ name: _browserTypes.BROWSER_PROJECT_MAPPING.EDGE,
48
53
  timeout: testTimeout,
49
54
  expect: {
50
55
  timeout: expectTimeout
@@ -58,7 +63,7 @@ function getBrowserConfig({
58
63
  };
59
64
  } else if (browser === 'firefox') {
60
65
  return {
61
- name: 'firefox',
66
+ name: _browserTypes.BROWSER_PROJECT_MAPPING.FIREFOX,
62
67
  timeout: 2 * testTimeout,
63
68
  expect: {
64
69
  timeout: 2 * expectTimeout
@@ -71,7 +76,7 @@ function getBrowserConfig({
71
76
  };
72
77
  } else if (browser === 'safari') {
73
78
  return {
74
- name: 'webkit',
79
+ name: _browserTypes.BROWSER_PROJECT_MAPPING.SAFARI,
75
80
  timeout: 4 * testTimeout,
76
81
  expect: {
77
82
  timeout: 4 * expectTimeout
@@ -88,8 +93,8 @@ function getBrowserConfig({
88
93
  }
89
94
 
90
95
  /**
91
- *
92
- * @param {*} param0
96
+ *
97
+ * @param {*} param0
93
98
  * @returns {import('@playwright/test').Project[]}
94
99
  */
95
100
  function getProjects({
@@ -109,11 +114,42 @@ function getProjects({
109
114
  viewport
110
115
  })).filter(Boolean);
111
116
  }
117
+ function getBrowsersList(browserFromArgs) {
118
+ if (browserFromArgs) {
119
+ if (typeof browserFromArgs === 'string') {
120
+ let listOfbrowsers = browserFromArgs.split(',').map(browser => browser.trim().toLowerCase());
121
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, 'Using browsers from command line args');
122
+ return listOfbrowsers;
123
+ }
124
+ }
125
+ return [];
126
+ }
127
+ function getPathsForFeatureFiles(cwd) {
128
+ if (process.env.isRerunFailedCases) {
129
+ let {
130
+ reportPath
131
+ } = (0, _readConfigFile.generateConfigFromFile)();
132
+ let filePathFromArgs = process.env.filePath;
133
+ let filePath = filePathFromArgs ? filePathFromArgs : reportPath;
134
+ const testSummary = (0, _fileUtils.readFileContents)(filePath);
135
+ if (testSummary !== null) {
136
+ const {
137
+ failed = []
138
+ } = JSON.parse(testSummary);
139
+ const casesToRun = failed.map(filePath => _path.default.join(cwd, 'uat', filePath.replace(/\.spec\.js$|\.js$/, '')));
140
+ return casesToRun;
141
+ } else {
142
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Unable to read test summary from the ${reportPath}. Verify If File Exists in the path`);
143
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, 'Going to run all test cases');
144
+ }
145
+ }
146
+ return [_path.default.join(cwd, 'uat', '**', '*.feature')];
147
+ }
112
148
  function getTestDir(bddMode, cwd, {
113
149
  stepDefinitionsFolder
114
150
  }) {
115
151
  return bddMode ? (0, _bddFramework.defineBddConfig)({
116
- paths: [_path.default.join(cwd, 'uat', '**', '*.feature')],
152
+ paths: getPathsForFeatureFiles(cwd),
117
153
  import: [_path.default.join(cwd, 'uat', '**', stepDefinitionsFolder, '*.spec.js')],
118
154
  featuresRoot: _path.default.join(cwd, 'uat'),
119
155
  outputDir: _path.default.join(cwd, 'uat', '.features-gen'),
@@ -10,6 +10,7 @@ var _readline = _interopRequireDefault(require("readline"));
10
10
  var _fileUtils = require("../../../utils/fileUtils");
11
11
  var _readConfigFile = require("../readConfigFile");
12
12
  var _logger = require("../../../utils/logger");
13
+ var _configFileNameProvider = require("../helpers/configFileNameProvider");
13
14
  class JSONSummaryReporter {
14
15
  constructor() {
15
16
  this.durationInMS = -1;
@@ -43,7 +44,7 @@ class JSONSummaryReporter {
43
44
  }
44
45
  }
45
46
  // This will publish the file name + line number test begins on
46
- const z = `${fileName[0]}:${test.location.line}:${test.location.column}`;
47
+ const z = `${fileName[0]}`;
47
48
  // Using the t variable in the push will push a full test name + test description
48
49
  const t = title.join(' > ');
49
50
  // Set the status
@@ -93,7 +94,7 @@ class JSONSummaryReporter {
93
94
  let {
94
95
  reportPath
95
96
  } = (0, _readConfigFile.generateConfigFromFile)();
96
- (0, _fileUtils.writeFileContents)(_path.default.join(reportPath, './', 'test-summary.json'), JSON.stringify(this, null, ' '));
97
+ (0, _fileUtils.writeFileContents)(_path.default.join(reportPath, './', (0, _configFileNameProvider.getReportFileName)()), JSON.stringify(this, null, ' '));
97
98
  }
98
99
  onExit() {
99
100
  const shouldClearLastLine = this._open !== 'always' || this._open !== 'on-failure';
@@ -14,10 +14,14 @@ var _logger = require("../../utils/logger");
14
14
  var _readConfigFile = require("./readConfigFile");
15
15
  var _rootPath = require("../../utils/rootPath");
16
16
  var _tagProcessor = require("./tag-processor");
17
- function parseUserArgs() {
18
- return (0, _cliArgsToObject.cliArgsToObject)(process.argv.slice(2));
19
- }
17
+ var _configUtils = require("./setup/config-utils");
18
+ var _browserTypes = require("./constants/browserTypes");
19
+ var _parseUserArgs = _interopRequireDefault(require("./helpers/parseUserArgs"));
20
20
  function getPlaywrightArgs(userArgsObject, debug, bddMode, tagArgs, headless) {
21
+ const {
22
+ browsers = null
23
+ } = userArgsObject;
24
+ let browserList = (0, _configUtils.getBrowsersList)(browsers);
21
25
  const playwrightArgs = (0, _cliArgsToObject.objectToCliArgs)(userArgsObject, key => !_customCommands.CUSTOM_COMMANDS.includes(key));
22
26
  if (debug) {
23
27
  playwrightArgs.push('--debug');
@@ -29,6 +33,9 @@ function getPlaywrightArgs(userArgsObject, debug, bddMode, tagArgs, headless) {
29
33
  if (!headless && !userArgsObject.headed) {
30
34
  playwrightArgs.push('--headed');
31
35
  }
36
+ if (browserList && browserList.length > 0) {
37
+ browserList.map(browser => playwrightArgs.push(`--project=${_browserTypes.BROWSER_PROJECT_MAPPING[browser.toUpperCase()]}`));
38
+ }
32
39
  return playwrightArgs;
33
40
  }
34
41
  function runPreprocessing(tagArgs, configPath) {
@@ -41,7 +48,10 @@ function runPreprocessing(tagArgs, configPath) {
41
48
  }
42
49
  return new Promise((resolve, reject) => {
43
50
  const childProcessForPreprocessing = (0, _child_process.spawn)(beforeCommand, beforeArgs, {
44
- stdio: 'inherit'
51
+ stdio: 'inherit',
52
+ env: {
53
+ ...process.env
54
+ }
45
55
  });
46
56
  childProcessForPreprocessing.on('error', data => {
47
57
  _logger.Logger.log(_logger.Logger.FAILURE_TYPE, data);
@@ -60,7 +70,10 @@ function runPreprocessing(tagArgs, configPath) {
60
70
  function runPlaywright(command, args) {
61
71
  return new Promise((resolve, reject) => {
62
72
  const childProcessForRunningPlaywright = (0, _child_process.spawn)(command, args, {
63
- stdio: 'inherit'
73
+ stdio: 'inherit',
74
+ env: {
75
+ ...process.env
76
+ }
64
77
  });
65
78
  childProcessForRunningPlaywright.on('error', error => {
66
79
  _logger.Logger.log(_logger.Logger.FAILURE_TYPE, error);
@@ -84,19 +97,16 @@ function runPlaywright(command, args) {
84
97
  });
85
98
  }
86
99
  function main() {
87
- const userArgsObject = parseUserArgs();
88
- // eslint-disable-next-line
89
-
100
+ const userArgsObject = (0, _parseUserArgs.default)();
101
+ (0, _envInitializer.initializeEnvConfig)(userArgsObject.mode);
90
102
  const {
91
103
  debug,
92
- mode = 'dev',
93
104
  bddMode = false,
94
105
  headless = false,
95
106
  editionOrder
96
107
  } = (0, _readConfigFile.generateConfigFromFile)();
97
108
  const tagArgs = (0, _tagProcessor.tagProcessor)(userArgsObject, editionOrder);
98
109
  const playwrightArgs = getPlaywrightArgs(userArgsObject, debug, bddMode, tagArgs, headless);
99
- (0, _envInitializer.initializeEnvConfig)(userArgsObject.mode ? userArgsObject.mode : mode);
100
110
  const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
101
111
  const command = playwrightPath;
102
112
  const configPath = (0, _readConfigFile.isUserConfigFileAvailable)() ? require.resolve('./setup/config-creator.js') : require.resolve('../../../playwright.config.js');
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @typedef {Object|null} viewportConfig
3
+ * @property {number} width - width of the viewport
4
+ * @property {number} height - height of the viewport
5
+ */
6
+ /**
7
+ * @typedef {Object|null} viewportConfig
8
+ * @property {number} width - width of the viewport
9
+ * @property {number} height - height of the viewport
10
+ */
11
+
12
+ /**
13
+ * @typedef {Object|null} testSetupConfig
14
+ * @property {any} page - Function that will be called while setting up page fixtures
15
+ * @property {any} context - Function that will be called while setting up context fixtures
16
+ */
17
+
18
+ /**
19
+ * Represents the user configuration object.
20
+ * @typedef {Object} UserConfig
21
+ * @property {string} uatDirectory - Directory in which uat configuration is places.
22
+ * @property {string} headless - Headless Browsers mode.
23
+ * @property {number} trace - trace for test cases.
24
+ * @property {boolean} video - video for test cases,
25
+ * @property {boolean} debug - debug mode
26
+ * @property {string} mode: mode in which the test cases needs to run
27
+ * @property {boolean} isAuthMode - Auth Mode. config whether authentication step needed before running test cases
28
+ * @property {string} authFilePath - File Path where the cookies stored
29
+ * @property {any} browsers: List of browsers
30
+ * @property {string} openReportOn: default Option value (never, on-failure and always)
31
+ * @property {any} reportPath : directory where report is generate
32
+ * @property {boolean} bddMode: Feature files needs to be processed
33
+ * @property {number} expectTimeout: time in milliseconds which the expect condition should fail
34
+ * @property {number} testTimeout: time in milliseconds which the test should fail
35
+ * @property {Object} additionalPages: custom pages configuration
36
+ * @property {string} featureFilesFolder: folder name under which feature-files will be placed. Default is feature-files
37
+ * @property {string} stepDefinitionsFolder: folder name under which step implementations will be placed. Default is steps
38
+ * @property {viewportConfig} viewport: viewport configuration for the browser. Default is { width: 1280, height: 720 }
39
+ * @property {string} testIdAttribute: Change the default data-testid attribute. configure what attribute to search while calling getByTestId
40
+ * @property {Array} editionOrder: Order in the form of larger editions in the back. Edition with the most privelages should be last
41
+ * @property {testSetupConfig} testSetup: Specify page and context functions that will be called while intilaizing fixtures.
42
+ */
43
+ "use strict";
package/build/index.d.ts CHANGED
@@ -1,4 +1,17 @@
1
- import { expect, test } from './core/playwright/index';
1
+ import {
2
+ expect,
3
+ test,
4
+ accountLogin,
5
+ getRunMode,
6
+ isCI,
7
+ isDevelopmentSetup,
8
+ getListOfActors,
9
+ getDefaultActor,
10
+ getUserForSelectedEditionAndProfile,
11
+ loadCookiesIfPresent,
12
+ performLoginSteps,
13
+ verifyIfCookieFileExists
14
+ } from './core/playwright/index';
2
15
  import { fireEvent, render } from '@testing-library/react';
3
16
  import {
4
17
  PlaywrightTestArgs,
@@ -55,6 +68,30 @@ type StepFunction<T extends KeyValue, W extends KeyValue> = (
55
68
 
56
69
  const { Given, Then, When, Step, And, But } = createBdd();
57
70
 
58
- export { Given, Then, When, Step, And, But, expect, test, createBdd, Page };
71
+ type UserConfig = import('./core/playwright/readConfigFile').UserConfig;
72
+
73
+ export {
74
+ UserConfig,
75
+ Given,
76
+ Then,
77
+ When,
78
+ Step,
79
+ And,
80
+ But,
81
+ expect,
82
+ test,
83
+ createBdd,
84
+ Page,
85
+ accountLogin,
86
+ getRunMode,
87
+ isCI,
88
+ isDevelopmentSetup,
89
+ getListOfActors,
90
+ getDefaultActor,
91
+ getUserForSelectedEditionAndProfile,
92
+ loadCookiesIfPresent,
93
+ performLoginSteps,
94
+ verifyIfCookieFileExists
95
+ };
59
96
 
60
97
  export * from '@playwright/test/types/test';
package/build/index.js CHANGED
@@ -4,6 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.When = exports.Then = exports.Step = exports.Given = exports.But = exports.And = void 0;
7
+ Object.defineProperty(exports, "accountLogin", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _index.accountLogin;
11
+ }
12
+ });
7
13
  Object.defineProperty(exports, "createBdd", {
8
14
  enumerable: true,
9
15
  get: function () {
@@ -16,24 +22,67 @@ Object.defineProperty(exports, "expect", {
16
22
  return _index.expect;
17
23
  }
18
24
  });
25
+ Object.defineProperty(exports, "getDefaultActor", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _index.getDefaultActor;
29
+ }
30
+ });
31
+ Object.defineProperty(exports, "getListOfActors", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _index.getListOfActors;
35
+ }
36
+ });
37
+ Object.defineProperty(exports, "getRunMode", {
38
+ enumerable: true,
39
+ get: function () {
40
+ return _index.getRunMode;
41
+ }
42
+ });
43
+ Object.defineProperty(exports, "getUserForSelectedEditionAndProfile", {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _index.getUserForSelectedEditionAndProfile;
47
+ }
48
+ });
49
+ Object.defineProperty(exports, "isCI", {
50
+ enumerable: true,
51
+ get: function () {
52
+ return _index.isCI;
53
+ }
54
+ });
55
+ Object.defineProperty(exports, "isDevelopmentSetup", {
56
+ enumerable: true,
57
+ get: function () {
58
+ return _index.isDevelopmentSetup;
59
+ }
60
+ });
61
+ Object.defineProperty(exports, "loadCookiesIfPresent", {
62
+ enumerable: true,
63
+ get: function () {
64
+ return _index.loadCookiesIfPresent;
65
+ }
66
+ });
67
+ Object.defineProperty(exports, "performLoginSteps", {
68
+ enumerable: true,
69
+ get: function () {
70
+ return _index.performLoginSteps;
71
+ }
72
+ });
19
73
  Object.defineProperty(exports, "test", {
20
74
  enumerable: true,
21
75
  get: function () {
22
76
  return _index.test;
23
77
  }
24
78
  });
79
+ Object.defineProperty(exports, "verifyIfCookieFileExists", {
80
+ enumerable: true,
81
+ get: function () {
82
+ return _index.verifyIfCookieFileExists;
83
+ }
84
+ });
25
85
  var _index = require("./core/playwright/index");
26
- // const { expect, test, createBdd } = require('./core/playwright/index');
27
- // const { fireEvent, render } = require('@testing-library/react');
28
-
29
- // module.exports = {
30
- // expect,
31
- // test,
32
- // fireEvent,
33
- // render,
34
- // createBdd
35
- // }
36
-
37
86
  // import { fireEvent, render } from '@testing-library/react';
38
87
 
39
88
  const {
package/build/lib/cli.js CHANGED
@@ -9,12 +9,10 @@ var _setupProject = _interopRequireDefault(require("../setup-folder-structure/se
9
9
  var _parser = require("../parser/parser");
10
10
  var _clearCaches = _interopRequireDefault(require("../core/playwright/clear-caches"));
11
11
  var _helper = _interopRequireDefault(require("../setup-folder-structure/helper"));
12
+ var _parseUserArgs = _interopRequireDefault(require("../core/playwright/helpers/parseUserArgs"));
12
13
  // import createJestRunner from '../core/jest/runner/jest-runner';
13
14
 
14
15
  const [,, option, ...otherOptions] = process.argv;
15
- // const args = process.argv.slice(3);
16
- // const appPath = process.cwd();
17
-
18
16
  switch (option) {
19
17
  case 'test':
20
18
  {
@@ -23,6 +21,17 @@ switch (option) {
23
21
  //createJestRunner();
24
22
  break;
25
23
  }
24
+ case 're-run-failed':
25
+ {
26
+ _logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Running Failed Tests..');
27
+ let {
28
+ filePath
29
+ } = (0, _parseUserArgs.default)();
30
+ process.env.isRerunFailedCases = true;
31
+ process.env.filePath = filePath;
32
+ (0, _testRunner.default)();
33
+ break;
34
+ }
26
35
  case 'report':
27
36
  {
28
37
  // console.log('\x1b[36mGenerating Reports...\x1b[0m');
@@ -5,13 +5,21 @@ var _path = _interopRequireDefault(require("path"));
5
5
  var _child_process = require("child_process");
6
6
  var _logger = require("../utils/logger");
7
7
  var _rootPath = require("../utils/rootPath");
8
- const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
9
- const command = playwrightPath;
10
- const args = ['install'];
11
- _logger.Logger.log(_logger.Logger.INFO_TYPE, 'Downloading browsers for running tests');
12
- const childProcess = (0, _child_process.spawn)(command, args, {
13
- stdio: 'inherit'
14
- });
15
- childProcess.on('error', error => {
16
- _logger.Logger.log(_logger.Logger.FAILURE_TYPE, error);
17
- });
8
+ // We are skipping the download of browsers when NODE_ENV is set to production or flag SKIP_BROWSER_DOWNLOAD is set to true
9
+
10
+ let isSkipDownloadingBrowsers = Boolean(process.env.SKIP_BROWSER_DOWNLOAD);
11
+ let isProductionMode = process.env.NODE_ENV === 'production';
12
+ if (isSkipDownloadingBrowsers || isProductionMode) {
13
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, 'Skipping browsers download in production mode');
14
+ } else {
15
+ const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
16
+ const command = playwrightPath;
17
+ const args = ['install'];
18
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `Downloading browsers for running tests`);
19
+ const childProcess = (0, _child_process.spawn)(command, args, {
20
+ stdio: 'inherit'
21
+ });
22
+ childProcess.on('error', error => {
23
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, error);
24
+ });
25
+ }
@@ -24,11 +24,14 @@ function helpercmd() {
24
24
  _commander.program.command('test').description('This command is used to execute tests');
25
25
  _commander.program.command('init').description('This command will initialize Project');
26
26
  _commander.program.command('report').description('This command is used to generate a report summarizing the results of executed tests.');
27
+ _commander.program.command('re-run-failed').description('This command will re-run the failed test cases based on test summary');
27
28
  _commander.program.command('codegen').description('This command is used to assist developer to write test case');
28
29
  _commander.program.option('--headed', 'Run tests with a headed browser.');
29
30
  _commander.program.option('--debug', 'This command is used to initiate a debugging session');
30
31
  _commander.program.option('--tags', 'Run specific test case with mentioned tags (Usage: -- --tags="@live")');
31
32
  _commander.program.option('--workers', 'Specify number of workers to run the test case parallely (Usage: -- --workers=2)');
33
+ _commander.program.option('--edition', 'Specify edition to run the test cases (Usage: -- --edition="standard". This will run the test cases with either no edition mentioned or edition standard)');
34
+ _commander.program.option('--browsers', 'Specify the browsers on which the test case should run (Usage: -- --browsers="chrome,firefox,safari")');
32
35
  _commander.program.parse(process.argv);
33
36
  }
34
37
  var _default = exports.default = helpercmd;
@@ -2,43 +2,49 @@
2
2
  import { test as setup, expect } from '@zohodesk/testinglibrary';
3
3
  import path from 'path';
4
4
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
5
+ import { getAuthFileDirectory } from '../../core/playwright';
5
6
 
6
7
  const userdata = require('./authUsers.json');
7
8
 
8
- const authDirectory = path.resolve(process.cwd(), 'uat', 'playwright', '.auth');
9
-
10
- const authContent = { "cookies": [] };
9
+ const authContent = { cookies: [] };
11
10
 
12
11
  const LOGIN_ERR_MESSAGE = 'Need go be logged in';
13
12
  // const AUTH_ERR_MESSAGE = `Founded Path - ${path.resolve(process.cwd(),'uat','playwright','.auth')} \n Find if file is Properly Created. Cookies Cannot Be Read .. `
14
13
 
15
-
16
14
  function convertCookiesToParse(cookies, authFilePath) {
17
15
  try {
18
- return JSON.parse(cookies)
16
+ return JSON.parse(cookies);
19
17
  } catch (err) {
20
- throw new Error(` Error while parsing cookies ${err} \n${path.resolve(process.cwd(), authFilePath)} File is Empty`)
18
+ throw new Error(
19
+ ` Error while parsing cookies ${err} \n${path.resolve(
20
+ process.cwd(),
21
+ authFilePath
22
+ )} File is Empty`
23
+ );
21
24
  // process.exit()
22
25
  }
23
26
  }
24
-
27
+ const authDirectory = getAuthFileDirectory(); //path.resolve(process.cwd(), 'uat', 'playwright', '.auth');
25
28
  if (!existsSync(authDirectory)) {
26
29
  console.log('Creating auth directory for the first time setup...');
27
30
  mkdirSync(authDirectory, { recursive: true });
28
31
  }
29
32
 
30
- userdata.forEach((data) => {
33
+ userdata.forEach(data => {
31
34
  const authFile = path.resolve(path.join(authDirectory, `${data.filename}`));
32
35
  if (!existsSync(authFile)) {
33
36
  console.log('creating auth file..');
34
- writeFileSync(authFile, JSON.stringify(authContent, null, 2))
37
+ writeFileSync(authFile, JSON.stringify(authContent, null, 2));
35
38
  }
36
39
  setup(data.description, async ({ page }) => {
37
-
38
40
  try {
39
41
  const cookies = readFileSync(authFile);
40
42
  const parsedCookies = convertCookiesToParse(cookies, authFile);
41
- await page.context().addCookies(parsedCookies.cookies === undefined ? [] : parsedCookies.cookies)
43
+ await page
44
+ .context()
45
+ .addCookies(
46
+ parsedCookies.cookies === undefined ? [] : parsedCookies.cookies
47
+ );
42
48
  await page.goto(page.getBaseUrl());
43
49
  await page.waitForLoadState();
44
50
  if (await page.url().includes(process.env.domain)) {
@@ -46,27 +52,20 @@ userdata.forEach((data) => {
46
52
  } else {
47
53
  throw new Error(LOGIN_ERR_MESSAGE);
48
54
  }
49
-
50
-
51
55
  } catch (err) {
52
56
  if (err.message === LOGIN_ERR_MESSAGE) {
53
-
54
57
  await expect(page.locator('.load-bg')).toBeHidden();
55
58
  await page.locator('#login_id').type(data.useremail);
56
59
  await page.locator('#nextbtn').click();
57
60
  await page.locator('#password').type(data.password);
58
61
  await page.locator('#nextbtn').click();
59
62
 
60
- await page.waitForLoadState("networkidle");
63
+ await page.waitForLoadState('networkidle');
61
64
 
62
- await page.waitForSelector(data.locator)
65
+ await page.waitForSelector(data.locator);
63
66
 
64
67
  await page.context().storageState({ path: authFile });
65
68
  }
66
-
67
69
  }
68
-
69
70
  });
70
-
71
-
72
- })
71
+ });
@@ -5,6 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.cliArgsToObject = cliArgsToObject;
7
7
  exports.objectToCliArgs = objectToCliArgs;
8
+ function isMatchForOption(option) {
9
+ return /^--./.test(option);
10
+ }
11
+
8
12
  /**
9
13
  * Converts an array of command-line arguments into an object.
10
14
  *
@@ -23,7 +27,7 @@ exports.objectToCliArgs = objectToCliArgs;
23
27
  function cliArgsToObject(cliArgs, isKeyNeedToBeAdded) {
24
28
  const processEnv = {};
25
29
  cliArgs.forEach(option => {
26
- if (/^--./.test(option)) {
30
+ if (isMatchForOption(option)) {
27
31
  const equIndex = option.indexOf('=');
28
32
  let key = option.slice(2, equIndex);
29
33
  let value = option.slice(equIndex + 1);
@@ -11,6 +11,7 @@ exports.readFileContents = readFileContents;
11
11
  exports.writeFileContents = writeFileContents;
12
12
  var _fs = _interopRequireDefault(require("fs"));
13
13
  var _path = _interopRequireDefault(require("path"));
14
+ var _logger = require("./logger");
14
15
  function checkIfFileExists(file) {
15
16
  try {
16
17
  _fs.default.accessSync(file, _fs.default.constants.F_OK);
@@ -49,6 +50,8 @@ function deleteFile(filePath) {
49
50
  } catch (err) {
50
51
  throw new Error(`Error while deleting the test data file: ${filePath}`);
51
52
  }
53
+ } else {
54
+ _logger.Logger.log(_logger.Logger.INFO_TYPE, `File Does not Exist in the path ${filePath}`);
52
55
  }
53
56
  }
54
57
  function deleteFolder(folderPath) {