@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.
- package/README.md +11 -37
- package/build/dockerfiles/entrypoint.sh +1 -1
- package/configs/inversify.config.ts +11 -26
- package/configs/inversify.types.ts +5 -35
- package/configs/mocharc.ts +9 -3
- package/configs/sh-scripts/initDefaultValues.sh +0 -5
- package/constants/TestConstants.ts +35 -97
- package/constants/TimeoutConstants.ts +1 -1
- package/dist/configs/inversify.config.js +8 -23
- package/dist/configs/inversify.config.js.map +1 -1
- package/dist/configs/inversify.types.js +3 -33
- package/dist/configs/inversify.types.js.map +1 -1
- package/dist/configs/mocharc.js +11 -4
- package/dist/configs/mocharc.js.map +1 -1
- package/dist/constants/TestConstants.js +31 -86
- package/dist/constants/TestConstants.js.map +1 -1
- package/dist/constants/TimeoutConstants.js.map +1 -1
- package/dist/driver/ChromeDriver.js +1 -1
- package/dist/driver/ChromeDriver.js.map +1 -1
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/pageobjects/dashboard/CreateWorkspace.js +8 -16
- package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
- package/dist/pageobjects/dashboard/Dashboard.js +16 -1
- package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
- package/dist/pageobjects/dashboard/Workspaces.js +1 -3
- package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
- package/dist/pageobjects/git-providers/OauthPage.js +150 -0
- package/dist/pageobjects/git-providers/OauthPage.js.map +1 -0
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js +65 -0
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -0
- package/dist/pageobjects/login/OcpRedHatLoginPage.js +67 -0
- package/dist/pageobjects/login/OcpRedHatLoginPage.js.map +1 -0
- package/dist/pageobjects/login/RedHatLoginPage.js +78 -0
- package/dist/pageobjects/login/RedHatLoginPage.js.map +1 -0
- package/dist/pageobjects/login/RegularUserOcpCheLoginPage.js +3 -21
- package/dist/pageobjects/login/RegularUserOcpCheLoginPage.js.map +1 -1
- package/dist/pageobjects/openshift/CheLoginPage.js +0 -33
- package/dist/pageobjects/openshift/CheLoginPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpLoginPage.js +0 -14
- package/dist/pageobjects/openshift/OcpLoginPage.js.map +1 -1
- package/dist/specs/MochaHooks.js +2 -2
- package/dist/specs/MochaHooks.js.map +1 -1
- package/dist/specs/SmokeTest.spec.js +49 -0
- package/dist/specs/SmokeTest.spec.js.map +1 -0
- package/dist/specs/devfiles/EmptyWorkspace.spec.js +1 -0
- package/dist/specs/devfiles/EmptyWorkspace.spec.js.map +1 -1
- package/dist/specs/devfiles/Quarkus.spec.js +50 -0
- package/dist/specs/devfiles/Quarkus.spec.js.map +1 -0
- package/dist/specs/factory/Factory.spec.js +160 -0
- package/dist/specs/factory/Factory.spec.js.map +1 -0
- package/dist/specs/factory/NoSetupRepoFactory.spec.js +228 -0
- package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -0
- package/dist/specs/factory/RefusedOAuthFactory.spec.js +220 -0
- package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -0
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +66 -0
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -0
- package/dist/tests-library/LoginTests.js +10 -2
- package/dist/tests-library/LoginTests.js.map +1 -1
- package/dist/tests-library/WorkspaceHandlingTests.js +15 -6
- package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
- package/dist/utils/BrowserTabsUtil.js +2 -21
- package/dist/utils/BrowserTabsUtil.js.map +1 -1
- package/dist/utils/CheReporter.js +5 -2
- package/dist/utils/CheReporter.js.map +1 -1
- package/dist/utils/DriverHelper.js +11 -73
- package/dist/utils/DriverHelper.js.map +1 -1
- package/dist/utils/Logger.js +5 -0
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/Sanitizer.js.map +1 -1
- package/dist/utils/ScreenCatcher.js.map +1 -1
- package/dist/utils/request-handlers/CheApiRequestHandler.js +1 -1
- package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
- package/dist/utils/vsc/GitUtil.js +36 -0
- package/dist/utils/vsc/GitUtil.js.map +1 -0
- package/dist/utils/workspace/ApiUrlResolver.js +0 -3
- package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
- package/dist/utils/workspace/TestWorkspaceUtil.js +3 -193
- package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
- package/driver/ChromeDriver.ts +3 -3
- package/index.ts +37 -0
- package/package.json +9 -5
- package/pageobjects/dashboard/CreateWorkspace.ts +10 -21
- package/pageobjects/dashboard/Dashboard.ts +37 -16
- package/pageobjects/dashboard/Workspaces.ts +21 -23
- package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +16 -16
- package/pageobjects/git-providers/OauthPage.ts +156 -0
- package/pageobjects/ide/CheCodeLocatorLoader.ts +69 -0
- package/pageobjects/login/OcpRedHatLoginPage.ts +49 -0
- package/pageobjects/login/OcpUserLoginPage.ts +1 -1
- package/pageobjects/login/RedHatLoginPage.ts +62 -0
- package/pageobjects/login/RegularUserOcpCheLoginPage.ts +2 -21
- package/pageobjects/openshift/CheLoginPage.ts +8 -57
- package/pageobjects/openshift/OcpLoginPage.ts +8 -29
- package/specs/MochaHooks.ts +9 -9
- package/specs/SmokeTest.spec.ts +50 -0
- package/specs/devfiles/EmptyWorkspace.spec.ts +1 -0
- package/specs/devfiles/Quarkus.spec.ts +52 -0
- package/specs/factory/Factory.spec.ts +199 -0
- package/specs/factory/NoSetupRepoFactory.spec.ts +272 -0
- package/specs/factory/RefusedOAuthFactory.spec.ts +260 -0
- package/specs/miscellaneous/PredefinedNamespace.spec.ts +74 -0
- package/tests-library/LoginTests.ts +9 -1
- package/tests-library/WorkspaceHandlingTests.ts +16 -7
- package/tslint.json +4 -4
- package/utils/BrowserTabsUtil.ts +9 -31
- package/utils/CheReporter.ts +12 -8
- package/utils/DriverHelper.ts +40 -115
- package/utils/Logger.ts +13 -8
- package/utils/Sanitizer.ts +0 -1
- package/utils/ScreenCatcher.ts +8 -7
- package/utils/request-handlers/CheApiRequestHandler.ts +1 -1
- package/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +2 -1
- package/utils/vsc/GitUtil.ts +25 -0
- package/utils/workspace/ApiUrlResolver.ts +3 -6
- package/utils/workspace/ITestWorkspaceUtil.ts +1 -56
- package/utils/workspace/TestWorkspaceUtil.ts +24 -265
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.js +0 -97
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.js.map +0 -1
- package/dist/pageobjects/login/MultiUserLoginPage.js +0 -49
- package/dist/pageobjects/login/MultiUserLoginPage.js.map +0 -1
- package/dist/pageobjects/login/UpdateAccountInformationPage.js +0 -74
- package/dist/pageobjects/login/UpdateAccountInformationPage.js.map +0 -1
- package/dist/pageobjects/third-parties/GitLoginPage.js +0 -85
- package/dist/pageobjects/third-parties/GitLoginPage.js.map +0 -1
- package/dist/pageobjects/third-parties/GitOauthAppsSettings.js +0 -110
- package/dist/pageobjects/third-parties/GitOauthAppsSettings.js.map +0 -1
- package/dist/specs/login/LinkCheAndOcpUsers.spec.js +0 -40
- package/dist/specs/login/LinkCheAndOcpUsers.spec.js.map +0 -1
- package/dist/utils/WorkspaceNameHandler.js +0 -60
- package/dist/utils/WorkspaceNameHandler.js.map +0 -1
- package/dist/utils/request-handlers/tokens/CheMultiuserTokenHandler.js +0 -50
- package/dist/utils/request-handlers/tokens/CheMultiuserTokenHandler.js.map +0 -1
- package/dist/utils/request-handlers/tokens/ITokenHandler.js +0 -12
- package/dist/utils/request-handlers/tokens/ITokenHandler.js.map +0 -1
- package/dist/utils/vsc/CheGitApi.js +0 -42
- package/dist/utils/vsc/CheGitApi.js.map +0 -1
- package/dist/utils/vsc/github/GitHubUtil.js +0 -126
- package/dist/utils/vsc/github/GitHubUtil.js.map +0 -1
- package/files/devfiles/plugins/GitHubPullRequestPlugin.yaml +0 -11
- package/files/devfiles/plugins/InstallPluginUsingUI.yaml +0 -3
- package/files/devfiles/plugins/Java11PluginTest.yaml +0 -17
- package/files/devfiles/plugins/PhpPluginTest.yaml +0 -47
- package/files/devfiles/plugins/PythonPluginTest.yaml +0 -14
- package/files/devfiles/plugins/TypescriptNodeDebug2PluginTest.yaml +0 -49
- package/files/devfiles/plugins/VscodeKubernetesPlugin.yaml +0 -12
- package/files/devfiles/plugins/VscodeShellcheckPlugin.yaml +0 -12
- package/files/devfiles/plugins/VscodeValePlugin.yaml +0 -42
- package/files/devfiles/plugins/VscodeXmlPlugin.yaml +0 -12
- package/files/devfiles/plugins/VscodeYamlPlugin.yaml +0 -12
- package/files/happy-path/containers-happy-path.yaml +0 -127
- package/files/happy-path/happy-path-workspace.yaml +0 -95
- package/files/happy-path/petclinic-classpath.txt +0 -49
- package/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.ts +0 -95
- package/pageobjects/login/MultiUserLoginPage.ts +0 -33
- package/pageobjects/login/UpdateAccountInformationPage.ts +0 -70
- package/pageobjects/third-parties/GitLoginPage.ts +0 -81
- package/pageobjects/third-parties/GitOauthAppsSettings.ts +0 -110
- package/specs/login/LinkCheAndOcpUsers.spec.ts +0 -49
- package/utils/WorkspaceNameHandler.ts +0 -48
- package/utils/request-handlers/tokens/CheMultiuserTokenHandler.ts +0 -41
- package/utils/request-handlers/tokens/ITokenHandler.ts +0 -14
- package/utils/vsc/CheGitApi.ts +0 -22
- 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.
|
|
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.
|
|
114
|
-
throw new error.InvalidArgumentError(`WorkspaceHandlingTests.
|
|
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
|
-
|
|
99
|
-
|
|
98
|
+
"call-signature",
|
|
99
|
+
"member-variable-declaration",
|
|
100
100
|
"parameter",
|
|
101
|
-
"property-declaration"
|
|
102
|
-
|
|
101
|
+
"property-declaration",
|
|
102
|
+
"variable-declaration"
|
|
103
103
|
],
|
|
104
104
|
"typedef-whitespace": [
|
|
105
105
|
true,
|
package/utils/BrowserTabsUtil.ts
CHANGED
|
@@ -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
|
-
|
|
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();
|
package/utils/CheReporter.ts
CHANGED
|
@@ -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 (
|
|
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 (
|
|
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
|
|
package/utils/DriverHelper.ts
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|