【问题标题】:Java&Selenium&Firefox/Chrome: unable to press CTRL + F5 for page hard refreshJava&Selenium&Firefox/Chrome:无法按 CTRL + F5 进行页面硬刷新
【发布时间】:2021-04-30 13:03:43
【问题描述】:

请看我的代码:

WebDriver driver = new FirefoxDriver();

driver.navigate().to("https://example.com");
Thread.sleep(5_000);

driver.findElement(By.tagName("html")).sendKeys(Keys.CONTROL, Keys.F5);
Thread.sleep(5_000);

driver.quit();

页面应该被刷新,但它从未发生过。 我尝试了不同的方法来编写代码来执行按键但没有运气。


更新

正如下面在 cmets 中提到的,可以使用 driver.navigate().refresh() 方法重新加载页面。

我需要执行硬刷新才能进行代理轮换。 driver.navigate().refresh() 方法适用于 Firefox,但不适用于 Chrome。

任何人都可以在 Chrome 中进行硬刷新吗?

【问题讨论】:

  • 为什么不通过driver.navigate().refresh();刷新页面
  • @KunduK 我认为方法refresh() 将调用定期刷新(F5)。我需要硬刷新(Ctrl + F5)。你是对的,它解决了我的问题。我如何选择您的评论作为答案?
  • 很高兴为您提供帮助。
  • 查看此链接,它会对您有所帮助。 stackoverflow.com/questions/54571696/…

标签: java selenium firefox


【解决方案1】:

所以要让它工作,你必须使用 Selenium 中的 Action 类。

对于 Windows 中的 Chrome:

Actions action = new Actions(driver);   
action.keyDown(Keys.CONTROL).sendKeys(Keys.F5).keyUp(Keys.CONTROL).perform();

使用 JavascriptExecutor 的其他 hack:

reload() 方法用于重新加载当前文档。 reload() 方法的作用与浏览器中的重新加载按钮相同。默认情况下,reload() 方法从缓存中重新加载页面,但您可以通过将 forceGet 参数设置为 true: location 来强制它从服务器重新加载页面。重新加载(真)。

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("location.reload(true);");

参考:

https://www.selenium.dev/documentation/en/webdriver/keyboard/

【讨论】:

  • 感谢您的评论。使用 Actions 的方法不起作用,这与我所做的相同,但语法不同。在 Firefox 和 Chrome 中测试。但是 JavaScript 运行良好。谢谢。
  • 可能是我的设置原因导致短键不工作。但这会很奇怪。我使用我的设置超过 3 年,没有发现任何问题。
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2012-01-25
  • 2011-05-13
  • 2020-12-25
  • 2011-09-13
相关资源
最近更新 更多