c# selenium在azure管道中将chrome设置为UK BST

3qpi33ja  于 2023-04-09  发布在  Go
关注(0)|答案(1)|浏览(128)

因此,我们在.Net/C#/Selenium中开发了一组selenium回归测试。这些测试在本地运行良好,直到最近BST启动,它们在我们的Azure管道中也运行良好。自从BST以来,一小部分使用时间和日期的测试只在Azure中失败。
问题是测试站点在英国,但Azure系统不在,所以我们需要让Chrome认为它仍然在英国。下面是设置我们的chromedriver的代码。

protected static IWebDriver? _driver = null;

        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();

现在我相信IDevTools是必需的,但我似乎找不到一个可行的例子。有人能帮忙吗?
我基本上在寻找的是这样做的方式在每个功能的开始,使浏览器将使用伦敦x1c 0d1x
到目前为止我发现

var devTools = _driver as IDevTools;
var session = devTools.GetDevToolsSession();

但不知道接下来会发生什么
先谢谢你了
凯夫

ukxgm1gy

ukxgm1gy1#

这似乎是解决方案,在Azure中的测试运行正在通过

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("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();
        _driver.ExecuteCdpCommand(
            "Emulation.setTimezoneOverride",
            new Dictionary<string, object>
            {
                ["timezoneId"] = "Europe/London"
            });

相关问题