/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Shared/E2ETesting/BrowserTestBase.cs
108 строк
3 KB
Ondřej Roztočil
Fix NavMenuHighlightsCurrentLocation in headless mode (#63583)
10 сен 2025, 23:34
Не верифицирован
10 сен 2025, 23:34
abbcda2
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Runtime.ExceptionServices; using OpenQA.Selenium; using Xunit.Abstractions; namespace Microsoft.AspNetCore.E2ETesting; [CaptureSeleniumLogs] public class BrowserTestBase : IClassFixture<BrowserFixture>, IAsyncLifetime { private static readonly AsyncLocal<IWebDriver> _asyncBrowser = new AsyncLocal<IWebDriver>(); private static readonly AsyncLocal<ILogs> _logs = new AsyncLocal<ILogs>(); private static readonly AsyncLocal<ITestOutputHelper> _output = new AsyncLocal<ITestOutputHelper>(); private ExceptionDispatchInfo _exceptionDispatchInfo; private IWebDriver _browser; private System.Drawing.Size? _originalWindowSize; public BrowserTestBase(BrowserFixture browserFixture, ITestOutputHelper output) { BrowserFixture = browserFixture; _output.Value = output; } public IWebDriver Browser { get { if (_exceptionDispatchInfo != null) { _exceptionDispatchInfo.Throw(); throw _exceptionDispatchInfo.SourceException; } return _browser; } set { _browser = value; } } public static IWebDriver BrowserAccessor => _asyncBrowser.Value; public static ILogs Logs => _logs.Value; public static ITestOutputHelper Output => _output.Value; public BrowserFixture BrowserFixture { get; } public virtual Task DisposeAsync() { try { if (_originalWindowSize.HasValue && _originalWindowSize.Value != Browser.Manage().Window.Size) { Browser.SetWindowSize(_originalWindowSize.Value.Width, _originalWindowSize.Value.Height); } } catch (WebDriverException) { // An exception is thrown if the browser has been closed in the test. // In that case we don't need to reset the window size. } return Task.CompletedTask; } public virtual Task InitializeAsync() { return InitializeAsync(""); } public virtual Task InitializeAsync(string isolationContext) { InitializeBrowser(isolationContext); InitializeAsyncCore(); return Task.CompletedTask; } protected virtual void InitializeAsyncCore() { } protected void InitializeBrowser(string isolationContext) { try { var (browser, logs) = BrowserFixture.GetOrCreateBrowser(Output, isolationContext); _asyncBrowser.Value = browser; _logs.Value = logs; if (!_originalWindowSize.HasValue) { _originalWindowSize = browser.Manage().Window.Size; } Browser = browser; } catch (Exception ex) { _exceptionDispatchInfo = ExceptionDispatchInfo.Capture(ex); throw; } } }