Fix InvalidOperationException in Selectors when running parallel tests #3208
+2
−2
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.
A common pattern we use in other places: https://github.com/search?q=repo%3Amicrosoft%2Fplaywright-dotnet+%2Fforeach.*s%5C.ToArray%5C%28%5C%29%5C%29%2F&type=code
Fixes a thread safety issue in
Selectors.cs
that causesSystem.InvalidOperationException: Collection was modified; enumeration operation may not execute
when running tests in parallel.Problem
The issue occurs in two methods in the
Selectors
class:SetTestIdAttribute()
at line 70RegisterAsync()
at line 56Both methods enumerate over the
_contextsForSelectors
list while other threads may be modifying it (adding/removing browser contexts), causing the classic collection modification exception.The
_contextsForSelectors
list is modified by:Browser.ConnectToBrowserType()
andBrowser.DidCreateContext()
- adds contextsBrowserContext.OnClose()
- removes contextsSolution
Create a snapshot of the list before enumeration using
ToArray()
to prevent the collection modification exception:This approach:
Fixes #3207.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.