Actualisation de la page web par WebDriver en attendant une condition spécifique

Je cherche un moyen plus élégant d'actualiser la page Web pendant les tests (J'utilise Selenium2). Je viens d'envoyer la clé F5 mais je me demande si le pilote a une méthode pour rafraîchir toute la page Web Voici mon code

    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();    

Est peut-être une meilleure solution pour trouver l'élément sur la page actualisée manuellement

110
demandé sur pbaranski 2012-04-20 15:48:26

12 réponses

En Java ou JavaScript:

driver.navigate().refresh();

Cela devrait actualiser la page.

224
répondu Manpreet Singh 2016-02-22 22:33:33

En Python, il existe une méthode pour faire ceci: driver.refresh(). Ce n'est peut-être pas la même chose en Java.

Vous pouvez driver.get("http://foo.bar");, bien que je pense de la méthode d'actualisation devrait fonctionner parfaitement.

41
répondu Isaac 2012-04-20 13:44:44

En python

En utilisant la méthode intégrée

driver.refresh()

Ou, en exécutant JavaScript

driver.execute_script("location.reload()")
28
répondu Md. Nazmul Haque Sarker 2014-02-13 12:43:05

Trouvé différentes approches pour actualiser l'application dans selenium: -

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)");

Pour le code EN DIRECT, veuillez vous référer au lien http://www.ufthelp.com/2014/11/Methods-Browser-Refresh-Selenium.html

13
répondu AugustRush 2014-11-13 09:45:01

5 différentes façons d'actualiser une page Web à L'aide de Selenium Webdriver

Il n'y a pas de codage supplémentaire spécial. Je viens d'utiliser les fonctions existantes de différentes manières pour le faire fonctionner. Les voici:

  1. En utilisant sendKeys.Clés méthode

    driver.get("https://accounts.google.com/SignUp");
    driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5);
    
  2. En utilisant naviguer.refresh() méthode

    driver.get("https://accounts.google.com/SignUp");  
    driver.navigate().refresh();
    
  3. En utilisant navigate.to () méthode

    driver.get("https://accounts.google.com/SignUp");  
    driver.navigate().to(driver.getCurrentUrl());
    
  4. En utilisant get () méthode

    driver.get("https://accounts.google.com/SignUp");  
    driver.get(driver.getCurrentUrl());
    
  5. En utilisant SendKeys () méthode

    driver.get("https://accounts.google.com/SignUp"); 
    driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035");
    
9
répondu Sandeep 2017-03-01 11:25:29

Voici la version c# légèrement différente:

driver.Navigate().Refresh();
8
répondu dmeehan 2015-07-08 14:30:06

Autre option pour actualisation de la Page (F5)

driver.navigate().refresh();

(ou)

Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
4
répondu Prashanth Sams 2013-09-04 12:39:52

Vous pouvez également essayer

Driver.Instance.Navigate().Refresh();
2
répondu user5320606 2015-09-10 11:57:34

Une chose importante à noter est que le pilote.naviguer().l'appel refresh () semble parfois être asynchrone, ce qui signifie qu'il n'attend pas la fin de l'actualisation, il "lance l'actualisation" et ne bloque pas l'exécution pendant que le navigateur recharge la page.

Bien que cela ne semble se produire que dans une minorité de cas, nous avons pensé qu'il est préférable de s'assurer que cela fonctionne à 100% en ajoutant une vérification manuelle si la page a vraiment commencé à recharger.

Voici le code I écrit pour cela dans notre classe d'objets de page de base:

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();
}

Quelques remarques:

  • puisque vous rechargez la page, vous ne pouvez pas simplement vérifier l'existence d'un élément donné, car l'élément sera là avant le début du rechargement et après qu'il soit fait. Donc, parfois, vous pourriez obtenir vrai, mais la page n'a même pas commencé à charger encore.
  • lorsque la page se recharge, Vérifiez WebElement.isDisplayed() lancera une exception StaleElementReferenceException. Le reste est juste pour couvrir tous bases
  • getName (): méthode interne qui obtient le nom de la page
  • getMaximumLoadTime (): méthode interne qui renvoie la durée de chargement de la page en secondes
  • verify (): la méthode interne s'assure que la page est réellement chargée

Encore une fois, dans la grande majorité des cas, la boucle do/while s'exécute une seule fois car le code au-delà de navigate().refresh () n'est pas exécuté tant que le navigateur n'a pas complètement rechargé la page, mais nous avons vu des cas où il faut réellement des secondes pour passer à travers cette boucle parce que le navigate ().refresh () n'a pas bloqué jusqu'à ce que le navigateur ait terminé le chargement.

2
répondu mac 2016-06-09 21:18:30

Il y a aussi un cas où vous voulez actualiser uniquement iframe spécifique sur la page et non la page complète.

Vous faites comme suit:

public void refreshIFrameByJavaScriptExecutor(String iFrameId){
        String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
       ((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}
0
répondu Stas 2014-06-30 09:11:40

En PHP:

$driver->navigate()->refresh();
0
répondu MegaCasper 2016-06-15 16:07:09

Une autre façon d'actualiser la page actuelle en utilisant selenium en Java.

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

L'utilisation de ceci rafraîchira la page en cours comme en cliquant sur la barre d'adresse du navigateur et en appuyant sur Entrée.

0
répondu RyanskyHeisenberg 2017-03-01 11:27:51