@eclipse-che/che-e2e 7.73.0 → 7.74.0-dev-41d1364

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 (222) hide show
  1. package/.eslintignore +10 -0
  2. package/.eslintrc.js +183 -0
  3. package/.prettierignore +10 -0
  4. package/.prettierrc.json +10 -0
  5. package/README.md +47 -47
  6. package/configs/inversify.config.ts +14 -10
  7. package/configs/inversify.types.ts +29 -29
  8. package/configs/mocharc.ts +21 -24
  9. package/constants/API_TEST_CONSTANTS.ts +67 -0
  10. package/constants/BASE_TEST_CONSTANTS.ts +80 -0
  11. package/constants/CHROME_DRIVER_CONSTANTS.ts +54 -0
  12. package/constants/FACTORY_TEST_CONSTANTS.ts +61 -0
  13. package/constants/MONACO_CONSTANTS.ts +25 -0
  14. package/constants/OAUTH_CONSTANTS.ts +67 -0
  15. package/constants/PLUGIN_TEST_CONSTANTS.ts +15 -0
  16. package/constants/REPORTER_CONSTANTS.ts +53 -0
  17. package/constants/TIMEOUT_CONSTANTS.ts +131 -0
  18. package/dist/configs/inversify.config.js +14 -8
  19. package/dist/configs/inversify.config.js.map +1 -1
  20. package/dist/configs/inversify.types.js +2 -2
  21. package/dist/configs/inversify.types.js.map +1 -1
  22. package/dist/configs/mocharc.js +13 -16
  23. package/dist/configs/mocharc.js.map +1 -1
  24. package/dist/constants/{APITestConstants.js → API_TEST_CONSTANTS.js} +13 -13
  25. package/dist/constants/API_TEST_CONSTANTS.js.map +1 -0
  26. package/dist/constants/{BaseTestConstants.js → BASE_TEST_CONSTANTS.js} +17 -16
  27. package/dist/constants/BASE_TEST_CONSTANTS.js.map +1 -0
  28. package/dist/constants/{ChromeDriverConstants.js → CHROME_DRIVER_CONSTANTS.js} +14 -14
  29. package/dist/constants/CHROME_DRIVER_CONSTANTS.js.map +1 -0
  30. package/dist/constants/{FactoryTestConstants.js → FACTORY_TEST_CONSTANTS.js} +15 -14
  31. package/dist/constants/FACTORY_TEST_CONSTANTS.js.map +1 -0
  32. package/dist/constants/{MonacoConstants.js → MONACO_CONSTANTS.js} +8 -8
  33. package/dist/constants/MONACO_CONSTANTS.js.map +1 -0
  34. package/dist/constants/{OAuthConstants.js → OAUTH_CONSTANTS.js} +15 -15
  35. package/dist/constants/OAUTH_CONSTANTS.js.map +1 -0
  36. package/dist/constants/{PluginsTestConstants.js → PLUGIN_TEST_CONSTANTS.js} +7 -7
  37. package/dist/constants/PLUGIN_TEST_CONSTANTS.js.map +1 -0
  38. package/dist/constants/{ReporterConstants.js → REPORTER_CONSTANTS.js} +13 -13
  39. package/dist/constants/REPORTER_CONSTANTS.js.map +1 -0
  40. package/dist/constants/{TimeoutConstants.js → TIMEOUT_CONSTANTS.js} +24 -24
  41. package/dist/constants/TIMEOUT_CONSTANTS.js.map +1 -0
  42. package/dist/driver/ChromeDriver.js +12 -16
  43. package/dist/driver/ChromeDriver.js.map +1 -1
  44. package/dist/index.js +9 -9
  45. package/dist/index.js.map +1 -1
  46. package/dist/pageobjects/dashboard/CreateWorkspace.js +18 -18
  47. package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
  48. package/dist/pageobjects/dashboard/Dashboard.js +27 -27
  49. package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
  50. package/dist/pageobjects/dashboard/Workspaces.js +42 -42
  51. package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
  52. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js +44 -33
  53. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js.map +1 -1
  54. package/dist/pageobjects/git-providers/OauthPage.js +37 -35
  55. package/dist/pageobjects/git-providers/OauthPage.js.map +1 -1
  56. package/dist/pageobjects/ide/CheCodeLocatorLoader.js +10 -10
  57. package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -1
  58. package/dist/pageobjects/login/interfaces/ICheLoginPage.js +2 -2
  59. package/dist/pageobjects/login/interfaces/IOcpLoginPage.js +2 -2
  60. package/dist/pageobjects/login/kubernetes/DexLoginPage.js +10 -10
  61. package/dist/pageobjects/login/kubernetes/DexLoginPage.js.map +1 -1
  62. package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js +6 -6
  63. package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js.map +1 -1
  64. package/dist/pageobjects/login/openshift/OcpLoginPage.js +23 -23
  65. package/dist/pageobjects/login/openshift/OcpLoginPage.js.map +1 -1
  66. package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js +7 -7
  67. package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js.map +1 -1
  68. package/dist/pageobjects/login/openshift/OcpUserLoginPage.js +7 -7
  69. package/dist/pageobjects/login/openshift/OcpUserLoginPage.js.map +1 -1
  70. package/dist/pageobjects/login/openshift/RedHatLoginPage.js +11 -11
  71. package/dist/pageobjects/login/openshift/RedHatLoginPage.js.map +1 -1
  72. package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js +10 -10
  73. package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js.map +1 -1
  74. package/dist/pageobjects/openshift/OcpApplicationPage.js +7 -7
  75. package/dist/pageobjects/openshift/OcpApplicationPage.js.map +1 -1
  76. package/dist/pageobjects/openshift/OcpImportFromGitPage.js +9 -9
  77. package/dist/pageobjects/openshift/OcpImportFromGitPage.js.map +1 -1
  78. package/dist/pageobjects/openshift/OcpMainPage.js +15 -15
  79. package/dist/pageobjects/openshift/OcpMainPage.js.map +1 -1
  80. package/dist/specs/MochaHooks.js +27 -24
  81. package/dist/specs/MochaHooks.js.map +1 -1
  82. package/dist/specs/SmokeTest.spec.js +17 -13
  83. package/dist/specs/SmokeTest.spec.js.map +1 -1
  84. package/dist/specs/api/ContainerOverridesAPI.spec.js +10 -1
  85. package/dist/specs/api/ContainerOverridesAPI.spec.js.map +1 -1
  86. package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js +31 -18
  87. package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js.map +1 -1
  88. package/dist/specs/api/EmptyWorkspaceAPI.spec.js +18 -12
  89. package/dist/specs/api/EmptyWorkspaceAPI.spec.js.map +1 -1
  90. package/dist/specs/api/PodOverridesAPI.spec.js +12 -2
  91. package/dist/specs/api/PodOverridesAPI.spec.js.map +1 -1
  92. package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js +12 -8
  93. package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js.map +1 -1
  94. package/dist/specs/dashboard-samples/Quarkus.spec.js +13 -9
  95. package/dist/specs/dashboard-samples/Quarkus.spec.js.map +1 -1
  96. package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js +47 -43
  97. package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js.map +1 -1
  98. package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js +17 -10
  99. package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js.map +1 -1
  100. package/dist/specs/factory/Factory.spec.js +28 -26
  101. package/dist/specs/factory/Factory.spec.js.map +1 -1
  102. package/dist/specs/factory/NoSetupRepoFactory.spec.js +41 -36
  103. package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -1
  104. package/dist/specs/factory/RefusedOAuthFactory.spec.js +37 -35
  105. package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -1
  106. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +18 -5
  107. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -1
  108. package/dist/tests-library/LoginTests.js +7 -7
  109. package/dist/tests-library/LoginTests.js.map +1 -1
  110. package/dist/tests-library/ProjectAndFileTests.js +9 -7
  111. package/dist/tests-library/ProjectAndFileTests.js.map +1 -1
  112. package/dist/tests-library/WorkspaceHandlingTests.js +61 -78
  113. package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
  114. package/dist/utils/BrowserTabsUtil.js +29 -24
  115. package/dist/utils/BrowserTabsUtil.js.map +1 -1
  116. package/dist/utils/CheReporter.js +44 -44
  117. package/dist/utils/CheReporter.js.map +1 -1
  118. package/dist/utils/DevWorkspaceConfigurationHelper.js +19 -10
  119. package/dist/utils/DevWorkspaceConfigurationHelper.js.map +1 -1
  120. package/dist/utils/DevfilesRegistryHelper.js +25 -19
  121. package/dist/utils/DevfilesRegistryHelper.js.map +1 -1
  122. package/dist/utils/DriverHelper.js +126 -128
  123. package/dist/utils/DriverHelper.js.map +1 -1
  124. package/dist/utils/KubernetesCommandLineToolsExecutor.js +53 -46
  125. package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +1 -1
  126. package/dist/utils/Logger.js +62 -39
  127. package/dist/utils/Logger.js.map +1 -1
  128. package/dist/utils/ScreenCatcher.js +18 -12
  129. package/dist/utils/ScreenCatcher.js.map +1 -1
  130. package/dist/utils/ShellExecutor.js +9 -0
  131. package/dist/utils/ShellExecutor.js.map +1 -1
  132. package/dist/utils/StringUtil.js +17 -9
  133. package/dist/utils/StringUtil.js.map +1 -1
  134. package/dist/utils/request-handlers/CheApiRequestHandler.js +36 -34
  135. package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
  136. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js +10 -6
  137. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
  138. package/dist/utils/request-handlers/headers/IAuthorizationHeaderHandler.js +2 -2
  139. package/dist/utils/workspace/ApiUrlResolver.js +5 -5
  140. package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
  141. package/dist/utils/workspace/ITestWorkspaceUtil.js +2 -2
  142. package/dist/utils/workspace/TestWorkspaceUtil.js +36 -30
  143. package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
  144. package/dist/utils/workspace/WorkspaceStatus.js +2 -2
  145. package/dist/utils/workspace/WorkspaceStatus.js.map +1 -1
  146. package/driver/ChromeDriver.ts +45 -51
  147. package/driver/IDriver.ts +3 -3
  148. package/index.ts +9 -9
  149. package/package.json +59 -49
  150. package/pageobjects/dashboard/CreateWorkspace.ts +65 -56
  151. package/pageobjects/dashboard/Dashboard.ts +101 -100
  152. package/pageobjects/dashboard/Workspaces.ts +197 -166
  153. package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +151 -127
  154. package/pageobjects/git-providers/OauthPage.ts +177 -166
  155. package/pageobjects/ide/CheCodeLocatorLoader.ts +49 -46
  156. package/pageobjects/login/interfaces/ICheLoginPage.ts +3 -3
  157. package/pageobjects/login/interfaces/IOcpLoginPage.ts +3 -3
  158. package/pageobjects/login/kubernetes/DexLoginPage.ts +32 -31
  159. package/pageobjects/login/kubernetes/KubernetesLoginPage.ts +16 -15
  160. package/pageobjects/login/openshift/OcpLoginPage.ts +62 -55
  161. package/pageobjects/login/openshift/OcpRedHatLoginPage.ts +30 -25
  162. package/pageobjects/login/openshift/OcpUserLoginPage.ts +16 -19
  163. package/pageobjects/login/openshift/RedHatLoginPage.ts +49 -44
  164. package/pageobjects/login/openshift/RegularUserOcpCheLoginPage.ts +39 -35
  165. package/pageobjects/openshift/OcpApplicationPage.ts +21 -20
  166. package/pageobjects/openshift/OcpImportFromGitPage.ts +70 -68
  167. package/pageobjects/openshift/OcpMainPage.ts +69 -68
  168. package/resources/pod-overrides-airgap.yaml +37 -0
  169. package/specs/MochaHooks.ts +59 -50
  170. package/specs/SmokeTest.spec.ts +43 -36
  171. package/specs/api/ContainerOverridesAPI.spec.ts +33 -26
  172. package/specs/api/DevfileAcceptanceTestAPI.spec.ts +107 -94
  173. package/specs/api/EmptyWorkspaceAPI.spec.ts +62 -57
  174. package/specs/api/PodOverridesAPI.spec.ts +42 -32
  175. package/specs/dashboard-samples/EmptyWorkspace.spec.ts +31 -27
  176. package/specs/dashboard-samples/Quarkus.spec.ts +34 -30
  177. package/specs/dashboard-samples/RecommendedExtensions.spec.ts +192 -170
  178. package/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +62 -55
  179. package/specs/factory/Factory.spec.ts +178 -166
  180. package/specs/factory/NoSetupRepoFactory.spec.ts +227 -210
  181. package/specs/factory/RefusedOAuthFactory.spec.ts +219 -203
  182. package/specs/miscellaneous/PredefinedNamespace.spec.ts +64 -50
  183. package/tests-library/LoginTests.ts +34 -32
  184. package/tests-library/ProjectAndFileTests.ts +21 -18
  185. package/tests-library/WorkspaceHandlingTests.ts +98 -108
  186. package/tsconfig.json +15 -15
  187. package/utils/BrowserTabsUtil.ts +104 -98
  188. package/utils/CheReporter.ts +142 -148
  189. package/utils/DevWorkspaceConfigurationHelper.ts +70 -61
  190. package/utils/DevfilesRegistryHelper.ts +67 -58
  191. package/utils/DriverHelper.ts +726 -701
  192. package/utils/KubernetesCommandLineToolsExecutor.ts +196 -172
  193. package/utils/Logger.ts +104 -75
  194. package/utils/ScreenCatcher.ts +59 -48
  195. package/utils/ShellExecutor.ts +19 -11
  196. package/utils/StringUtil.ts +40 -32
  197. package/utils/request-handlers/CheApiRequestHandler.ts +92 -87
  198. package/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +32 -21
  199. package/utils/request-handlers/headers/IAuthorizationHeaderHandler.ts +3 -3
  200. package/utils/workspace/ApiUrlResolver.ts +31 -26
  201. package/utils/workspace/ITestWorkspaceUtil.ts +31 -31
  202. package/utils/workspace/TestWorkspaceUtil.ts +153 -142
  203. package/utils/workspace/WorkspaceStatus.ts +5 -5
  204. package/constants/APITestConstants.ts +0 -56
  205. package/constants/BaseTestConstants.ts +0 -65
  206. package/constants/ChromeDriverConstants.ts +0 -46
  207. package/constants/FactoryTestConstants.ts +0 -51
  208. package/constants/MonacoConstants.ts +0 -22
  209. package/constants/OAuthConstants.ts +0 -57
  210. package/constants/PluginsTestConstants.ts +0 -15
  211. package/constants/ReporterConstants.ts +0 -45
  212. package/constants/TimeoutConstants.ts +0 -113
  213. package/dist/constants/APITestConstants.js.map +0 -1
  214. package/dist/constants/BaseTestConstants.js.map +0 -1
  215. package/dist/constants/ChromeDriverConstants.js.map +0 -1
  216. package/dist/constants/FactoryTestConstants.js.map +0 -1
  217. package/dist/constants/MonacoConstants.js.map +0 -1
  218. package/dist/constants/OAuthConstants.js.map +0 -1
  219. package/dist/constants/PluginsTestConstants.js.map +0 -1
  220. package/dist/constants/ReporterConstants.js.map +0 -1
  221. package/dist/constants/TimeoutConstants.js.map +0 -1
  222. package/tslint.json +0 -126
@@ -1,5 +1,5 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019-2023 Red Hat, Inc.
1
+ /** *******************************************************************
2
+ * copyright (c) 2019-2023 Red Hat, Inc.
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -14,40 +14,42 @@ import { BrowserTabsUtil } from '../utils/BrowserTabsUtil';
14
14
  import { inject, injectable } from 'inversify';
15
15
  import { Dashboard } from '../pageobjects/dashboard/Dashboard';
16
16
  import { IOcpLoginPage } from '../pageobjects/login/interfaces/IOcpLoginPage';
17
- import { BaseTestConstants } from '../constants/BaseTestConstants';
17
+ import { BASE_TEST_CONSTANTS } from '../constants/BASE_TEST_CONSTANTS';
18
18
 
19
19
  @injectable()
20
20
  export class LoginTests {
21
- constructor(
22
- @inject(CLASSES.BrowserTabsUtil) private readonly browserTabsUtil: BrowserTabsUtil,
23
- @inject(TYPES.CheLogin) private readonly productLoginPage: ICheLoginPage,
24
- @inject(TYPES.OcpLogin) private readonly ocpLoginPage: IOcpLoginPage,
25
- @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard) {
26
- }
21
+ constructor(
22
+ @inject(CLASSES.BrowserTabsUtil)
23
+ private readonly browserTabsUtil: BrowserTabsUtil,
24
+ @inject(TYPES.CheLogin)
25
+ private readonly productLoginPage: ICheLoginPage,
26
+ @inject(TYPES.OcpLogin) private readonly ocpLoginPage: IOcpLoginPage,
27
+ @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard
28
+ ) {}
27
29
 
28
- loginIntoChe(): void {
29
- test('Login', async () => {
30
- if (!(await this.browserTabsUtil.getCurrentUrl()).includes(BaseTestConstants.TS_SELENIUM_BASE_URL)) {
31
- await this.browserTabsUtil.navigateTo(BaseTestConstants.TS_SELENIUM_BASE_URL);
32
- }
33
- await this.productLoginPage.login();
34
- await this.browserTabsUtil.maximize();
35
- await this.dashboard.waitStartingPageLoaderDisappearance();
36
- });
37
- }
30
+ loginIntoChe(): void {
31
+ test('Login', async (): Promise<void> => {
32
+ if (!(await this.browserTabsUtil.getCurrentUrl()).includes(BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL)) {
33
+ await this.browserTabsUtil.navigateTo(BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL);
34
+ }
35
+ await this.productLoginPage.login();
36
+ await this.browserTabsUtil.maximize();
37
+ await this.dashboard.waitStartingPageLoaderDisappearance();
38
+ });
39
+ }
38
40
 
39
- loginIntoOcpConsole(): void {
40
- test('Login into ocp console', async () => {
41
- const openshiftConsoleUrl: string = BaseTestConstants.TS_SELENIUM_BASE_URL.replace('devspaces', 'console-openshift-console');
42
- await this.browserTabsUtil.navigateTo(openshiftConsoleUrl);
43
- await this.ocpLoginPage.login();
44
- await this.browserTabsUtil.maximize();
45
- });
46
- }
41
+ loginIntoOcpConsole(): void {
42
+ test('Login into ocp console', async (): Promise<void> => {
43
+ const openshiftConsoleUrl: string = BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL.replace('devspaces', 'console-openshift-console');
44
+ await this.browserTabsUtil.navigateTo(openshiftConsoleUrl);
45
+ this.ocpLoginPage.login();
46
+ await this.browserTabsUtil.maximize();
47
+ });
48
+ }
47
49
 
48
- logoutFromChe(): void {
49
- test('Logout', async () => {
50
- await this.dashboard.logout();
51
- });
52
- }
50
+ logoutFromChe(): void {
51
+ test('Logout', async (): Promise<void> => {
52
+ await this.dashboard.logout();
53
+ });
54
+ }
53
55
  }
@@ -1,5 +1,5 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019-2023 Red Hat, Inc.
1
+ /** *******************************************************************
2
+ * copyright (c) 2019-2023 Red Hat, Inc.
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -14,24 +14,27 @@ import { By, until } from 'selenium-webdriver';
14
14
  import { DriverHelper } from '../utils/DriverHelper';
15
15
  import { CLASSES } from '../configs/inversify.types';
16
16
  import { Logger } from '../utils/Logger';
17
- import { TimeoutConstants } from '../constants/TimeoutConstants';
17
+ import { TIMEOUT_CONSTANTS } from '../constants/TIMEOUT_CONSTANTS';
18
18
 
19
19
  @injectable()
20
20
  export class ProjectAndFileTests {
21
+ constructor(
22
+ @inject(CLASSES.DriverHelper)
23
+ private readonly driverHelper: DriverHelper
24
+ ) {}
21
25
 
22
- constructor(
23
- @inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) {}
24
-
25
- async waitWorkspaceReadinessForCheCodeEditor(): Promise<void> {
26
- Logger.debug(`${this.constructor.name}.${this.waitWorkspaceReadinessForCheCodeEditor.name} - Waiting for editor.`);
27
- try {
28
- const start: number = new Date().getTime();
29
- await this.driverHelper.getDriver().wait(until.elementLocated(By.className('monaco-workbench')), TimeoutConstants.TS_SELENIUM_START_WORKSPACE_TIMEOUT);
30
- const end: number = new Date().getTime();
31
- Logger.debug(`${this.constructor.name}.${this.waitWorkspaceReadinessForCheCodeEditor.name} - editor was opened in ${end - start} seconds.`);
32
- } catch (err) {
33
- Logger.error(`ProjectAndFileTestsCheCode.waitWorkspaceReadinessForCheCodeEditor - waiting for workspace readiness failed: ${err}`);
34
- throw err;
35
- }
36
- }
26
+ async waitWorkspaceReadinessForCheCodeEditor(): Promise<void> {
27
+ Logger.debug('waiting for editor.');
28
+ try {
29
+ const start: number = new Date().getTime();
30
+ await this.driverHelper
31
+ .getDriver()
32
+ .wait(until.elementLocated(By.className('monaco-workbench')), TIMEOUT_CONSTANTS.TS_SELENIUM_START_WORKSPACE_TIMEOUT);
33
+ const end: number = new Date().getTime();
34
+ Logger.debug(`editor was opened in ${end - start} seconds.`);
35
+ } catch (err) {
36
+ Logger.error(`waiting for workspace readiness failed: ${err}`);
37
+ throw err;
38
+ }
39
+ }
37
40
  }
@@ -1,5 +1,5 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019-2023 Red Hat, Inc.
1
+ /** *******************************************************************
2
+ * copyright (c) 2019-2023 Red Hat, Inc.
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -13,129 +13,119 @@ import { inject, injectable } from 'inversify';
13
13
  import { CLASSES } from '../configs/inversify.types';
14
14
  import { Dashboard } from '../pageobjects/dashboard/Dashboard';
15
15
  import { CreateWorkspace } from '../pageobjects/dashboard/CreateWorkspace';
16
- import { Workspaces } from '../pageobjects/dashboard/Workspaces';
17
16
  import { BrowserTabsUtil } from '../utils/BrowserTabsUtil';
18
17
  import { Logger } from '../utils/Logger';
19
18
  import { ApiUrlResolver } from '../utils/workspace/ApiUrlResolver';
20
- import { TimeoutConstants } from '../constants/TimeoutConstants';
19
+ import { TIMEOUT_CONSTANTS } from '../constants/TIMEOUT_CONSTANTS';
21
20
  import { DriverHelper } from '../utils/DriverHelper';
22
21
  import { By, error } from 'selenium-webdriver';
23
22
 
24
23
  @injectable()
25
24
  export class WorkspaceHandlingTests {
25
+ private static WORKSPACE_NAME_LOCATOR: By = By.xpath('//h1[contains(.,"Starting workspace ")]');
26
+ private static workspaceName: string = 'undefined';
27
+ private static parentGUID: string;
26
28
 
27
- static getWorkspaceName(): string {
28
- return WorkspaceHandlingTests.workspaceName;
29
- }
29
+ constructor(
30
+ @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard,
31
+ @inject(CLASSES.CreateWorkspace)
32
+ private readonly createWorkspace: CreateWorkspace,
33
+ @inject(CLASSES.BrowserTabsUtil)
34
+ private readonly browserTabsUtil: BrowserTabsUtil,
35
+ @inject(CLASSES.ApiUrlResolver)
36
+ private readonly apiUrlResolver: ApiUrlResolver,
37
+ @inject(CLASSES.DriverHelper)
38
+ private readonly driverHelper: DriverHelper
39
+ ) {}
30
40
 
31
- private static WORKSPACE_NAME_LOCATOR: By = By.xpath(`//h1[contains(.,'Starting workspace ')]`);
32
- private static workspaceName: string = 'undefined';
33
- private static parentGUID: string;
41
+ static getWorkspaceName(): string {
42
+ return WorkspaceHandlingTests.workspaceName;
43
+ }
34
44
 
35
- constructor(
36
- @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard,
37
- @inject(CLASSES.CreateWorkspace) private readonly createWorkspace: CreateWorkspace,
38
- @inject(CLASSES.Workspaces) private readonly workspaces: Workspaces,
39
- @inject(CLASSES.BrowserTabsUtil) private readonly browserTabsUtil: BrowserTabsUtil,
40
- @inject(CLASSES.ApiUrlResolver) private readonly apiUrlResolver: ApiUrlResolver,
41
- @inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) {}
45
+ setWindowHandle(guid: string): void {
46
+ WorkspaceHandlingTests.parentGUID = guid;
47
+ }
42
48
 
43
- setWindowHandle(guid: string): void {
44
- WorkspaceHandlingTests.parentGUID = guid;
45
- }
49
+ getWindowHandle(): string {
50
+ return WorkspaceHandlingTests.parentGUID;
51
+ }
46
52
 
47
- getWindowHandle(): string {
48
- return WorkspaceHandlingTests.parentGUID;
49
- }
53
+ async createAndOpenWorkspace(stack: string): Promise<void> {
54
+ await this.dashboard.clickWorkspacesButton();
55
+ await this.dashboard.waitPage();
56
+ Logger.debug('fetching user kubernetes namespace, storing auth token by getting workspaces API URL.');
57
+ await this.apiUrlResolver.getWorkspacesApiUrl();
58
+ await this.dashboard.clickCreateWorkspaceButton();
59
+ await this.createWorkspace.waitPage();
60
+ WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
61
+ await this.createWorkspace.clickOnSampleNoEditorSelection(stack);
62
+ await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TIMEOUT_CONSTANTS.TS_IDE_LOAD_TIMEOUT);
63
+ }
50
64
 
51
- createAndOpenWorkspace(stack: string): void {
52
- test(`Create and open new workspace, stack:${stack}`, async () => {
53
- await this.dashboard.clickWorkspacesButton();
54
- await this.dashboard.waitPage();
55
- Logger.debug(`Fetching user kubernetes namespace, storing auth token by getting workspaces API URL.`);
56
- await this.apiUrlResolver.getWorkspacesApiUrl();
57
- await this.dashboard.clickCreateWorkspaceButton();
58
- await this.createWorkspace.waitPage();
59
- WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
60
- await this.createWorkspace.clickOnSampleNoEditorSelection(stack);
61
- await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TimeoutConstants.TS_IDE_LOAD_TIMEOUT);
62
- });
63
- }
65
+ async createAndOpenWorkspaceFromGitRepository(factoryUrl: string): Promise<void> {
66
+ await this.dashboard.waitPage();
67
+ Logger.debug('fetching user kubernetes namespace, storing auth token by getting workspaces API URL.');
68
+ await this.apiUrlResolver.getWorkspacesApiUrl();
69
+ await this.dashboard.clickCreateWorkspaceButton();
70
+ await this.createWorkspace.waitPage();
71
+ WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
72
+ await this.createWorkspace.importFromGitUsingUI(factoryUrl);
73
+ await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TIMEOUT_CONSTANTS.TS_IDE_LOAD_TIMEOUT);
74
+ }
64
75
 
65
- 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);
74
- await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TimeoutConstants.TS_IDE_LOAD_TIMEOUT);
75
- });
76
- }
76
+ async obtainWorkspaceNameFromStartingPage(): Promise<void> {
77
+ const timeout: number = TIMEOUT_CONSTANTS.TS_IDE_LOAD_TIMEOUT;
78
+ const polling: number = TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING;
79
+ const attempts: number = Math.ceil(timeout / polling);
77
80
 
78
- openExistingWorkspace(workspaceName: string): void {
79
- test('Open and start existing workspace', async () => {
80
- await this.dashboard.waitPage();
81
- Logger.debug(`Fetching user kubernetes namespace, storing auth token by getting workspaces API URL.`);
82
- await this.apiUrlResolver.getWorkspacesApiUrl();
83
- await this.dashboard.clickWorkspacesButton();
84
- await this.workspaces.waitPage();
85
- await this.workspaces.clickOpenButton(workspaceName);
86
- });
87
- }
81
+ for (let i: number = 0; i < attempts; i++) {
82
+ try {
83
+ const startingWorkspaceLineContent: string = await this.driverHelper
84
+ .getDriver()
85
+ .findElement(WorkspaceHandlingTests.WORKSPACE_NAME_LOCATOR)
86
+ .getText();
87
+ Logger.trace(`obtained starting workspace getText():${startingWorkspaceLineContent}`);
88
+ // cutting away leading text
89
+ WorkspaceHandlingTests.workspaceName = startingWorkspaceLineContent.substring('Starting workspace '.length).trim();
90
+ Logger.trace(`trimmed workspace name from getText():${WorkspaceHandlingTests.workspaceName}`);
91
+ break;
92
+ } catch (err) {
93
+ if (err instanceof error.StaleElementReferenceError) {
94
+ Logger.trace('failed to obtain name from workspace start page, element possibly detached from DOM. Retrying.');
95
+ await this.driverHelper.wait(polling);
96
+ continue;
97
+ }
98
+ if (err instanceof error.NoSuchElementError) {
99
+ Logger.trace('failed to obtain name from workspace start page, element not visible yet. Retrying.');
100
+ await this.driverHelper.wait(polling);
101
+ continue;
102
+ }
103
+ Logger.error(`obtaining workspace name failed with an unexpected error:${err}`);
104
+ throw err;
105
+ }
106
+ }
107
+ if (WorkspaceHandlingTests.workspaceName !== '' && WorkspaceHandlingTests.workspaceName !== 'undefined') {
108
+ Logger.info(`obtained workspace name from workspace loader page: ${WorkspaceHandlingTests.workspaceName}`);
109
+ return;
110
+ }
111
+ Logger.error(`failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
112
+ throw new error.InvalidArgumentError(
113
+ `WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`
114
+ );
115
+ }
88
116
 
89
- obtainWorkspaceNameFromStartingPage(): void {
90
- test('Obtain workspace name from workspace loader page', async() => {
91
- const timeout: number = TimeoutConstants.TS_IDE_LOAD_TIMEOUT;
92
- const polling: number = TimeoutConstants.TS_SELENIUM_DEFAULT_POLLING;
93
- const attempts: number = Math.ceil(timeout / polling);
117
+ async stopWorkspace(workspaceName: string): Promise<void> {
118
+ await this.dashboard.openDashboard();
119
+ await this.dashboard.stopWorkspaceByUI(workspaceName);
120
+ }
94
121
 
95
- for (let i: number = 0; i < attempts; i++) {
96
- try {
97
- let startingWorkspaceLineContent: string = await this.driverHelper.getDriver().findElement(WorkspaceHandlingTests.WORKSPACE_NAME_LOCATOR).getText();
98
- Logger.trace(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage obtained starting workspace getText():${startingWorkspaceLineContent}`);
99
- // cutting away leading text
100
- WorkspaceHandlingTests.workspaceName = startingWorkspaceLineContent.substring('Starting workspace '.length).trim();
101
- Logger.trace(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage trimmed workspace name from getText():${WorkspaceHandlingTests.workspaceName}`);
102
- break;
103
- } catch (err) {
104
- if (err instanceof error.StaleElementReferenceError) {
105
- Logger.trace(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage Failed to obtain name from workspace start page, element possibly detached from DOM. Retrying.`);
106
- await this.driverHelper.wait(polling);
107
- continue;
108
- }
109
- if (err instanceof error.NoSuchElementError) {
110
- Logger.trace(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage Failed to obtain name from workspace start page, element not visible yet. Retrying.`);
111
- await this.driverHelper.wait(polling);
112
- continue;
113
- }
114
- Logger.error(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage Obtaining workspace name failed with an unexpected error:${err}`);
115
- throw err;
116
- }
117
- }
118
- if (WorkspaceHandlingTests.workspaceName !== '' && WorkspaceHandlingTests.workspaceName !== 'undefined') {
119
- Logger.info(`Obtained workspace name from workspace loader page: ${WorkspaceHandlingTests.workspaceName}`);
120
- return;
121
- }
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}`);
124
- });
125
- }
122
+ async removeWorkspace(workspaceName: string): Promise<void> {
123
+ await this.dashboard.openDashboard();
124
+ await this.dashboard.deleteStoppedWorkspaceByUI(workspaceName);
125
+ }
126
126
 
127
- async stopWorkspace(workspaceName: string): Promise<void> {
128
- await this.dashboard.openDashboard();
129
- await this.dashboard.stopWorkspaceByUI(workspaceName);
130
- }
131
-
132
- async removeWorkspace(workspaceName: string): Promise<void> {
133
- await this.dashboard.openDashboard();
134
- await this.dashboard.deleteStoppedWorkspaceByUI(workspaceName);
135
- }
136
-
137
- async stopAndRemoveWorkspace(workspaceName: string): Promise<void> {
138
- await this.dashboard.openDashboard();
139
- await this.dashboard.stopAndRemoveWorkspaceByUI(workspaceName);
140
- }
127
+ async stopAndRemoveWorkspace(workspaceName: string): Promise<void> {
128
+ await this.dashboard.openDashboard();
129
+ await this.dashboard.stopAndRemoveWorkspaceByUI(workspaceName);
130
+ }
141
131
  }
package/tsconfig.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
- "compilerOptions": {
3
- "skipLibCheck": true,
4
- "target": "es2017",
5
- "module": "commonjs",
6
- "strict": true,
7
- "esModuleInterop": true,
8
-
9
- "outDir": "dist",
10
- "lib": ["es2017", "dom"],
11
- "types": ["reflect-metadata", "@types/mocha", "@types/node"],
12
- "experimentalDecorators": true,
13
- "emitDecoratorMetadata": true,
14
- "noImplicitReturns": false,
15
- "sourceMap": true
16
- }
2
+ "compilerOptions": {
3
+ "skipLibCheck": true,
4
+ "target": "es2017",
5
+ "module": "commonjs",
6
+ "strict": true,
7
+ "esModuleInterop": true,
8
+ "outDir": "dist",
9
+ "lib": ["es2017", "dom"],
10
+ "types": ["reflect-metadata", "@types/mocha", "@types/node"],
11
+ "experimentalDecorators": true,
12
+ "emitDecoratorMetadata": true,
13
+ "noImplicitReturns": false,
14
+ "sourceMap": true
15
+ },
16
+ "include": [".eslintrc.js", "**/*.ts", "**/**/*.ts"]
17
17
  }
@@ -1,5 +1,5 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019-2023 Red Hat, Inc.
1
+ /** *******************************************************************
2
+ * copyright (c) 2019-2023 Red Hat, Inc.
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -8,106 +8,112 @@
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  **********************************************************************/
10
10
 
11
- import { injectable, inject } from 'inversify';
11
+ import { inject, injectable } from 'inversify';
12
12
  import { CLASSES } from '../configs/inversify.types';
13
13
  import { DriverHelper } from './DriverHelper';
14
14
  import { Logger } from './Logger';
15
- import { TimeoutConstants } from '../constants/TimeoutConstants';
16
- import { ChromeDriverConstants } from '../constants/ChromeDriverConstants';
15
+ import { TIMEOUT_CONSTANTS } from '../constants/TIMEOUT_CONSTANTS';
16
+ import { CHROME_DRIVER_CONSTANTS } from '../constants/CHROME_DRIVER_CONSTANTS';
17
17
 
18
18
  @injectable()
19
19
  export class BrowserTabsUtil {
20
- constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) { }
21
-
22
- async switchToWindow(windowHandle: string): Promise<void> {
23
- Logger.debug('BrowserTabsUtil.switchToWindow');
24
- await this.driverHelper.getDriver().switchTo().window(windowHandle);
25
- }
26
-
27
- async getAllWindowHandles(): Promise<string[]> {
28
- Logger.debug('BrowserTabsUtil.getAllWindowHandles');
29
-
30
- return (await this.driverHelper.getDriver()).getAllWindowHandles();
31
- }
32
-
33
- async getCurrentWindowHandle(): Promise<string> {
34
- Logger.debug('BrowserTabsUtil.getCurrentWindowHandle');
35
-
36
- return await this.driverHelper.getDriver().getWindowHandle();
37
- }
38
-
39
- async navigateTo(url: string): Promise<void> {
40
- Logger.debug(`BrowserTabsUtil.navigateTo ${url}`);
41
-
42
- await this.driverHelper.getDriver().navigate().to(url);
43
- }
44
-
45
- async navigateAndWaitToUrl(url: string, timeout: number = TimeoutConstants.TS_SELENIUM_WAIT_FOR_URL): Promise<void> {
46
- Logger.trace(`BrowserTabsUtil.navigateAndWaitToUrl ${url}`);
47
-
48
- await this.navigateTo(url);
49
- await this.waitURL(url, timeout);
50
- }
51
-
52
- async waitAndSwitchToAnotherWindow(currentWindowHandle: string, timeout: number): Promise<void> {
53
- Logger.debug('BrowserTabsUtil.waitAndSwitchToAnotherWindow');
54
-
55
- await this.driverHelper.waitUntilTrue(async () => {
56
- const windowHandles: string[] = await this.getAllWindowHandles();
57
-
58
- return windowHandles.length > 1;
59
- }, timeout);
60
-
61
- const windowHandles: string[] = await this.getAllWindowHandles();
62
-
63
- for (const windowHandle of windowHandles) {
64
- if (windowHandle !== currentWindowHandle) {
65
- await this.switchToWindow(windowHandle);
66
- }
67
- }
68
- }
69
-
70
- async refreshPage(): Promise<void> {
71
- Logger.debug('BrowserTabsUtil.refreshPage');
72
-
73
- await (await this.driverHelper.getDriver()).navigate().refresh();
74
- }
75
-
76
- async getCurrentUrl(): Promise<string> {
77
- return await this.driverHelper.getDriver().getCurrentUrl();
78
- }
79
-
80
- async waitURL(expectedUrl: string, timeout: number): Promise<void> {
81
- Logger.trace(`BrowserTabsUtil.waitURL ${expectedUrl}`);
82
-
83
- await this.driverHelper.getDriver().wait(async () => {
84
- const currentUrl: string = await this.driverHelper.getDriver().getCurrentUrl();
85
- const urlEquals: boolean = currentUrl === expectedUrl;
86
-
87
- if (urlEquals) {
88
- return true;
89
- }
90
- }, timeout);
91
- }
92
-
93
- async maximize(): Promise<void> {
94
- Logger.trace(`BrowserTabsUtil.maximize`);
95
- if (ChromeDriverConstants.TS_SELENIUM_LAUNCH_FULLSCREEN) {
96
- Logger.debug(`TS_SELENIUM_LAUNCH_FULLSCREEN is set to true, maximizing window.`);
97
- await this.driverHelper.getDriver().manage().window().maximize();
98
- }
99
- }
100
-
101
- async closeAllTabsExceptCurrent(): Promise<void> {
102
- Logger.trace(`${this.constructor.name}.${this.closeAllTabsExceptCurrent.name}`);
103
- const allTabsHandles: string[] = await this.getAllWindowHandles();
104
- const currentTabHandle: string = await this.getCurrentWindowHandle();
105
- allTabsHandles.splice(allTabsHandles.indexOf(currentTabHandle), 1);
106
-
107
- for (const tabHandle of allTabsHandles) {
108
- await this.switchToWindow(tabHandle);
109
- await this.driverHelper.getDriver().close();
110
- }
111
- await this.switchToWindow(currentTabHandle);
112
- }
20
+ constructor(
21
+ @inject(CLASSES.DriverHelper)
22
+ private readonly driverHelper: DriverHelper
23
+ ) {}
24
+
25
+ async switchToWindow(windowHandle: string): Promise<void> {
26
+ Logger.debug();
27
+ await this.driverHelper.getDriver().switchTo().window(windowHandle);
28
+ }
29
+
30
+ async getAllWindowHandles(): Promise<string[]> {
31
+ Logger.debug();
32
+
33
+ return (await this.driverHelper.getDriver()).getAllWindowHandles();
34
+ }
35
+
36
+ async getCurrentWindowHandle(): Promise<string> {
37
+ Logger.debug();
38
+
39
+ return await this.driverHelper.getDriver().getWindowHandle();
40
+ }
41
+
42
+ async navigateTo(url: string): Promise<void> {
43
+ Logger.debug(`${url}`);
44
+
45
+ await this.driverHelper.getDriver().navigate().to(url);
46
+ }
47
+
48
+ async navigateAndWaitToUrl(url: string, timeout: number = TIMEOUT_CONSTANTS.TS_SELENIUM_WAIT_FOR_URL): Promise<void> {
49
+ Logger.trace(`${url}`);
50
+
51
+ await this.navigateTo(url);
52
+ await this.waitURL(url, timeout);
53
+ }
54
+
55
+ async waitAndSwitchToAnotherWindow(currentWindowHandle: string, timeout: number): Promise<void> {
56
+ Logger.debug();
57
+
58
+ await this.driverHelper.waitUntilTrue(async (): Promise<boolean> => {
59
+ const windowHandles: string[] = await this.getAllWindowHandles();
60
+
61
+ return windowHandles.length > 1;
62
+ }, timeout);
63
+
64
+ const windowHandles: string[] = await this.getAllWindowHandles();
65
+
66
+ for (const windowHandle of windowHandles) {
67
+ if (windowHandle !== currentWindowHandle) {
68
+ await this.switchToWindow(windowHandle);
69
+ }
70
+ }
71
+ }
72
+
73
+ async refreshPage(): Promise<void> {
74
+ Logger.debug();
75
+
76
+ await (await this.driverHelper.getDriver()).navigate().refresh();
77
+ }
78
+
79
+ async getCurrentUrl(): Promise<string> {
80
+ return await this.driverHelper.getDriver().getCurrentUrl();
81
+ }
82
+
83
+ async waitURL(expectedUrl: string, timeout: number): Promise<void> {
84
+ Logger.trace(`${expectedUrl}`);
85
+ try {
86
+ await this.driverHelper.getDriver().wait(async (): Promise<boolean | undefined> => {
87
+ const currentUrl: string = await this.driverHelper.getDriver().getCurrentUrl();
88
+ const urlEquals: boolean = currentUrl === expectedUrl;
89
+
90
+ if (urlEquals) {
91
+ return true;
92
+ }
93
+ }, timeout);
94
+ } catch (e) {
95
+ throw e;
96
+ }
97
+ }
98
+
99
+ async maximize(): Promise<void> {
100
+ Logger.trace();
101
+ if (CHROME_DRIVER_CONSTANTS.TS_SELENIUM_LAUNCH_FULLSCREEN) {
102
+ Logger.debug('TS_SELENIUM_LAUNCH_FULLSCREEN is set to true, maximizing window.');
103
+ await this.driverHelper.getDriver().manage().window().maximize();
104
+ }
105
+ }
106
+
107
+ async closeAllTabsExceptCurrent(): Promise<void> {
108
+ Logger.trace();
109
+ const allTabsHandles: string[] = await this.getAllWindowHandles();
110
+ const currentTabHandle: string = await this.getCurrentWindowHandle();
111
+ allTabsHandles.splice(allTabsHandles.indexOf(currentTabHandle), 1);
112
+
113
+ for (const tabHandle of allTabsHandles) {
114
+ await this.switchToWindow(tabHandle);
115
+ await this.driverHelper.getDriver().close();
116
+ }
117
+ await this.switchToWindow(currentTabHandle);
118
+ }
113
119
  }