Skip to content

Fix timeout in waitDisappearance method calls in DexLoginPage; fix PR check#23705

Merged
dmytro-ndp merged 7 commits intomainfrom
che-23701
Jan 11, 2026
Merged

Fix timeout in waitDisappearance method calls in DexLoginPage; fix PR check#23705
dmytro-ndp merged 7 commits intomainfrom
che-23701

Conversation

@dmytro-ndp
Copy link
Contributor

@dmytro-ndp dmytro-ndp commented Jan 6, 2026

What does this PR do?

It fixes incorrect wait timeout when run Smoke test with empty password value, like https://github.com/che-incubator/che-code/actions/runs/20744835965/job/59559776902

          ▼ DexLoginPage.waitDexLoginPageDisappearance
            ‣ DriverHelper.waitDisappearance - By(css selector, .dex-container)
            ‣ DriverHelper.waitDisappearanceBoolean - By(css selector, .dex-container)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (1000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (1000 milliseconds)
...
(This repeats for more than one hour.)

It also fixes PR check by treating a 500 server error as normal when the workspace was deleted.

Screenshot/screencast of this PR

What issues does this PR fix or reference?

#23701

How to test this PR?

Run smoke test in che-code repo with empty password value.

Fixed EmptyWorkspace test run against Eclipse Che deployed to the Kubernetes:

          ▼ DexLoginPage.waitDexLoginPageDisappearance
            ‣ DriverHelper.waitDisappearance - By(css selector, .dex-container)
            ‣ DriverHelper.waitDisappearanceBoolean - By(css selector, .dex-container)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
            ‣ DriverHelper.isVisible - By(css selector, .dex-container)
            ‣ DriverHelper.wait - (2000 milliseconds)
    1) "before all" hook: Login for "Create and open new workspace, stack:Empty Workspace"
Successful test run

‣ DriverHelper.getDriver Empty Workspace test ▼ LoginTests.loginIntoChe ‣ BrowserTabsUtil.getCurrentUrl ‣ DriverHelper.getDriver ▼ BrowserTabsUtil.navigateTo - https://192.168.39.155.nip.io ‣ DriverHelper.navigateToUrl ‣ DriverHelper.getDriver ▼ Dashboard.waitPage ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")]) ‣ DriverHelper.waitVisibility - polling timed out attempt #1, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #2, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #3, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #4, retrying with 2000ms timeout [ERROR] DriverHelper.waitVisibility - failed with exception, out of attempts - TimeoutError: Waiting for element to be located By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")]) Wait timed out after 2140ms ▼ LoginTests.loginIntoChe - try to login into application ▼ KubernetesLoginPage.login ▼ DexLoginPage.waitDexLoginPage ‣ DriverHelper.waitVisibility - By(css selector, .dex-container) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ DexLoginPage.enterUserNameKubernetes ‣ DriverHelper.enterValue - By(css selector, *[id="login"]) text: che@eclipse.org ‣ DriverHelper.waitVisibility - By(css selector, *[id="login"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.clear - By(css selector, *[id="login"]) ‣ DriverHelper.waitVisibility - By(css selector, *[id="login"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="login"]) ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="login"]) attribute: 'value' ‣ DriverHelper.waitVisibility - By(css selector, *[id="login"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.type - By(css selector, *[id="login"]) text: che@eclipse.org ‣ DriverHelper.waitVisibility - By(css selector, *[id="login"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="login"]) ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="login"]) attribute: 'value' ‣ DriverHelper.waitVisibility - By(css selector, *[id="login"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ DexLoginPage.enterPasswordKubernetes ‣ DriverHelper.enterValue - By(css selector, *[id="password"]) text: *** ‣ DriverHelper.waitVisibility - By(css selector, *[id="password"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.clear - By(css selector, *[id="password"]) ‣ DriverHelper.waitVisibility - By(css selector, *[id="password"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="password"]) ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="password"]) attribute: 'value' ‣ DriverHelper.waitVisibility - By(css selector, *[id="password"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.type - By(css selector, *[id="password"]) text: *** ‣ DriverHelper.waitVisibility - By(css selector, *[id="password"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.waitAttributeValue - By(css selector, *[id="password"]) ‣ DriverHelper.waitAndGetElementAttribute - By(css selector, *[id="password"]) attribute: 'value' ‣ DriverHelper.waitVisibility - By(css selector, *[id="password"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ DexLoginPage.clickOnLoginButton ‣ DriverHelper.waitAndClick - By(css selector, *[id="submit-login"]) ‣ DriverHelper.waitVisibility - By(css selector, *[id="submit-login"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ DexLoginPage.waitDexLoginPageDisappearance ‣ DriverHelper.waitDisappearance - By(css selector, .dex-container) ‣ DriverHelper.waitDisappearanceBoolean - By(css selector, .dex-container) ‣ DriverHelper.isVisible - By(css selector, .dex-container) ‣ BrowserTabsUtil.maximize ▼ BrowserTabsUtil.maximize - TS_SELENIUM_LAUNCH_FULLSCREEN is set to true, maximizing window. ‣ DriverHelper.getDriver ▼ Dashboard.waitStartingPageLoaderDisappearance ‣ DriverHelper.waitDisappearance - By(css selector, .main-page-loader) ‣ DriverHelper.waitDisappearanceBoolean - By(css selector, .main-page-loader) ‣ DriverHelper.isVisible - By(css selector, .main-page-loader) ‣ DriverHelper.wait - (2000 milliseconds) ‣ DriverHelper.isVisible - By(css selector, .main-page-loader) ‣ DriverHelper.wait - (2000 milliseconds) ▼ Dashboard.clickWorkspacesButton ‣ DriverHelper.waitAndClick - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")]) ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")]) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ Dashboard.waitPage ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ WorkspaceHandlingTests.createAndOpenWorkspace - fetching user kubernetes namespace, storing auth token by getting workspaces API URL. ▼ ApiUrlResolver.obtainUserNamespace ‣ ApiUrlResolver.obtainUserNamespace - USER_NAMESPACE.length = 0, calling kubernetes API ‣ DriverHelper.getDriver (node:808869) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification. (Use `node --trace-warnings ...` to show where the warning was created) ▼ ApiUrlResolver.obtainUserNamespace - kubeapi success: admin-che ▼ Dashboard.clickCreateWorkspaceButton ‣ DriverHelper.waitAndClick - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"]) ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ CreateWorkspace.waitPage ▼ CreateWorkspace.waitTitleContains - text: "Create Workspace" ‣ DriverHelper.waitVisibility - By(xpath, //h1[contains(text(), 'Create Workspace')]) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ CreateWorkspace.setCreateNewWorkspaceCheckbox - checked: true ▼ CreateWorkspace.isCreateNewWorkspaceCheckboxChecked ‣ DriverHelper.waitPresence - By(xpath, //input[@id="create-new-if-exist-switch"]) ▼ CreateWorkspace.setCreateNewWorkspaceCheckbox - Checkbox is already set, no action needed ▼ BrowserTabsUtil.getCurrentWindowHandle ‣ DriverHelper.getDriver ▼ CreateWorkspace.clickOnSampleNoEditorSelection - sampleName: "Empty Workspace" ‣ CreateWorkspace.getSampleLocator - sampleName: Empty Workspace, used default editor ‣ DriverHelper.waitAndClick - By(xpath, //article[contains(@Class, 'sample-card')]//div[text()='Empty Workspace']) ‣ DriverHelper.waitVisibility - By(xpath, //article[contains(@Class, 'sample-card')]//div[text()='Empty Workspace']) ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ BrowserTabsUtil.waitAndSwitchToAnotherWindow ‣ DriverHelper.waitUntilTrue ▼ BrowserTabsUtil.getAllWindowHandles ‣ DriverHelper.getDriver ▼ BrowserTabsUtil.getAllWindowHandles ‣ DriverHelper.getDriver ▼ BrowserTabsUtil.switchToWindow ‣ DriverHelper.getDriver ✔ Create and open new workspace, stack:Empty Workspace ‣ DriverHelper.getDriver ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - failed to obtain name from workspace start page, element not visible yet. Retrying. ‣ DriverHelper.wait - (2000 milliseconds) ‣ DriverHelper.getDriver ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - failed to obtain name from workspace start page, element not visible yet. Retrying. ‣ DriverHelper.wait - (2000 milliseconds) ‣ DriverHelper.getDriver ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - obtained starting workspace getText():Starting workspace empty-bxtk-ta2w ‣ WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - trimmed workspace name from getText():empty-bxtk-ta2w • WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage - obtained workspace name from workspace loader page: empty-bxtk-ta2w ✔ Obtain workspace name from workspace loader page ▼ registerRunningWorkspace - with workspaceName:empty-bxtk-ta2w ✔ Register running workspace ▼ ProjectAndFileTests.waitWorkspaceReadinessForCheCodeEditor - waiting for editor. ‣ DriverHelper.waitVisibility - By(css selector, .monaco-workbench) ‣ DriverHelper.waitVisibility - polling timed out attempt #1, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #2, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #3, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #4, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #5, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #6, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #7, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #8, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - polling timed out attempt #9, retrying with 2000ms timeout ‣ DriverHelper.waitVisibility - element is located and is visible. ▼ ProjectAndFileTests.waitWorkspaceReadinessForCheCodeEditor - editor was opened in 19412 seconds. ▼ Editor sections: ▼ Explorer (Ctrl+Shift+E) ▼ Search (Ctrl+Shift+F) ▼ Source Control (Ctrl+Shift+G) ▼ Run and Debug (Ctrl+Shift+D) ▼ Extensions (Ctrl+Shift+X) ✔ Wait workspace readiness ▼ Dashboard.openDashboard ‣ DriverHelper.navigateToUrl ‣ DriverHelper.getDriver ‣ DriverHelper.getDriver ▼ Dashboard.openDashboard - No alert detected ▼ Dashboard.waitPage ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[contains(text(), "Workspaces (")]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ DriverHelper.waitVisibility - By(xpath, //div[@id="page-sidebar"]//a[text()="Create Workspace"]) ‣ DriverHelper.waitVisibility - element is located and is visible. ‣ BrowserTabsUtil.closeAllTabsExceptCurrent ▼ BrowserTabsUtil.getAllWindowHandles ‣ DriverHelper.getDriver ▼ BrowserTabsUtil.getCurrentWindowHandle ‣ DriverHelper.getDriver ▼ BrowserTabsUtil.switchToWindow ‣ DriverHelper.getDriver ‣ DriverHelper.getDriver ▼ BrowserTabsUtil.switchToWindow ‣ DriverHelper.getDriver ▼ TestWorkspaceUtil.stopAndDeleteWorkspaceByName ▼ TestWorkspaceUtil.stopWorkspaceByName - empty-bxtk-ta2w ▼ ApiUrlResolver.obtainUserNamespace ‣ ApiUrlResolver.obtainUserNamespace - USER_NAMESPACE.length = 0, calling kubernetes API ‣ DriverHelper.getDriver ▼ ApiUrlResolver.obtainUserNamespace - kubeapi success: admin-che ‣ DriverHelper.getDriver ▼ TestWorkspaceUtil.waitWorkspaceStatus ▼ ApiUrlResolver.obtainUserNamespace - admin-che ‣ DriverHelper.getDriver ‣ DriverHelper.wait - (1000 milliseconds) ▼ ApiUrlResolver.obtainUserNamespace - admin-che ‣ DriverHelper.getDriver ▼ TestWorkspaceUtil.stopWorkspaceByName - empty-bxtk-ta2w stopped successfully ▼ TestWorkspaceUtil.deleteWorkspaceByName - empty-bxtk-ta2w ▼ ApiUrlResolver.obtainUserNamespace - admin-che ‣ DriverHelper.getDriver ‣ DriverHelper.getDriver ‣ TestWorkspaceUtil.deleteWorkspaceByName - GET dashboard/api/namespace/admin-che/devworkspaces/empty-bxtk-ta2w returned status: 200; data: [object Object] ‣ DriverHelper.wait - (1000 milliseconds) ‣ DriverHelper.getDriver ▼ TestWorkspaceUtil.deleteWorkspaceByName - empty-bxtk-ta2w deleted successfully ▼ at /home/ndp/projects/che/tests/e2e/specs/MochaHooks.ts:39:12 - delete workspace name

4 passing (46s)

PR Checklist

As the author of this Pull Request I made sure that:

Reviewers

Reviewers, please comment how you tested the PR when approving it.

--
Assisted-by: Claude Code

Signed-off-by: Dmytro Nochevnov <dnochevn@redhat.com>
…tyWorkspace test

Signed-off-by: Dmytro Nochevnov <dnochevn@redhat.com>
Signed-off-by: Dmytro Nochevnov <dnochevn@redhat.com>
Signed-off-by: Dmytro Nochevnov <dnochevn@redhat.com>
Signed-off-by: Dmytro Nochevnov <dnochevn@redhat.com>
Signed-off-by: Dmytro Nochevnov <dnochevn@redhat.com>
@dmytro-ndp dmytro-ndp changed the title Fix timeout in waitDisappearance method calls in DexLoginPage Fix timeout in waitDisappearance method calls in DexLoginPage; fix PR check Jan 11, 2026
Copy link
Contributor

@SkorikSergey SkorikSergey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to merge

@dmytro-ndp dmytro-ndp merged commit 8ca713c into main Jan 11, 2026
6 checks passed
@dmytro-ndp dmytro-ndp deleted the che-23701 branch January 11, 2026 15:34
dmytro-ndp added a commit that referenced this pull request Jan 29, 2026
… check (#23705)

* Fix waitDisappearance method calls in Dashboard and DexLoginPage to use attempts and polling interval
* Treat a 500 server error as normal when the workspace was deleted
--
Assisted-by: Claude Code

Signed-off-by: Dmytro Nochevnov <dnochevn@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants