Обновление веб-страницы по WebDriver при ожидании определенного состояния

Я ищу более элегантный способ обновления веб-страницы во время тестов (я использую Selenium2). Я просто посылаю ключ F5, но мне интересно, имеет ли драйвер метод обновления всей веб-страницы Вот мой код

    while(driver.findElements(By.xpath("//*[text() = 'READY']")).size() == 0 )
        driver.findElement(By.xpath("//body")).sendKeys(Keys.F5);
        //element appear after text READY is presented      
    driver.findElement(By.cssSelector("div.column a")).click();    

Возможно, это лучшее решение для поиска элемента на обновленной странице вручную

Ответ 1

В Java или JavaScript:

driver.navigate().refresh();

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

Ответ 2

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

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

Ответ 3

В python

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

driver.refresh()

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

driver.execute_script("location.reload()")

Ответ 4

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

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

Ответ 5

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

driver.Navigate().Refresh();

Ответ 6

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

driver.navigate().refresh();

(или)

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

Ответ 7

5 различных способов обновления веб-страницы с помощью Selenium Webdriver

Нет специального дополнительного кодирования. Я просто использовал существующие функции по-разному, чтобы заставить его работать. Вот они:

  • Использование метода sendKeys.Keys

    driver.get("https://accounts.google.com/SignUp");
    driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5);
    
  • Использование метода navigate.refresh()

    driver.get("https://accounts.google.com/SignUp");  
    driver.navigate().refresh();
    
  • Использование метода navigate.to()

    driver.get("https://accounts.google.com/SignUp");  
    driver.navigate().to(driver.getCurrentUrl());
    
  • Использование метода get()

    driver.get("https://accounts.google.com/SignUp");  
    driver.get(driver.getCurrentUrl());
    
  • Использование метода sendKeys()

    driver.get("https://accounts.google.com/SignUp"); 
    driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035");
    

Ответ 8

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

Driver.Instance.Navigate().Refresh();

Ответ 9

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

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

public void refreshIFrameByJavaScriptExecutor(String iFrameId){
        String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
       ((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}

Ответ 10

Важно отметить, что вызов 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(): внутренний метод, который возвращает продолжительность загрузки страницы в секундах
  • verify(): внутренний метод гарантирует, что страница действительно загружена.

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

Ответ 11

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

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

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

Ответ 12

В PHP:

$driver->navigate()->refresh();