Webdriver & .Net - TimeZoneInfo.ClearCachedData()没有清除TimeZone缓存。

问题描述 投票:0回答:1

我正在自动化的应用程序每次填写表格时都需要一个唯一的参考号,我在大部分测试中使用了 DateTime.Now 作为我唯一的参考号。

public static string Today = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

当我通过Visual Studio为每个测试运行这些测试时,我得到一个唯一的DateTime.Now;这是正确的行为。但当我通过Nunit GUI或TeamCity CI运行相同的测试时,我得到的是一个唯一的DateTime.Now;这是正确的行为。DateTime.Now 是第一次测试运行时的缓存,因此之后的所有测试都会失败。

我尝试使用 TimeZoneInfo.ClearCachedData() 在每次测试运行后,我的TearDown部分。

    [AfterScenario]
    public static void TearDown()
    {
        CultureInfo.CurrentCulture.ClearCachedData();
        TimeZoneInfo.ClearCachedData();
        driver.Quit();
    }

但当我通过Nunit GUI或TeamCity运行时,这并不能清除缓存。我试过使用DateTime.UtcNow,也试过在设置部分移动ClearCachedData代码,但这些选项对我来说都不起作用。

以前有人克服过这个问题吗?

.net caching webdriver timezone
1个回答
1
投票

这是因为静态字段将被初始化一次,然后保持它的值。

你已经删除了 static 部分,你不一定要这么做。只要把它做成一个属性,这样它的值就会在每次访问时产生。

public static string Today { get { return DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } }

NUnit的GUI和TeamCity会在一个线程中启动整个套件。所以,你原来的静态字段将从字面上看只被加载一次,并保持它的值。

© www.soinside.com 2019 - 2024. All rights reserved.