在Azure Pipeline中配置C# Selenium Chrome为英国BST时区
解决Azure Pipeline中Selenium Chrome模拟伦敦时区(BST)的问题
要让Chrome模拟伦敦时区(自动适配BST/GMT夏令时切换),可以通过Chrome DevTools Protocol的Emulation.setTimezoneOverride接口实现。以下是修改后的完整初始化代码,包含时区配置逻辑:
protected static IWebDriver? _driver = null; // 初始化ChromeDriver并设置伦敦时区 var options = new ChromeOptions(); options.AddArgument("enable-automation"); options.AddArgument("disable-dev-shm-usage"); options.AddArgument("ignore-certificate-errors"); options.AddArgument("ignore-ssl-errors"); options.AddArgument("disable-popup-blocking"); options.AddArgument("lang=en"); options.AddArgument("window-size=1920,1080"); if (!System.Diagnostics.Debugger.IsAttached) { _isDebug = false; options.AddArgument("headless"); } options.AddArgument("disable-gpu"); options.AddUserProfilePreference("download.default_directory", _downloadPath); options.AddUserProfilePreference("profile.default_content_setting_values.automatic_downloads", 1); options.AddUserProfilePreference("plugins.always_open_pdf_externally", true); options.AddUserProfilePreference("download.prompt_for_download", false); options.AddUserProfilePreference("download.directory_upgrade", true); ChromeDriverService serviceObj = ChromeDriverService.CreateDefaultService(); _driver = new ChromeDriver(serviceObj, options, TimeSpan.FromSeconds(_maxWait)); _driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(_maxWait); _driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(_maxWait); _driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(_maxWait); _driver.Manage().Cookies.DeleteAllCookies(); _driver.Manage().Window.Maximize(); // 新增:配置伦敦时区 if (_driver is IDevTools devTools) { var session = devTools.GetDevToolsSession(); // 启用Emulation域(部分ChromeDriver版本需显式启用) session.SendCommand(new Command("Emulation.enable", new Dictionary<string, object>())); // 设置时区为伦敦,自动处理夏令时切换 session.SendCommand( new Command("Emulation.setTimezoneOverride", new Dictionary<string, object> { { "timezoneId", "Europe/London" } }) ); }
关键说明:
- 时区标识符选择:使用
Europe/London而非固定UTC偏移量,Chrome会自动根据当前日期切换BST(UTC+1)和GMT(UTC+0),完美适配夏令时变化。 - DevTools会话时机:必须在
ChromeDriver实例化完成后获取会话,确保驱动已成功连接到浏览器进程。 - Feature级生效:如果需要每个Feature启动时都应用时区设置,可将时区配置代码放到测试框架的前置钩子中(比如SpecFlow的
[BeforeFeature]标记方法),保证每次新浏览器会话都加载正确时区。
验证时区是否生效:
可在测试中执行以下代码确认时区配置成功:
var currentTimezone = (string)_driver.ExecuteScript("return Intl.DateTimeFormat().resolvedOptions().timeZone"); // 预期输出:Europe/London Console.WriteLine($"当前浏览器时区:{currentTimezone}");
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

