@eclipse-che/che-e2e 7.64.0-dev-20514b2 → 7.64.0-dev-f0466d9

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 (165) hide show
  1. package/README.md +11 -37
  2. package/build/dockerfiles/entrypoint.sh +1 -1
  3. package/configs/inversify.config.ts +11 -26
  4. package/configs/inversify.types.ts +5 -35
  5. package/configs/mocharc.ts +9 -3
  6. package/configs/sh-scripts/initDefaultValues.sh +0 -5
  7. package/constants/TestConstants.ts +35 -97
  8. package/constants/TimeoutConstants.ts +1 -1
  9. package/dist/configs/inversify.config.js +8 -23
  10. package/dist/configs/inversify.config.js.map +1 -1
  11. package/dist/configs/inversify.types.js +3 -33
  12. package/dist/configs/inversify.types.js.map +1 -1
  13. package/dist/configs/mocharc.js +11 -4
  14. package/dist/configs/mocharc.js.map +1 -1
  15. package/dist/constants/TestConstants.js +31 -86
  16. package/dist/constants/TestConstants.js.map +1 -1
  17. package/dist/constants/TimeoutConstants.js.map +1 -1
  18. package/dist/driver/ChromeDriver.js +1 -1
  19. package/dist/driver/ChromeDriver.js.map +1 -1
  20. package/dist/index.js +63 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/pageobjects/dashboard/CreateWorkspace.js +8 -16
  23. package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
  24. package/dist/pageobjects/dashboard/Dashboard.js +16 -1
  25. package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
  26. package/dist/pageobjects/dashboard/Workspaces.js +1 -3
  27. package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
  28. package/dist/pageobjects/git-providers/OauthPage.js +150 -0
  29. package/dist/pageobjects/git-providers/OauthPage.js.map +1 -0
  30. package/dist/pageobjects/ide/CheCodeLocatorLoader.js +65 -0
  31. package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -0
  32. package/dist/pageobjects/login/OcpRedHatLoginPage.js +67 -0
  33. package/dist/pageobjects/login/OcpRedHatLoginPage.js.map +1 -0
  34. package/dist/pageobjects/login/RedHatLoginPage.js +78 -0
  35. package/dist/pageobjects/login/RedHatLoginPage.js.map +1 -0
  36. package/dist/pageobjects/login/RegularUserOcpCheLoginPage.js +3 -21
  37. package/dist/pageobjects/login/RegularUserOcpCheLoginPage.js.map +1 -1
  38. package/dist/pageobjects/openshift/CheLoginPage.js +0 -33
  39. package/dist/pageobjects/openshift/CheLoginPage.js.map +1 -1
  40. package/dist/pageobjects/openshift/OcpLoginPage.js +0 -14
  41. package/dist/pageobjects/openshift/OcpLoginPage.js.map +1 -1
  42. package/dist/specs/MochaHooks.js +2 -2
  43. package/dist/specs/MochaHooks.js.map +1 -1
  44. package/dist/specs/SmokeTest.spec.js +49 -0
  45. package/dist/specs/SmokeTest.spec.js.map +1 -0
  46. package/dist/specs/devfiles/EmptyWorkspace.spec.js +1 -0
  47. package/dist/specs/devfiles/EmptyWorkspace.spec.js.map +1 -1
  48. package/dist/specs/devfiles/Quarkus.spec.js +50 -0
  49. package/dist/specs/devfiles/Quarkus.spec.js.map +1 -0
  50. package/dist/specs/factory/Factory.spec.js +160 -0
  51. package/dist/specs/factory/Factory.spec.js.map +1 -0
  52. package/dist/specs/factory/NoSetupRepoFactory.spec.js +228 -0
  53. package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -0
  54. package/dist/specs/factory/RefusedOAuthFactory.spec.js +220 -0
  55. package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -0
  56. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +66 -0
  57. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -0
  58. package/dist/tests-library/LoginTests.js +10 -2
  59. package/dist/tests-library/LoginTests.js.map +1 -1
  60. package/dist/tests-library/WorkspaceHandlingTests.js +15 -6
  61. package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
  62. package/dist/utils/BrowserTabsUtil.js +2 -21
  63. package/dist/utils/BrowserTabsUtil.js.map +1 -1
  64. package/dist/utils/CheReporter.js +5 -2
  65. package/dist/utils/CheReporter.js.map +1 -1
  66. package/dist/utils/DriverHelper.js +11 -73
  67. package/dist/utils/DriverHelper.js.map +1 -1
  68. package/dist/utils/Logger.js +5 -0
  69. package/dist/utils/Logger.js.map +1 -1
  70. package/dist/utils/Sanitizer.js.map +1 -1
  71. package/dist/utils/ScreenCatcher.js.map +1 -1
  72. package/dist/utils/request-handlers/CheApiRequestHandler.js +1 -1
  73. package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
  74. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
  75. package/dist/utils/vsc/GitUtil.js +36 -0
  76. package/dist/utils/vsc/GitUtil.js.map +1 -0
  77. package/dist/utils/workspace/ApiUrlResolver.js +0 -3
  78. package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
  79. package/dist/utils/workspace/TestWorkspaceUtil.js +3 -193
  80. package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
  81. package/driver/ChromeDriver.ts +3 -3
  82. package/index.ts +37 -0
  83. package/package.json +9 -5
  84. package/pageobjects/dashboard/CreateWorkspace.ts +10 -21
  85. package/pageobjects/dashboard/Dashboard.ts +37 -16
  86. package/pageobjects/dashboard/Workspaces.ts +21 -23
  87. package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +16 -16
  88. package/pageobjects/git-providers/OauthPage.ts +156 -0
  89. package/pageobjects/ide/CheCodeLocatorLoader.ts +69 -0
  90. package/pageobjects/login/OcpRedHatLoginPage.ts +49 -0
  91. package/pageobjects/login/OcpUserLoginPage.ts +1 -1
  92. package/pageobjects/login/RedHatLoginPage.ts +62 -0
  93. package/pageobjects/login/RegularUserOcpCheLoginPage.ts +2 -21
  94. package/pageobjects/openshift/CheLoginPage.ts +8 -57
  95. package/pageobjects/openshift/OcpLoginPage.ts +8 -29
  96. package/specs/MochaHooks.ts +9 -9
  97. package/specs/SmokeTest.spec.ts +50 -0
  98. package/specs/devfiles/EmptyWorkspace.spec.ts +1 -0
  99. package/specs/devfiles/Quarkus.spec.ts +52 -0
  100. package/specs/factory/Factory.spec.ts +199 -0
  101. package/specs/factory/NoSetupRepoFactory.spec.ts +272 -0
  102. package/specs/factory/RefusedOAuthFactory.spec.ts +260 -0
  103. package/specs/miscellaneous/PredefinedNamespace.spec.ts +74 -0
  104. package/tests-library/LoginTests.ts +9 -1
  105. package/tests-library/WorkspaceHandlingTests.ts +16 -7
  106. package/tslint.json +4 -4
  107. package/utils/BrowserTabsUtil.ts +9 -31
  108. package/utils/CheReporter.ts +12 -8
  109. package/utils/DriverHelper.ts +40 -115
  110. package/utils/Logger.ts +13 -8
  111. package/utils/Sanitizer.ts +0 -1
  112. package/utils/ScreenCatcher.ts +8 -7
  113. package/utils/request-handlers/CheApiRequestHandler.ts +1 -1
  114. package/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +2 -1
  115. package/utils/vsc/GitUtil.ts +25 -0
  116. package/utils/workspace/ApiUrlResolver.ts +3 -6
  117. package/utils/workspace/ITestWorkspaceUtil.ts +1 -56
  118. package/utils/workspace/TestWorkspaceUtil.ts +24 -265
  119. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.js +0 -97
  120. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.js.map +0 -1
  121. package/dist/pageobjects/login/MultiUserLoginPage.js +0 -49
  122. package/dist/pageobjects/login/MultiUserLoginPage.js.map +0 -1
  123. package/dist/pageobjects/login/UpdateAccountInformationPage.js +0 -74
  124. package/dist/pageobjects/login/UpdateAccountInformationPage.js.map +0 -1
  125. package/dist/pageobjects/third-parties/GitLoginPage.js +0 -85
  126. package/dist/pageobjects/third-parties/GitLoginPage.js.map +0 -1
  127. package/dist/pageobjects/third-parties/GitOauthAppsSettings.js +0 -110
  128. package/dist/pageobjects/third-parties/GitOauthAppsSettings.js.map +0 -1
  129. package/dist/specs/login/LinkCheAndOcpUsers.spec.js +0 -40
  130. package/dist/specs/login/LinkCheAndOcpUsers.spec.js.map +0 -1
  131. package/dist/utils/WorkspaceNameHandler.js +0 -60
  132. package/dist/utils/WorkspaceNameHandler.js.map +0 -1
  133. package/dist/utils/request-handlers/tokens/CheMultiuserTokenHandler.js +0 -50
  134. package/dist/utils/request-handlers/tokens/CheMultiuserTokenHandler.js.map +0 -1
  135. package/dist/utils/request-handlers/tokens/ITokenHandler.js +0 -12
  136. package/dist/utils/request-handlers/tokens/ITokenHandler.js.map +0 -1
  137. package/dist/utils/vsc/CheGitApi.js +0 -42
  138. package/dist/utils/vsc/CheGitApi.js.map +0 -1
  139. package/dist/utils/vsc/github/GitHubUtil.js +0 -126
  140. package/dist/utils/vsc/github/GitHubUtil.js.map +0 -1
  141. package/files/devfiles/plugins/GitHubPullRequestPlugin.yaml +0 -11
  142. package/files/devfiles/plugins/InstallPluginUsingUI.yaml +0 -3
  143. package/files/devfiles/plugins/Java11PluginTest.yaml +0 -17
  144. package/files/devfiles/plugins/PhpPluginTest.yaml +0 -47
  145. package/files/devfiles/plugins/PythonPluginTest.yaml +0 -14
  146. package/files/devfiles/plugins/TypescriptNodeDebug2PluginTest.yaml +0 -49
  147. package/files/devfiles/plugins/VscodeKubernetesPlugin.yaml +0 -12
  148. package/files/devfiles/plugins/VscodeShellcheckPlugin.yaml +0 -12
  149. package/files/devfiles/plugins/VscodeValePlugin.yaml +0 -42
  150. package/files/devfiles/plugins/VscodeXmlPlugin.yaml +0 -12
  151. package/files/devfiles/plugins/VscodeYamlPlugin.yaml +0 -12
  152. package/files/happy-path/containers-happy-path.yaml +0 -127
  153. package/files/happy-path/happy-path-workspace.yaml +0 -95
  154. package/files/happy-path/petclinic-classpath.txt +0 -49
  155. package/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.ts +0 -95
  156. package/pageobjects/login/MultiUserLoginPage.ts +0 -33
  157. package/pageobjects/login/UpdateAccountInformationPage.ts +0 -70
  158. package/pageobjects/third-parties/GitLoginPage.ts +0 -81
  159. package/pageobjects/third-parties/GitOauthAppsSettings.ts +0 -110
  160. package/specs/login/LinkCheAndOcpUsers.spec.ts +0 -49
  161. package/utils/WorkspaceNameHandler.ts +0 -48
  162. package/utils/request-handlers/tokens/CheMultiuserTokenHandler.ts +0 -41
  163. package/utils/request-handlers/tokens/ITokenHandler.ts +0 -14
  164. package/utils/vsc/CheGitApi.ts +0 -22
  165. package/utils/vsc/github/GitHubUtil.ts +0 -110
@@ -29,10 +29,6 @@ export class WorkspaceHandlingTests {
29
29
  return WorkspaceHandlingTests.workspaceName;
30
30
  }
31
31
 
32
- public static setWorkspaceName(workspaceName: string): void {
33
- WorkspaceHandlingTests.workspaceName = workspaceName;
34
- }
35
-
36
32
  private static WORKSPACE_NAME_LOCATOR: By = By.xpath(`//h1[contains(.,'Starting workspace ')]`);
37
33
  private static workspaceName: string = 'undefined';
38
34
  private static parentGUID: string;
@@ -61,7 +57,20 @@ export class WorkspaceHandlingTests {
61
57
  await this.dashboard.clickCreateWorkspaceButton();
62
58
  await this.createWorkspace.waitPage();
63
59
  WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
64
- await this.createWorkspace.clickOnSampleForSpecificEditor(stack);
60
+ await this.createWorkspace.clickOnSampleNoEditorSelection(stack);
61
+ await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TimeoutConstants.TS_IDE_LOAD_TIMEOUT);
62
+ });
63
+ }
64
+
65
+ public createAndOpenWorkspaceFromGitRepository(factoryUrl: string): void {
66
+ test(`Create and open new workspace from factory:${factoryUrl}`, async () => {
67
+ await this.dashboard.waitPage();
68
+ Logger.debug(`Fetching user kubernetes namespace, storing auth token by getting workspaces API URL.`);
69
+ await this.apiUrlResolver.getWorkspacesApiUrl();
70
+ await this.dashboard.clickCreateWorkspaceButton();
71
+ await this.createWorkspace.waitPage();
72
+ WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
73
+ await this.createWorkspace.importFromGitUsingUI(factoryUrl);
65
74
  await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TimeoutConstants.TS_IDE_LOAD_TIMEOUT);
66
75
  });
67
76
  }
@@ -110,8 +119,8 @@ export class WorkspaceHandlingTests {
110
119
  Logger.info(`Obtained workspace name from workspace loader page: ${WorkspaceHandlingTests.workspaceName}`);
111
120
  return;
112
121
  }
113
- Logger.error(`WorkspaceHandlingTests.obtainWorkspaceNameFromSartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
114
- throw new error.InvalidArgumentError(`WorkspaceHandlingTests.obtainWorkspaceNameFromSartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
122
+ Logger.error(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
123
+ throw new error.InvalidArgumentError(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
115
124
  });
116
125
  }
117
126
 
package/tslint.json CHANGED
@@ -95,11 +95,11 @@
95
95
  ],
96
96
  "typedef": [
97
97
  true,
98
- // "call-signature",
99
- // "member-variable-declaration",
98
+ "call-signature",
99
+ "member-variable-declaration",
100
100
  "parameter",
101
- "property-declaration"
102
- // "variable-declaration"
101
+ "property-declaration",
102
+ "variable-declaration"
103
103
  ],
104
104
  "typedef-whitespace": [
105
105
  true,
@@ -9,7 +9,6 @@
9
9
  **********************************************************************/
10
10
 
11
11
  import { injectable, inject } from 'inversify';
12
- import { By, error } from 'selenium-webdriver';
13
12
  import { CLASSES } from '../configs/inversify.types';
14
13
  import { DriverHelper } from './DriverHelper';
15
14
  import { Logger } from './Logger';
@@ -19,7 +18,7 @@ import { TimeoutConstants } from '../constants/TimeoutConstants';
19
18
  export class BrowserTabsUtil {
20
19
  constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) { }
21
20
 
22
- async switchToWindow(windowHandle: string) {
21
+ async switchToWindow(windowHandle: string): Promise<void> {
23
22
  Logger.debug('BrowserTabsUtil.switchToWindow');
24
23
  await this.driverHelper.getDriver().switchTo().window(windowHandle);
25
24
  }
@@ -36,20 +35,20 @@ export class BrowserTabsUtil {
36
35
  return await this.driverHelper.getDriver().getWindowHandle();
37
36
  }
38
37
 
39
- async navigateTo(url: string) {
38
+ async navigateTo(url: string): Promise<void> {
40
39
  Logger.debug(`BrowserTabsUtil.navigateTo ${url}`);
41
40
 
42
41
  await this.driverHelper.getDriver().navigate().to(url);
43
42
  }
44
43
 
45
- async navigateAndWaitToUrl(url: string, timeout: number = TimeoutConstants.TS_SELENIUM_WAIT_FOR_URL) {
44
+ async navigateAndWaitToUrl(url: string, timeout: number = TimeoutConstants.TS_SELENIUM_WAIT_FOR_URL): Promise<void> {
46
45
  Logger.trace(`BrowserTabsUtil.navigateAndWaitToUrl ${url}`);
47
46
 
48
47
  await this.navigateTo(url);
49
48
  await this.waitURL(url, timeout);
50
49
  }
51
50
 
52
- async waitAndSwitchToAnotherWindow(currentWindowHandle: string, timeout: number) {
51
+ async waitAndSwitchToAnotherWindow(currentWindowHandle: string, timeout: number): Promise<void> {
53
52
  Logger.debug('BrowserTabsUtil.waitAndSwitchToAnotherWindow');
54
53
 
55
54
  await this.driverHelper.waitUntilTrue(async () => {
@@ -60,45 +59,24 @@ export class BrowserTabsUtil {
60
59
 
61
60
  const windowHandles: string[] = await this.getAllWindowHandles();
62
61
 
63
- windowHandles.forEach(async windowHandle => {
62
+ for (const windowHandle of windowHandles) {
64
63
  if (windowHandle !== currentWindowHandle) {
65
64
  await this.switchToWindow(windowHandle);
66
- return;
67
65
  }
68
- });
69
- }
70
-
71
- async waitContentAvailableInTheNewTab(contentLocator: By, timeout: number) {
72
- Logger.debug('BrowserTabsUtil.waitContentAvailableInTheNewTab');
73
-
74
- await this.driverHelper.waitVisibility(contentLocator, timeout);
66
+ }
75
67
  }
76
68
 
77
- async refreshPage() {
69
+ async refreshPage(): Promise<void> {
78
70
  Logger.debug('BrowserTabsUtil.refreshPage');
79
71
 
80
72
  await (await this.driverHelper.getDriver()).navigate().refresh();
81
73
  }
82
74
 
83
- async refreshForDebug() {
84
- Logger.debug('BrowserTabsUtil.refreshForDebug');
85
-
86
- // if refresh triggers debug breakpoint test stucks of the refreshing
87
- // and fail with a timeout error.
88
- try {
89
- await (await this.driverHelper.getDriver()).navigate().refresh();
90
- } catch (err) {
91
- if (!(err instanceof error.TimeoutError)) {
92
- throw err;
93
- }
94
- }
95
- }
96
-
97
75
  async getCurrentUrl(): Promise<string> {
98
76
  return await this.driverHelper.getDriver().getCurrentUrl();
99
77
  }
100
78
 
101
- async waitURL(expectedUrl: string, timeout: number) {
79
+ async waitURL(expectedUrl: string, timeout: number): Promise<void> {
102
80
  Logger.trace(`BrowserTabsUtil.waitURL ${expectedUrl}`);
103
81
 
104
82
  await this.driverHelper.getDriver().wait(async () => {
@@ -111,7 +89,7 @@ export class BrowserTabsUtil {
111
89
  }, timeout);
112
90
  }
113
91
 
114
- public async maximize() {
92
+ public async maximize(): Promise<void> {
115
93
  Logger.trace(`BrowserTabsUtil.maximize`);
116
94
 
117
95
  await this.driverHelper.getDriver().manage().window().maximize();
@@ -20,6 +20,7 @@ import { TimeoutConstants } from '../constants/TimeoutConstants';
20
20
  import { Logger } from './Logger';
21
21
  import { Sanitizer } from './Sanitizer';
22
22
  import { e2eContainer } from '../configs/inversify.config';
23
+ import { WriteStream } from 'fs';
23
24
 
24
25
  const driverHelper: DriverHelper = e2eContainer.get(CLASSES.DriverHelper);
25
26
  const screenCatcher: ScreenCatcher = e2eContainer.get(CLASSES.ScreenCatcher);
@@ -35,7 +36,7 @@ class CheReporter extends mocha.reporters.Spec {
35
36
  constructor(runner: mocha.Runner, options: mocha.MochaOptions) {
36
37
  super(runner, options);
37
38
 
38
- runner.on('start', async (test: mocha.Test) => {
39
+ runner.on('start', async () => {
39
40
  let launchInformation: string =
40
41
  `################## Launch Information ##################
41
42
 
@@ -56,6 +57,9 @@ class CheReporter extends mocha.reporters.Spec {
56
57
  DELETE_WORKSPACE_ON_FAILED_TEST: ${TestConstants.DELETE_WORKSPACE_ON_FAILED_TEST}
57
58
  TS_SELENIUM_LOG_LEVEL: ${TestConstants.TS_SELENIUM_LOG_LEVEL}
58
59
  TS_SELENIUM_LAUNCH_FULLSCREEN: ${TestConstants.TS_SELENIUM_LAUNCH_FULLSCREEN}
60
+
61
+ ${process.env.MOCHA_DIRECTORY ? 'MOCHA_DIRECTORY: ' + process.env.MOCHA_DIRECTORY : 'MOCHA_DRIRECTORY is not set'}
62
+ ${process.env.USERSTORY ? 'USERSTORY: ' + process.env.USERSTORY : 'USERSTORY is not set'}
59
63
  `;
60
64
 
61
65
  if (TestConstants.TS_SELENIUM_PRINT_TIMEOUT_VARIABLES) {
@@ -73,7 +77,7 @@ class CheReporter extends mocha.reporters.Spec {
73
77
  rm.sync(TestConstants.TS_SELENIUM_REPORT_FOLDER);
74
78
  });
75
79
 
76
- runner.on('test', async function (test: mocha.Test) {
80
+ runner.on('test', async function (test: mocha.Test): Promise<void> {
77
81
  if (!TestConstants.TS_SELENIUM_EXECUTION_SCREENCAST) {
78
82
  return;
79
83
  }
@@ -94,7 +98,7 @@ class CheReporter extends mocha.reporters.Spec {
94
98
  if (TestConstants.TS_LOAD_TESTS) {
95
99
  const loadTestReportFolder: string = TestConstants.TS_SELENIUM_LOAD_TEST_REPORT_FOLDER;
96
100
  const loadTestFilePath: string = loadTestReportFolder + '/load-test-results.txt';
97
- const report = test.title + ': ' + test.duration + '\r';
101
+ const report: string = test.title + ': ' + test.duration + '\r';
98
102
  if (!fs.existsSync(loadTestReportFolder)) {
99
103
  fs.mkdirSync(loadTestReportFolder);
100
104
  }
@@ -103,7 +107,7 @@ class CheReporter extends mocha.reporters.Spec {
103
107
  });
104
108
 
105
109
 
106
- runner.on('end', async function (test: mocha.Test) {
110
+ runner.on('end', async function (): Promise<void> {
107
111
  // ensure that fired events done
108
112
  await driverHelper.wait(5000);
109
113
 
@@ -116,7 +120,7 @@ class CheReporter extends mocha.reporters.Spec {
116
120
  }
117
121
  });
118
122
 
119
- runner.on('fail', async function (test: mocha.Test) {
123
+ runner.on('fail', async function (test: mocha.Test): Promise<void> {
120
124
  Logger.error(`CheReporter runner.on.fail: ${test.fullTitle()} failed after ${test.duration}ms`);
121
125
  // raise flag for keeping the screencast
122
126
  deleteScreencast = false;
@@ -150,13 +154,13 @@ class CheReporter extends mocha.reporters.Spec {
150
154
 
151
155
  // take screenshot and write to file
152
156
  const screenshot: string = await driverHelper.getDriver().takeScreenshot();
153
- const screenshotStream = fs.createWriteStream(screenshotFileName);
157
+ const screenshotStream: WriteStream = fs.createWriteStream(screenshotFileName);
154
158
  screenshotStream.write(Buffer.from(screenshot, 'base64'));
155
159
  screenshotStream.end();
156
160
 
157
161
  // take pagesource and write to file
158
162
  const pageSource: string = await driverHelper.getDriver().getPageSource();
159
- const pageSourceStream = fs.createWriteStream(pageSourceFileName);
163
+ const pageSourceStream: WriteStream = fs.createWriteStream(pageSourceFileName);
160
164
  pageSourceStream.write(Buffer.from(pageSource));
161
165
  pageSourceStream.end();
162
166
 
@@ -168,7 +172,7 @@ class CheReporter extends mocha.reporters.Spec {
168
172
  browserLogs += `\"${log.level}\" \"${log.type}\" \"${log.message}\"\n`;
169
173
  });
170
174
 
171
- const browserLogsStream = fs.createWriteStream(browserLogsFileName);
175
+ const browserLogsStream: WriteStream = fs.createWriteStream(browserLogsFileName);
172
176
  browserLogsStream.write(Buffer.from(browserLogs));
173
177
  browserLogsStream.end();
174
178
 
@@ -10,9 +10,8 @@
10
10
  import { IDriver } from '../driver/IDriver';
11
11
  import { inject, injectable } from 'inversify';
12
12
  import { TYPES } from '../configs/inversify.types';
13
- import { error, Actions } from 'selenium-webdriver';
13
+ import { Actions, By, error, ThenableWebDriver, until, WebElement } from 'selenium-webdriver';
14
14
  import 'reflect-metadata';
15
- import { ThenableWebDriver, By, until, WebElement } from 'selenium-webdriver';
16
15
  import { TestConstants } from '../constants/TestConstants';
17
16
  import { Logger } from './Logger';
18
17
  import { TimeoutConstants } from '../constants/TimeoutConstants';
@@ -32,29 +31,18 @@ export class DriverHelper {
32
31
  return this.driver.actions();
33
32
  }
34
33
 
35
- /**
36
- * @deprecated Method deprecated. Use the next method instead.
37
- * @see BrowserTabsUtil.maximize()
38
- */
39
- public async maximize() {
40
- Logger.trace(`DriverHelper.maximize`);
41
-
42
- await this.driver.manage().window().maximize();
43
- }
44
-
45
34
  public async isVisible(locator: By): Promise<boolean> {
46
35
  Logger.trace(`DriverHelper.isVisible ${locator}`);
47
36
 
48
37
  try {
49
38
  const element: WebElement = await this.driver.findElement(locator);
50
- const isVisible: boolean = await element.isDisplayed();
51
- return isVisible;
39
+ return await element.isDisplayed();
52
40
  } catch {
53
41
  return false;
54
42
  }
55
43
  }
56
44
 
57
- public async wait(milliseconds: number) {
45
+ public async wait(milliseconds: number): Promise<void> {
58
46
  Logger.trace(`DriverHelper.wait (${milliseconds} milliseconds)`);
59
47
 
60
48
  await this.driver.sleep(milliseconds);
@@ -66,7 +54,7 @@ export class DriverHelper {
66
54
 
67
55
  Logger.trace(`DriverHelper.waitVisibilityBoolean ${locator}`);
68
56
 
69
- for (let i = 0; i < attempts; i++) {
57
+ for (let i: number = 0; i < attempts; i++) {
70
58
  const isVisible: boolean = await this.isVisible(locator);
71
59
 
72
60
  if (isVisible) {
@@ -85,7 +73,7 @@ export class DriverHelper {
85
73
 
86
74
  Logger.trace(`DriverHelper.waitDisappearanceBoolean ${locator}`);
87
75
 
88
- for (let i = 0; i < attempts; i++) {
76
+ for (let i: number = 0; i < attempts; i++) {
89
77
  const isVisible: boolean = await this.isVisible(locator);
90
78
 
91
79
  if (!isVisible) {
@@ -104,7 +92,7 @@ export class DriverHelper {
104
92
 
105
93
  Logger.trace(`DriverHelper.waitVisibility ${elementLocator}`);
106
94
 
107
- for (let i = 0; i < attempts; i++) {
95
+ for (let i: number = 0; i < attempts; i++) {
108
96
  let element: WebElement;
109
97
  try {
110
98
  element = await this.driver.wait(until.elementLocated(elementLocator), polling);
@@ -131,7 +119,7 @@ export class DriverHelper {
131
119
  }
132
120
 
133
121
  try {
134
- const visibleWebElement = await this.driver.wait(until.elementIsVisible(element), polling);
122
+ const visibleWebElement: WebElement = await this.driver.wait(until.elementIsVisible(element), polling);
135
123
  Logger.trace('DriverHelper.waitVisibility - Element is located and is visible.');
136
124
  return visibleWebElement;
137
125
  } catch (err) {
@@ -162,10 +150,9 @@ export class DriverHelper {
162
150
 
163
151
  Logger.trace(`DriverHelper.waitPresence ${elementLocator}`);
164
152
 
165
- for (let i = 0; i < attempts; i++) {
153
+ for (let i: number = 0; i < attempts; i++) {
166
154
  try {
167
- const webElement: WebElement = await this.driver.wait(until.elementLocated(elementLocator), polling);
168
- return webElement;
155
+ return await this.driver.wait(until.elementLocated(elementLocator), polling);
169
156
  } catch (err) {
170
157
  if (err instanceof error.TimeoutError) {
171
158
  Logger.trace(`DriverHelper.waitPresence - Polling timed out attempt #${(i + 1)}, retrying with ${polling}ms timeout`);
@@ -182,7 +169,7 @@ export class DriverHelper {
182
169
  }
183
170
  }
184
171
 
185
- throw new error.TimeoutError(`Exceeded maximum presence checkings attempts, problems with 'StaleElementReferenceError' of '${elementLocator}' element`);
172
+ throw new error.TimeoutError(`Exceeded maximum presence checking attempts, problems with 'StaleElementReferenceError' of '${elementLocator}' element`);
186
173
  }
187
174
 
188
175
  public async waitAllPresence(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM): Promise<Array<WebElement>> {
@@ -191,10 +178,9 @@ export class DriverHelper {
191
178
 
192
179
  Logger.trace(`DriverHelper.waitAllPresence ${elementLocator}`);
193
180
 
194
- for (let i = 0; i < attempts; i++) {
181
+ for (let i: number = 0; i < attempts; i++) {
195
182
  try {
196
- const webElements: Array<WebElement> = await this.driver.wait(until.elementsLocated(elementLocator), polling);
197
- return webElements;
183
+ return await this.driver.wait(until.elementsLocated(elementLocator), polling);
198
184
  } catch (err) {
199
185
  if (err instanceof error.TimeoutError) {
200
186
  Logger.trace(`DriverHelper.waitAllPresence - Polling timed out attempt #${(i + 1)}, retrying with ${polling}ms timeout`);
@@ -214,7 +200,7 @@ export class DriverHelper {
214
200
  throw new error.TimeoutError(`Exceeded maximum presence checkings attempts, problems with 'StaleElementReferenceError' of '${elementLocator}' element`);
215
201
  }
216
202
 
217
- public async waitAllVisibility(locators: Array<By>, timeout: number) {
203
+ public async waitAllVisibility(locators: Array<By>, timeout: number): Promise<void> {
218
204
  Logger.trace(`DriverHelper.waitAllVisibility ${locators}`);
219
205
 
220
206
  for (const elementLocator of locators) {
@@ -224,18 +210,18 @@ export class DriverHelper {
224
210
 
225
211
  public async waitDisappearance(elementLocator: By,
226
212
  attempts: number = TestConstants.TS_SELENIUM_DEFAULT_ATTEMPTS,
227
- polling: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING) {
213
+ polling: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING): Promise<void> {
228
214
 
229
215
  Logger.trace(`DriverHelper.waitDisappearance ${elementLocator}`);
230
216
 
231
- const isDisappeared = await this.waitDisappearanceBoolean(elementLocator, attempts, polling);
217
+ const isDisappeared: boolean = await this.waitDisappearanceBoolean(elementLocator, attempts, polling);
232
218
 
233
219
  if (!isDisappeared) {
234
220
  throw new error.TimeoutError(`Waiting attempts exceeded, element '${elementLocator}' is still visible`);
235
221
  }
236
222
  }
237
223
 
238
- public async waitDisappearanceWithTimeout(elementLocator: By, timeout: number) {
224
+ public async waitDisappearanceWithTimeout(elementLocator: By, timeout: number): Promise<void> {
239
225
  Logger.trace(`DriverHelper.waitDisappearanceWithTimeout ${elementLocator}`);
240
226
 
241
227
  await this.getDriver().wait(async () => {
@@ -249,7 +235,7 @@ export class DriverHelper {
249
235
 
250
236
  public async waitAllDisappearance(locators: Array<By>,
251
237
  attemptsPerLocator: number = TestConstants.TS_SELENIUM_DEFAULT_ATTEMPTS,
252
- pollingPerLocator: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING) {
238
+ pollingPerLocator: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING): Promise<void> {
253
239
 
254
240
  Logger.trace(`DriverHelper.waitAllDisappearance ${locators}`);
255
241
 
@@ -258,13 +244,13 @@ export class DriverHelper {
258
244
  }
259
245
  }
260
246
 
261
- public async waitAndClick(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM) {
247
+ public async waitAndClick(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM): Promise<void> {
262
248
  const polling: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING;
263
249
  const attempts: number = Math.ceil(timeout / polling);
264
250
 
265
251
  Logger.trace(`DriverHelper.waitAndClick ${elementLocator}`);
266
252
 
267
- for (let i = 0; i < attempts; i++) {
253
+ for (let i: number = 0; i < attempts; i++) {
268
254
  let element: WebElement;
269
255
  try {
270
256
  element = await this.waitVisibility(elementLocator, polling);
@@ -299,7 +285,6 @@ export class DriverHelper {
299
285
  }
300
286
 
301
287
  throw new error.TimeoutError(`Exceeded maximum clicking attempts, the '${elementLocator}' element is not clickable`);
302
-
303
288
  }
304
289
 
305
290
  public async waitAndGetElementAttribute(elementLocator: By, attribute: string,
@@ -309,7 +294,7 @@ export class DriverHelper {
309
294
 
310
295
  Logger.trace(`DriverHelper.waitAndGetElementAttribute ${elementLocator} attribute: '${attribute}'`);
311
296
 
312
- for (let i = 0; i < attempts; i++) {
297
+ for (let i: number = 0; i < attempts; i++) {
313
298
  let element: WebElement;
314
299
  try {
315
300
  element = await this.waitVisibility(elementLocator, polling);
@@ -329,8 +314,7 @@ export class DriverHelper {
329
314
  }
330
315
 
331
316
  try {
332
- const attributeValue = await element.getAttribute(attribute);
333
- return attributeValue;
317
+ return await element.getAttribute(attribute);
334
318
  } catch (err) {
335
319
  if (err instanceof error.StaleElementReferenceError) {
336
320
  await this.wait(polling);
@@ -352,7 +336,7 @@ export class DriverHelper {
352
336
 
353
337
  Logger.trace(`DriverHelper.waitAndGetCssValue ${elementLocator} cssAttribute: ${cssAttribute}`);
354
338
 
355
- for (let i = 0; i < attempts; i++) {
339
+ for (let i: number = 0; i < attempts; i++) {
356
340
  let element: WebElement;
357
341
  try {
358
342
  element = await this.waitVisibility(elementLocator, polling);
@@ -372,8 +356,7 @@ export class DriverHelper {
372
356
  }
373
357
 
374
358
  try {
375
- const cssAttributeValue = await element.getCssValue(cssAttribute);
376
- return cssAttributeValue;
359
+ return await element.getCssValue(cssAttribute);
377
360
  } catch (err) {
378
361
  if (err instanceof error.StaleElementReferenceError) {
379
362
  await this.wait(polling);
@@ -391,7 +374,7 @@ export class DriverHelper {
391
374
  public async waitAttributeValue(elementLocator: By,
392
375
  attribute: string,
393
376
  expectedValue: string,
394
- timeout: number) {
377
+ timeout: number): Promise<void> {
395
378
 
396
379
  Logger.trace(`DriverHelper.waitAttributeValue ${elementLocator}`);
397
380
 
@@ -404,7 +387,7 @@ export class DriverHelper {
404
387
  `The '${attribute}' attribute value doesn't match with expected value '${expectedValue}'`);
405
388
  }
406
389
 
407
- public async type(elementLocator: By, text: string, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM) {
390
+ public async type(elementLocator: By, text: string, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM): Promise<void> {
408
391
  const polling: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING;
409
392
  const attempts: number = Math.ceil(timeout / polling);
410
393
 
@@ -414,7 +397,7 @@ export class DriverHelper {
414
397
  Logger.trace(`DriverHelper.type ${elementLocator} text: ${text}`);
415
398
  }
416
399
 
417
- for (let i = 0; i < attempts; i++) {
400
+ for (let i: number = 0; i < attempts; i++) {
418
401
  let element: WebElement;
419
402
  try {
420
403
  element = await this.waitVisibility(elementLocator, polling);
@@ -450,13 +433,13 @@ export class DriverHelper {
450
433
  throw new error.TimeoutError(`Exceeded maximum typing attempts, to the '${elementLocator}' element`);
451
434
  }
452
435
 
453
- public async typeToInvisible(elementLocator: By, text: string, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM) {
436
+ public async typeToInvisible(elementLocator: By, text: string, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM): Promise<void> {
454
437
  const polling: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING;
455
438
  const attempts: number = Math.ceil(timeout / polling);
456
439
 
457
440
  Logger.trace(`DriverHelper.typeToInvisible ${elementLocator} text: ${text}`);
458
441
 
459
- for (let i = 0; i < attempts; i++) {
442
+ for (let i: number = 0; i < attempts; i++) {
460
443
  let element: WebElement;
461
444
  try {
462
445
  element = await this.waitPresence(elementLocator, polling);
@@ -492,13 +475,13 @@ export class DriverHelper {
492
475
  throw new error.TimeoutError(`Exceeded maximum typing attempts, to the '${elementLocator}' element`);
493
476
  }
494
477
 
495
- public async clear(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM) {
478
+ public async clear(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM): Promise<void> {
496
479
  const polling: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING;
497
480
  const attempts: number = Math.ceil(timeout / polling);
498
481
 
499
482
  Logger.trace(`DriverHelper.clear ${elementLocator}`);
500
483
 
501
- for (let i = 0; i < attempts; i++) {
484
+ for (let i: number = 0; i < attempts; i++) {
502
485
  let element: WebElement;
503
486
  try {
504
487
  element = await this.waitVisibility(elementLocator, polling);
@@ -534,13 +517,13 @@ export class DriverHelper {
534
517
  throw new error.TimeoutError(`Exceeded maximum clearing attempts, to the '${elementLocator}' element`);
535
518
  }
536
519
 
537
- public async clearInvisible(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM) {
520
+ public async clearInvisible(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM): Promise<void> {
538
521
  const polling: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING;
539
522
  const attempts: number = Math.ceil(timeout / polling);
540
523
 
541
524
  Logger.trace(`DriverHelper.clearInvisible ${elementLocator}`);
542
525
 
543
- for (let i = 0; i < attempts; i++) {
526
+ for (let i: number = 0; i < attempts; i++) {
544
527
  let element: WebElement;
545
528
  try {
546
529
  element = await this.waitPresence(elementLocator, polling);
@@ -576,7 +559,7 @@ export class DriverHelper {
576
559
  throw new error.TimeoutError(`Exceeded maximum clearing attempts, to the '${elementLocator}' element`);
577
560
  }
578
561
 
579
- public async enterValue(elementLocator: By, text: string, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM) {
562
+ public async enterValue(elementLocator: By, text: string, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM): Promise<void> {
580
563
  if (elementLocator.toString().toLocaleLowerCase().includes('password')) {
581
564
  Logger.trace(`DriverHelper.enterValue ${elementLocator} text: ***`);
582
565
  } else {
@@ -590,7 +573,7 @@ export class DriverHelper {
590
573
  await this.waitAttributeValue(elementLocator, 'value', text, timeout);
591
574
  }
592
575
 
593
- public async waitAndSwitchToFrame(iframeLocator: By, timeout: number) {
576
+ public async waitAndSwitchToFrame(iframeLocator: By, timeout: number): Promise<void> {
594
577
  Logger.trace(`DriverHelper.waitAndSwitchToFrame ${iframeLocator}`);
595
578
 
596
579
  await this.driver.wait(until.ableToSwitchToFrame(iframeLocator), timeout);
@@ -602,7 +585,7 @@ export class DriverHelper {
602
585
 
603
586
  Logger.trace(`DriverHelper.waitAndGetText ${elementLocator}`);
604
587
 
605
- for (let i = 0; i < attempts; i++) {
588
+ for (let i: number = 0; i < attempts; i++) {
606
589
  let element: WebElement;
607
590
  try {
608
591
  element = await this.waitVisibility(elementLocator, polling);
@@ -622,8 +605,7 @@ export class DriverHelper {
622
605
  }
623
606
 
624
607
  try {
625
- const innerText: string = await element.getText();
626
- return innerText;
608
+ return await element.getText();
627
609
  } catch (err) {
628
610
  if (err instanceof error.StaleElementReferenceError) {
629
611
  await this.wait(polling);
@@ -641,71 +623,22 @@ export class DriverHelper {
641
623
  public async waitAndGetValue(elementLocator: By, timeout: number): Promise<string> {
642
624
  Logger.trace(`DriverHelper.waitAndGetValue ${elementLocator}`);
643
625
 
644
- const elementValue: string = await this.waitAndGetElementAttribute(elementLocator, 'value', timeout);
645
- return elementValue;
626
+ return await this.waitAndGetElementAttribute(elementLocator, 'value', timeout);
646
627
  }
647
628
 
648
- public async waitUntilTrue(callback: any, timeout: number) {
629
+ public async waitUntilTrue(callback: any, timeout: number): Promise<void> {
649
630
  Logger.trace('DriverHelper.waitUntilTrue');
650
631
 
651
632
  await this.driver.wait(callback, timeout);
652
633
  }
653
634
 
654
- /**
655
- * @deprecated Method deprecated. Use the next method instead.
656
- * @see BrowserTabsUtil.refreshPage()
657
- */
658
- public async reloadPage() {
659
- Logger.debug('DriverHelper.reloadPage');
660
-
661
- await this.driver.navigate().refresh();
662
- }
663
-
664
- /**
665
- * @deprecated Method deprecated. Use the next method instead.
666
- * @see BrowserTabsUtil.navigateAndWaitToUrl()
667
- */
668
- public async navigateAndWaitToUrl(url: string, timeout: number = TimeoutConstants.TS_SELENIUM_WAIT_FOR_URL) {
669
- Logger.trace(`DriverHelper.navigateAndWaitToUrl ${url}`);
670
-
671
- await this.navigateToUrl(url);
672
- await this.waitURL(url, timeout);
673
- }
674
-
675
- /**
676
- * @deprecated Method deprecated. Use the next method instead.
677
- * @see BrowserTabsUtil.navigateTo()
678
- */
679
- public async navigateToUrl(url: string) {
680
- Logger.debug(`DriverHelper.navigateToUrl ${url}`);
681
-
682
- await this.driver.navigate().to(url);
683
- }
684
-
685
- /**
686
- * @deprecated Method deprecated. Use the next method instead.
687
- * @see BrowserTabsUtil.waitURL()
688
- */
689
- public async waitURL(expectedUrl: string, timeout: number) {
690
- Logger.trace(`DriverHelper.waitURL ${expectedUrl}`);
691
-
692
- await this.getDriver().wait(async () => {
693
- const currentUrl: string = await this.getDriver().getCurrentUrl();
694
- const urlEquals: boolean = currentUrl === expectedUrl;
695
-
696
- if (urlEquals) {
697
- return true;
698
- }
699
- }, timeout);
700
- }
701
-
702
- public async scrollTo(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM) {
635
+ public async scrollTo(elementLocator: By, timeout: number = TimeoutConstants.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM): Promise<void> {
703
636
  const polling: number = TestConstants.TS_SELENIUM_DEFAULT_POLLING;
704
637
  const attempts: number = Math.ceil(timeout / polling);
705
638
 
706
639
  Logger.trace(`DriverHelper.scrollTo ${elementLocator}`);
707
640
 
708
- for (let i = 0; i < attempts; i++) {
641
+ for (let i: number = 0; i < attempts; i++) {
709
642
  let element: WebElement;
710
643
  try {
711
644
  element = await this.waitPresence(elementLocator, polling);
@@ -741,14 +674,6 @@ export class DriverHelper {
741
674
  throw new error.TimeoutError(`Exceeded maximum mouse move attempts, for the '${elementLocator}' element`);
742
675
  }
743
676
 
744
- /**
745
- * @deprecated Method deprecated. Use the next method instead.
746
- * @see BrowserTabsUtil.getCurrentUrl()
747
- */
748
- public async getCurrentUrl(): Promise<string> {
749
- return await this.driver.getCurrentUrl();
750
- }
751
-
752
677
  getDriver(): ThenableWebDriver {
753
678
  Logger.trace('DriverHelper.getDriver');
754
679