[Components][E2E] Stabilize virtualization test setup after scroll#66194
Merged
ilonatommy merged 2 commits intomainfrom Apr 9, 2026
Merged
[Components][E2E] Stabilize virtualization test setup after scroll#66194ilonatommy merged 2 commits intomainfrom
ilonatommy merged 2 commits intomainfrom
Conversation
The flaky server virtualization failure happens in the setup phase that scrolls past the overscan window and assumes the rendered range has already caught up. Add a helper that reapplies the target offset and waits for the virtualized window to converge before the prepend/append assertions begin. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Stabilizes the server-side virtualization dynamic content E2E tests by making the “scroll past overscan” setup phase wait for the rendered window to actually advance before running the viewport-preservation assertions.
Changes:
- Added a shared helper to scroll to a target offset and poll until the first rendered item index advances beyond a threshold, then wait for scroll stabilization.
- Updated the prepend/append dynamic content virtualization tests to use the new stabilized scroll helper (keeping the core assertions unchanged).
Member
Author
|
/azp run |
|
Azure Pipelines successfully started running 4 pipeline(s). |
dariatiurina
approved these changes
Apr 9, 2026
ilonatommy
added a commit
to ilonatommy/aspnetcore
that referenced
this pull request
Apr 13, 2026
Apply the same retry-based scroll stabilization pattern from PR dotnet#66194 to NonZeroStartIndex_ScrollToMiddleThenMeasure. The test was racing in server mode because it set scrollTop and then immediately checked the rendered items, but the async virtualization update had not finished yet. The fix computes the target offset up front, then retries both the scroll assignment and the rendered-index check inside a single Browser.True() loop before calling WaitForScrollStabilization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ilonatommy
added a commit
to ilonatommy/aspnetcore
that referenced
this pull request
Apr 13, 2026
Apply the same retry-based scroll stabilization pattern from PR dotnet#66194 to NonZeroStartIndex_ScrollToMiddleThenMeasure. The test was racing in server mode because it set scrollTop and then immediately checked the rendered items, but the async virtualization update had not finished yet. The fix computes the target offset up front, then retries both the scroll assignment and the rendered-index check inside a single Browser.True() loop before calling WaitForScrollStabilization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ilonatommy
added a commit
to ilonatommy/aspnetcore
that referenced
this pull request
Apr 13, 2026
Apply the same retry-based scroll stabilization pattern from PR dotnet#66194 to NonZeroStartIndex_ScrollToMiddleThenMeasure. The test was racing in server mode because it set scrollTop and then immediately checked the rendered items, but the async virtualization update had not finished yet. The fix computes the target offset up front, then retries both the scroll assignment and the rendered-index check inside a single Browser.True() loop before calling WaitForScrollStabilization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ilonatommy
added a commit
that referenced
this pull request
Apr 17, 2026
…re test setup (#66290) * Stabilize NonZeroStartIndex_ScrollToMiddleThenMeasure E2E test setup Apply the same retry-based scroll stabilization pattern from PR #66194 to NonZeroStartIndex_ScrollToMiddleThenMeasure. The test was racing in server mode because it set scrollTop and then immediately checked the rendered items, but the async virtualization update had not finished yet. The fix computes the target offset up front, then retries both the scroll assignment and the rendered-index check inside a single Browser.True() loop before calling WaitForScrollStabilization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Apply review feedback: fix spacing and reuse ScrollToOffsetWithStabilization helper - Fix missing space around = in targetScrollTop assignment - Extract scroll+retry logic into generalized ScrollToOffsetWithStabilization overload - Reuse the helper in NonZeroStartIndex_ScrollToMiddleThenMeasure instead of duplicating Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix bad merge: remove stale CanElevateEffectiveMaxItemCount quarantine, restore missing PrependItems quarantine The merge from main incorrectly re-introduced a quarantine for CanElevateEffectiveMaxItemCount_WhenOverscanExceedsMax (#65962) which was already fixed and unquarantined by #66291 on main. It also dropped the DynamicContent_PrependItemsWhileScrolledToMiddle quarantine (#66308) that was added by #66312 on main. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use MutationObserver instead of scroll retry loop in NonZeroStartIndex test Replace the retry-based ScrollToOffsetWithStabilization call with a single scrollTop assignment followed by a MutationObserver that waits for Blazor's DOM update to settle. This makes the test more deterministic: it scrolls once and waits for the effect, rather than retrying the scroll which could mask real bugs where the component fails to handle the initial scroll correctly. The MutationObserver waits for a 200ms quiet period after the last DOM mutation, with a 2s fallback timeout. After that, scroll position stabilization is verified, and the item index assertion is a hard assert (not a retry loop). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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
Why
The intermittent failure has been happening in the preparation stage, where the test sets
scrollTop = 5000and then immediately expects the rendered range to have moved beyond the overscan window. In server mode that can race with the async virtualization update, so the test can fail before it even reaches the real prepend assertion.Test