[ZEPPELIN-6562] Fix specs that silently pass or flake because they target DOM the new UI no longer renders - #5350
Merged
Conversation
voidmatcha
force-pushed
the
fix/e2e-flaky-stabilization
branch
2 times, most recently
from
July 27, 2026 15:18
78bef62 to
ca8457e
Compare
voidmatcha
force-pushed
the
fix/e2e-flaky-stabilization
branch
from
July 28, 2026 00:26
ca8457e to
98ab23c
Compare
tbonelee
approved these changes
Jul 29, 2026
Contributor
|
Merged into master |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What is this PR for?
Several new UI specs target DOM that the previous UI rendered. Those selectors match no element, and the result splits two ways: some checks pass without proving anything, and some waits never resolve and time out. Both symptoms come from the same cause.
The silent passes are the heavier half.
waitForParagraphExecutioninnotebook-keyboard-page.tswaits on.paragraph-control .fa-spin, .running-indicator, .paragraph-status-running. None of those classes appear in any new UI template, and.fa-spinis only a class definition in the vendored FontAwesome stylesheet that is never applied. The wait resolves immediately, so callers move on while the paragraph still readsREADY. The keyboard suite uses this helper throughout.The same selector is used as an assertion.
paragraph-functionality.spec.ts:184is meant to confirm that a cancelled paragraph stopped running, but the locator matches nothing andnot.toBeVisiblepasses whether or not execution stopped. This PR asserts that.statusreachesABORTinstead. Asserting that the cancel control disappears is not enough, because that control only renders while the paragraph isPENDINGorRUNNING, so it also disappears on natural completion. For the same reason the cancel has to happen after the run starts: the control is visible duringPENDINGtoo, so the existing code clicked it while the interpreter was still starting and exercised something other than what the test claims.The flaky half comes from three places. The trash folder's "Empty" anchor collapses when the row loses hover: its bounding box is
{width:0, height:0}unhovered and{width:12, height:17}hovered, so splitting reveal and click clicks empty space. A click that lands while a dialog is still running its open animation is not registered at all. And paragraphs arrive over the WebSocket, sowaitForLoadState('networkidle')can resolve before any paragraph has rendered.Strict-mode collisions sit on top of that.
getByRole('link', { name: 'Job' })matches the accessible name as a substring, so it also selects note links whose title contains "Job". The header and user-menu locators now passexact: true, checked against the names in the templates.Fallback selector chains move into the Page Object and narrow to the element that exists. The cancel button was
.cancel-para, [nz-tooltip*="Cancel"], [title*="Cancel"], button:has-text("Cancel"), i[nz-icon="pause-circle"], .anticon-pause-circle; only.cancel-parais in the new UI. The export dropdown is declared withoutnzTrigger, so ng-zorro opens it on hover rather than click, which is now encapsulated asopenExportMenu(). The clipboard spec produced a TEXT result because%shoutput has no%tablemarker, so the export control never rendered at all; adding the marker gives it a real TABLE result.What type of PR is it?
Bug Fix
Todos
What is the Jira issue?
ZEPPELIN-6562
How should this be tested?
cd zeppelin-web-angular npm run e2e:fast -- tests/notebook/ tests/home/ tests/share/ tests/workspace/The clipboard spec needs a shell interpreter and skips on CI. The cancel test runs on CI against the Python interpreter; measured locally, the status goes
PENDINGtoRUNNINGand reachesABORTabout ten seconds after the click, which is what the assertion timeout is set from.The dead selectors can be confirmed directly:
grep -rn "fa-spin\|running-indicator\|paragraph-status-running" zeppelin-web-angular/srcmatches only the vendored FontAwesome stylesheet and no template.Screenshots (if appropriate)
Questions: