diff --git a/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs b/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs index ff7e56f9a363..285ebe44d3fe 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/CircuitGracefulTerminationTests.cs @@ -33,7 +33,7 @@ public override async Task InitializeAsync() // instance across tests (One of the tests closes the browser). For that reason we simply create // a new browser instance for every test in this class sos that there are no issues when running // them together. - await base.InitializeAsync(Guid.NewGuid().ToString()); + await base.InitializeAsync(null); } protected override void InitializeAsyncCore() diff --git a/src/Components/test/E2ETest/ServerExecutionTests/HotReloadTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/HotReloadTest.cs index e17c426583b9..e36b37041c71 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/HotReloadTest.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/HotReloadTest.cs @@ -24,7 +24,7 @@ public HotReloadTest( public override async Task InitializeAsync() { - await base.InitializeAsync(Guid.NewGuid().ToString()); + await base.InitializeAsync(null); } protected override void InitializeAsyncCore() diff --git a/src/Components/test/E2ETest/ServerExecutionTests/ProtectedBrowserStorageUsageTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/ProtectedBrowserStorageUsageTest.cs index 0cce2e0a84f1..7a3ed18e5523 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/ProtectedBrowserStorageUsageTest.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/ProtectedBrowserStorageUsageTest.cs @@ -26,7 +26,7 @@ public override async Task InitializeAsync() { // Since browser storage needs to be reset in between tests, it's easiest for each // test to run in its own browser instance. - await base.InitializeAsync(Guid.NewGuid().ToString()); + await base.InitializeAsync(null); } protected override void InitializeAsyncCore() diff --git a/src/Components/test/E2ETest/Tests/BinaryHttpClientTest.cs b/src/Components/test/E2ETest/Tests/BinaryHttpClientTest.cs index a8b06bcab09a..846c155005f6 100644 --- a/src/Components/test/E2ETest/Tests/BinaryHttpClientTest.cs +++ b/src/Components/test/E2ETest/Tests/BinaryHttpClientTest.cs @@ -39,7 +39,7 @@ protected override void InitializeAsyncCore() _appElement = Browser.MountTestComponent(); } - public override Task InitializeAsync() => base.InitializeAsync(Guid.NewGuid().ToString()); + public override Task InitializeAsync() => base.InitializeAsync(null); [Fact] public void CanSendAndReceiveBytes() diff --git a/src/Components/test/E2ETest/Tests/BootResourceCachingTest.cs b/src/Components/test/E2ETest/Tests/BootResourceCachingTest.cs index d40c7612866e..fbf4761b1f9c 100644 --- a/src/Components/test/E2ETest/Tests/BootResourceCachingTest.cs +++ b/src/Components/test/E2ETest/Tests/BootResourceCachingTest.cs @@ -30,7 +30,7 @@ public BootResourceCachingTest( public override Task InitializeAsync() { - return base.InitializeAsync(Guid.NewGuid().ToString()); + return base.InitializeAsync(null); } [Fact] diff --git a/src/Components/test/E2ETest/Tests/PerformanceTest.cs b/src/Components/test/E2ETest/Tests/PerformanceTest.cs index c237c8fd4aa6..645d889af963 100644 --- a/src/Components/test/E2ETest/Tests/PerformanceTest.cs +++ b/src/Components/test/E2ETest/Tests/PerformanceTest.cs @@ -25,7 +25,7 @@ protected override void InitializeAsyncCore() Navigate("/"); } - public override Task InitializeAsync() => base.InitializeAsync(Guid.NewGuid().ToString()); + public override Task InitializeAsync() => base.InitializeAsync(null); [Fact] public void HasTitle() diff --git a/src/Components/test/E2ETest/Tests/SignalRClientTest.cs b/src/Components/test/E2ETest/Tests/SignalRClientTest.cs index 70d74141b1d8..f14aeb5db3b7 100644 --- a/src/Components/test/E2ETest/Tests/SignalRClientTest.cs +++ b/src/Components/test/E2ETest/Tests/SignalRClientTest.cs @@ -35,7 +35,7 @@ protected override void InitializeAsyncCore() Browser.Exists(By.Id("signalr-client")); } - public override Task InitializeAsync() => base.InitializeAsync(Guid.NewGuid().ToString()); + public override Task InitializeAsync() => base.InitializeAsync(null); [Fact] public void SignalRClientWorksWithLongPolling() diff --git a/src/Shared/E2ETesting/BrowserFixture.cs b/src/Shared/E2ETesting/BrowserFixture.cs index 861281ad1cd2..b5bd184f10b6 100644 --- a/src/Shared/E2ETesting/BrowserFixture.cs +++ b/src/Shared/E2ETesting/BrowserFixture.cs @@ -42,7 +42,7 @@ public static void EnforceSupportedConfigurations() public static bool IsHostAutomationSupported() { - // We emit an assemblymetadata attribute that reflects the value of SeleniumE2ETestsSupported at build + // We emit an AssemblyMetadata attribute that reflects the value of SeleniumE2ETestsSupported at build // time and we use that to conditionally skip Selenium tests parts. var attribute = typeof(BrowserFixture).Assembly.GetCustomAttributes() .SingleOrDefault(a => a.Key == "Microsoft.AspNetCore.InternalTesting.Selenium.Supported"); @@ -66,20 +66,21 @@ public static bool IsHostAutomationSupported() public async Task DisposeAsync() { - try + var browsers = _browsers.Values; + foreach (var (browser, _) in browsers) { - var browsers = _browsers.Values; - foreach (var (browser, _) in browsers) + try { browser?.Quit(); browser?.Dispose(); } - - await DeleteBrowserUserProfileDirectoriesAsync(); - } - catch - { + catch + { + // Continue disposing other browsers + } } + + await DeleteBrowserUserProfileDirectoriesAsync(); } private async Task DeleteBrowserUserProfileDirectoriesAsync() @@ -123,6 +124,11 @@ private async Task DeleteBrowserUserProfileDirectoriesAsync() return default; } + if (isolationContext == null) + { + return CreateBrowser(null, output); + } + return _browsers.GetOrAdd(isolationContext, CreateBrowser, output); } diff --git a/src/Shared/E2ETesting/BrowserTestBase.cs b/src/Shared/E2ETesting/BrowserTestBase.cs index 7a1927fe22cf..80e48ca5db24 100644 --- a/src/Shared/E2ETesting/BrowserTestBase.cs +++ b/src/Shared/E2ETesting/BrowserTestBase.cs @@ -16,6 +16,7 @@ public class BrowserTestBase : IClassFixture, IAsyncLifetime private ExceptionDispatchInfo _exceptionDispatchInfo; private IWebDriver _browser; + protected string _isolationContext; public BrowserTestBase(BrowserFixture browserFixture, ITestOutputHelper output) { @@ -51,6 +52,11 @@ public IWebDriver Browser public Task DisposeAsync() { + if (_isolationContext == null) + { + Browser.Dispose(); + } + return Task.CompletedTask; } @@ -61,6 +67,8 @@ public virtual Task InitializeAsync() public virtual Task InitializeAsync(string isolationContext) { + // If isolationContext is null then the Browser is not cached + InitializeBrowser(isolationContext); InitializeAsyncCore(); return Task.CompletedTask; @@ -74,11 +82,14 @@ protected void InitializeBrowser(string isolationContext) { try { + Browser?.Dispose(); + var (browser, logs) = BrowserFixture.GetOrCreateBrowser(Output, isolationContext); _asyncBrowser.Value = browser; _logs.Value = logs; Browser = browser; + _isolationContext = isolationContext; } catch (Exception ex) {