如何在 Selenium Chromedriver 中设置时区?

Hel*_*len 5 javascript java selenium selenium-chromedriver selenium-webdriver

我不知道如何在使用 Chromedriver 时设置时区。是否有一些 ChromeOptions 参数之类的?

问题是,当我访问某些站点(例如https://whoer.net)时,它显示的系统时间等于 Windows 上设置的时间。而且我希望能够以某种方式更改 Chromedriver 的时区以执行时区相关测试。

我尝试设置一些 chrome 选项:

Map<String, Object> chromeOptions = new HashMap<String, Object>();
chromeOptions.put("args", Arrays.asList("--disable-system-timezone-automatic-detection", "--local-timezone"));
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
Run Code Online (Sandbox Code Playgroud)

它不起作用。

尝试使用 Javascript 做一些奇怪的事情:

((JavascriptExecutor) driver).executeScript("Date.prototype.getTime = function() { return 1 };");
   
Run Code Online (Sandbox Code Playgroud)

它也没有帮助。

编辑:

发现这个https://sqa.stackexchange.com/questions/8838/faking-system-time-date-with-selenium-webdriver

尝试使用从TimeShift.js复制的代码在页面上执行 javascript,如下所示:

((JavascriptExecutor) driver).executeScript("/*code from TimeShift.js here*/ TimeShift.setTimezoneOffset(-60);");
Run Code Online (Sandbox Code Playgroud)

https://whoer.net 上的系统时间没有改变。我究竟做错了什么?

小智 9

您可以使用 Chrome DevTools Protocol 来完成此操作,以下是 python 代码:

driver = webdriver.Chrome()
tz_params = {'timezoneId': 'America/New_York'}
driver.execute_cdp_cmd('Emulation.setTimezoneOverride', tz_params)
Run Code Online (Sandbox Code Playgroud)


Nir*_*Tal 8

使用新的 selenium 4,可以使用CDP本地完成

    WebDriverManager.chromedriver().setup();
    WebDriver driver = new ChromeDriver();
    DevTools devTools = ((ChromeDriver) driver).getDevTools();
    devTools.createSession();
    devTools.send(Emulation.setTimezoneOverride("Antarctica/Casey"));
Run Code Online (Sandbox Code Playgroud)

下载以下 Maven 依赖项:

      <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.0.0-alpha-6</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

时区列表可以在这里找到


小智 4

据我所知,您只能使用 TZ 变量或 Decker Selenium 来完成此操作。

但是,您能找到可行的解决方案吗?我正在尝试做同样的事情,但几乎没有找到解决方案。我正在尝试用Python 来做到这一点。Tz变量解决方案仅限于Windows中的Firefox,而在Windows上安装Decker Selenium是一场噩梦。

更新的 Python 解决方案可行(如下)

os.environ["德比西"] = "1"

请参阅:如何在 Python 中设置环境变量

我不确定是否有 Java 等效项,但这个 Python 等效项在 Windows 中适用于我,但仅在 Firefox 中有效。如果您找到了 Java 等效项,那就太棒了,但如果这个问题对您来说很重要,那么 Python 就是您的最佳选择!:)。我相信在 Windows 中您只能使用三个字母,但在 Linux 操作系统中可以完全自定义。例如 UTC、GMT 等。希望这对您有帮助。我花了很长时间寻找这个,但事实证明我想太多了。祝你好运!!

  • 在 docker 中,您可以设置 TZ 变量: `docker run -d selenium/hub -e "TZ=US/Pacific"...` [链接在这里](https://github.com/SeleniumHQ/docker-selenium/wiki/设置时区) (3认同)