Как вы обновляете кеш-байпас, используя sylenium-binding selenium с chromedriver? [Дубликат]

У меня была аналогичная проблема. Я исправил это, включив функцию «Windows PowerShell 2.0» в «Включить или отключить функции Windows». Обратите внимание, что эта функция включена по умолчанию, я вручную отключил ее несколько дней назад.

Я работаю над Windows 10 Pro 64bit, и такая же проблема была с Visual Studio 2015 и 2017 (32-битное и 64-битное приложение )

112
задан pbaranski 20 April 2012 в 12:48
поделиться

12 ответов

В Java или JavaScript:

driver.navigate().refresh();

Это должно обновить страницу.

219
ответ дан Jeremy Moritz 19 August 2018 в 08:46
поделиться
  • 1
    – Manpreet Singh 23 April 2012 в 19:32
  • 2
    Это не совсем эквивалентно нажатию F5. driver.navigate().refresh() в своем заголовке запроса говорит «no-cache», и, как результат, безоговорочно перезагружает весь контент. В то время как нажатие клавиши F5 может привести к появлению "If-Modified-Since" запрос, который мог бы получить «304 Not Modified», ответ. Вы должны учитывать это различие, если вы выполняете нагрузочное тестирование. – Vsevolod Golovanov 16 February 2013 в 17:49
  • 3
    Большое вам спасибо за этот ответ :) Upvote – WEshruth 16 April 2015 в 07:02
  • 4
    @Manpreet Спасибо за решение. Это достойно Upvote. – RNS 4 May 2017 в 12:21
  • 5
    Действительно оценен. Благодаря! это сработало – Ashraf.Shk786 2 August 2017 в 21:40

Найдены различные подходы к обновлению приложения в селене: -

1.driver.navigate().refresh();
2.driver.get(driver.getCurrentUrl());
3.driver.navigate().to(driver.getCurrentUrl());
4.driver.findElement(By.id("Contact-us")).sendKeys(Keys.F5); 
5.driver.executeScript("history.go(0)");

Для живого кода см. ссылку http://www.ufthelp.com/2014/11/Methods -Browser-Refresh-Selenium.html

13
ответ дан AugustRush 19 August 2018 в 08:46
поделиться
  • 1
    Ницца! несколько способов сделать это. findElement (By.id («Contact-us»)) не является хорошим способом. более надежный всегда присутствующий элемент хорош, например: '/ html / body'. Это работает для жесткого обновления? и что, если страница имеет данные для публикации, firefox, как известно, отображает диалоговое окно данных. – mrtipale 30 January 2018 в 11:50

Вот немного другая версия C #:

driver.Navigate().Refresh();
7
ответ дан dmeehan 19 August 2018 в 08:46
поделиться

В Python существует способ для этого: driver.refresh(). Возможно, это не то же самое в Java.

В качестве альтернативы вы могли бы driver.get("http://foo.bar");, хотя я думаю, что метод обновления должен работать нормально.

38
ответ дан Isaac 19 August 2018 в 08:46
поделиться
  • 1
    получить с тем же URL-адресом для Java не получилось. – kirilloid 24 April 2013 в 16:41
  • 2
    Если вы используете driver.get("http://foo.bar"), возможно, просто используйте driver.get(driver.current_url) – Matt M. 20 April 2018 в 13:02

Вы также можете попробовать

Driver.Instance.Navigate().Refresh();
2
ответ дан josliber 19 August 2018 в 08:46
поделиться

Важно отметить, что вызов driver.navigate (). refresh () иногда кажется асинхронным, то есть он не ждет завершения обновления, он просто «запускает обновление» и не выполняет блокировать дальнейшее выполнение, в то время как браузер перезагружает страницу.

Хотя это, похоже, происходит в меньшем числе случаев, мы полагали, что лучше убедиться, что это работает на 100%, добавив ручную проверку, будет ли страница действительно начал перезагружать.

Вот код, который я написал для этого в классе объектов основной страницы:

public void reload() {
    // remember reference to current html root element
    final WebElement htmlRoot = getDriver().findElement(By.tagName("html"));

    // the refresh seems to sometimes be asynchronous, so this sometimes just kicks off the refresh,
    // but doesn't actually wait for the fresh to finish
    getDriver().navigate().refresh();

    // verify page started reloading by checking that the html root is not present anymore
    final long startTime = System.currentTimeMillis();
    final long maxLoadTime = TimeUnit.SECONDS.toMillis(getMaximumLoadTime());
    boolean startedReloading = false;
    do {
        try {
            startedReloading = !htmlRoot.isDisplayed();
        } catch (ElementNotVisibleException | StaleElementReferenceException ex) {
            startedReloading = true;
        }
    } while (!startedReloading && (System.currentTimeMillis() - startTime < maxLoadTime));

    if (!startedReloading) {
        throw new IllegalStateException("Page " + getName() + " did not start reloading in " + maxLoadTime + "ms");
    }

    // verify page finished reloading
    verify();
}

Некоторые примечания:

  • Поскольку вы «Перезагружая страницу, вы не можете просто проверить существование данного элемента, потому что элемент будет там до начала перезагрузки и после того, как это будет сделано. Поэтому иногда вы можете получить правду, но страница еще не загрузилась.
  • Когда страница перезагружается, проверка WebElement.isDisplayed () вызовет исключение StaleElementReferenceException. Остальное состоит только в том, чтобы охватить все базы
  • getName (): внутренний метод, который получает имя страницы
  • getMaximumLoadTime (): внутренний метод, который возвращает, как долго должна быть разрешена страница load in seconds
  • verify (): внутренний метод гарантирует, что страница действительно загружена

Опять же, в подавляющем большинстве случаев цикл do / while запускает одиночный время, потому что код за пределами навигации (). refresh () не выполняется, пока браузер фактически не перезагрузит страницу полностью, но мы видели случаи, когда на самом деле требуется секунд, чтобы пройти через этот цикл, потому что navigate (). refresh ( ) не блокировалось, пока браузер не завершил загрузку.

2
ответ дан mac 19 August 2018 в 08:46
поделиться

В python

Использование встроенного метода

driver.refresh()

или выполнения JavaScript

driver.execute_script("location.reload()")
28
ответ дан Md. Nazmul Haque Sarker 19 August 2018 в 08:46
поделиться

В PHP:

$driver->navigate()->refresh();
0
ответ дан MegaCasper 19 August 2018 в 08:46
поделиться

Другой способ обновить текущую страницу с помощью selenium в Java.

//first: get the current URL in a String variable
String currentURL = driver.getCurrentUrl(); 
//second: call the current URL
driver.get(currentURL); 

Используя это, будет обновлена ​​текущая страница, например, щелкнув адресную строку браузера и нажав enter.

7
ответ дан ono2012 19 August 2018 в 08:46
поделиться

Альтернативный для обновления страницы (F5)

driver.navigate().refresh();

(или)

Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
4
ответ дан Prashanth Sams 19 August 2018 в 08:46
поделиться

Существует также случай, когда вы хотите обновить только определенный iframe на странице, а не полную страницу.

Вы делаете следующее:

public void refreshIFrameByJavaScriptExecutor(String iFrameId){
        String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
       ((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}
0
ответ дан Stas 19 August 2018 в 08:46
поделиться
9
ответ дан ono2012 30 October 2018 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: