You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:23:19