我无法弄清楚在使用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);
它没有用。
尝试使用Javascript做一些奇怪的事情:
((JavascriptExecutor) driver).executeScript("Date.prototype.getTime = function() { return 1 };");
它也没有帮助。
修改
找到此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);");
https://whoer.net的系统时间没有变化。我做错了什么?
答案 0 :(得分:2)
据我所知,你只能使用TZ变量或Decker Selenium。
但是你能找到一个可行的解决方案吗?我正在尝试做同样的事情,并且发现解决方案的方式很少。我正在尝试使用Python。 Tz变量解决方案仅限于Windows中的Firefox和decker selenium是在Windows上安装的噩梦。
更新的PYTHON溶液(下图)
os.environ [“DEBUSSY”] =“1”
参见:How to set environment variables in Python
我不确定是否有Java等价物,但这个Python等价物在Windows中适用于我,但仅限于Firefox。如果你找到一个Java等价物,那就太棒了但如果这个问题对你很重要,那么Python就是你的选择! :)。我相信你只限于Windows中的三个字母,但在Linux操作系统中完全自定义。例如,UTC,GMT等等。希望这对你有所帮助。我花了很多年时间寻找这个,但事实证明我是在过度思考它。祝你好运!!
答案 1 :(得分:2)
使用新的硒4,可以使用CDP
本机完成 WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
DevTools devTools = ((ChromeDriver) driver).getDevTools();
devTools.createSession();
devTools.send(Emulation.setTimezoneOverride("Antarctica/Casey"));
下载以下Maven依赖项:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0-alpha-6</version>
</dependency>
时区列表可以找到here
答案 2 :(得分:2)
您可以使用 Chrome DevTools 协议来实现,这里是 python 代码:
driver = webdriver.Chrome()
tz_params = {'timezoneId': 'America/New_York'}
driver.execute_cdp_cmd('Emulation.setTimezoneOverride', tz_params)