[ZEPPELIN-6409] Fix Selenium integration test flakiness after ZEPPELIN-6400#5209
Open
jongyoul wants to merge 4 commits intoapache:masterfrom
Open
[ZEPPELIN-6409] Fix Selenium integration test flakiness after ZEPPELIN-6400#5209jongyoul wants to merge 4 commits intoapache:masterfrom
jongyoul wants to merge 4 commits intoapache:masterfrom
Conversation
2c3ecd4 to
9e4ecca
Compare
…N-6400 After ZEPPELIN-6400 moved ZeppelinConfiguration from zeppelin-interpreter to zeppelin-zengine, the subtle timing changes in interpreter initialization exposed pre-existing Selenium test flakiness. - authenticationUser(): Replace sleep(1000) with explicit wait for login modal to disappear via invisibilityOfElementLocated, preventing ElementClickInterceptedException when the next action fires too early - logoutUser(): Use clickableWait() instead of raw findElement() for robust element interaction; wrap modal close button in try-catch - testAngularRunParagraph(): Add waitForText() after re-running Angular paragraph to ensure output is re-rendered before attempting click Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9e4ecca to
bb7e497
Compare
…ement
clickAndWait() times out because Selenium considers the Angular-compiled
ng-click div as not clickable (overlay/stale element during Angular digest).
Switch to visibilityWait + executeScript("arguments[0].click()") which
bypasses Selenium's clickability check and directly triggers the DOM click.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
102ec39 to
fc68315
Compare
…ssOf The Angular paragraph re-run replaces the output DOM element. Without waiting for the old element to become stale, the test may see the old FINISHED state and try to find the new output before it exists. Fix: capture the old output element before re-run, wait for stalenessOf to confirm DOM refresh, then wait for the new element to appear. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Improves stability of Zeppelin’s Selenium-based integration tests by replacing timing-sensitive interactions with more robust waits and interaction strategies, addressing flakiness observed after interpreter startup timing changes.
Changes:
- Update
testAngularRunParagraph()to detect paragraph output refresh via staleness checks and re-locate the Angular output element before interacting. - Harden login/logout flows by switching some interactions to
clickableWait()and adding post-login UI synchronization.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
zeppelin-integration/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java |
Adds additional synchronization around Angular paragraph re-run and changes the click strategy for the Angular output element. |
zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java |
Adjusts authentication/logout helpers to use explicit waits and attempts to mitigate modal/overlay interference. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
Show resolved
Hide resolved
zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
Show resolved
Hide resolved
zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
Show resolved
Hide resolved
zeppelin-integration/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java
Show resolved
Hide resolved
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.
Summary
authenticationUser(): Replacesleep(1000)with explicit wait for the navbar user dropdown to appear (proves login succeeded and AngularJS digest is done), then force-dismiss any lingering Bootstrap modal backdrop via jQuerylogoutUser(): UseclickableWait()instead of rawfindElement()for robust element interaction; wrap modal close button in try-catchtestAngularRunParagraph(): Fix race condition wherewaitForParagraph("FINISHED")matched the previous run's state. UsestalenessOfto detect paragraph output refresh, thenvisibilityWaitfor the new element, and JavaScript click to bypass ng-click overlay issuesContext
After ZEPPELIN-6400 moved
ZeppelinConfigurationfromzeppelin-interpretertozeppelin-zengine,RemoteInterpreterServer.init()changed from loading config viaZeppelinConfiguration.load()+ overlay to pureProperties-based initialization. This subtle timing change in interpreter startup exposed pre-existing Selenium test flakiness in thetest-selenium-with-spark-module-for-spark-3-5CI job.The CI failures were:
InterpreterModeActionsIT.testPerUserIsolatedAction—ElementClickInterceptedExceptionbecause login modal was still visible when clicking the navigation dropdownZeppelinIT.testAngularRunParagraph—TimeoutExceptiondue to race condition: after re-running an Angular paragraph, the old output element was matched before the new one renderedTest plan
frontend.yml—test-selenium-with-spark-module-for-spark-3-5job passesfrontend.yml— All other E2E jobs remain green (Playwright auth failure is unrelated Firefox keyboard shortcut flakiness)