Je veux que le sélénium force le navigateur à recharger la page qu'il charge si le processus de chargement prend trop de temps.
De StackOverflow j'ai ce code
new WebDriverWait(driver, 30).until((ExpectedCondition<Boolean>) wd -> ((JavascriptExecutor) wd) .executeScript("return document.readyState").equals("complete"));
attendra que la page soit complètement chargée, mais je souhaite qu'elle soit rechargée si cela prend plus de 30 secondes.
Comment puis-je y parvenir?
3 Réponses :
WebDriverWait
avec une exception de dépassement de délai. Mettez votre code dans try / catch
et rechargez la page à l'exception du délai d'expiration:
try { new WebDriverWait(driver, 30).until((ExpectedCondition<Boolean>) wd -> ((JavascriptExecutor) wd) .executeScript("return document.readyState").equals("complete")); } catch (TimeoutException e) { // log a timeout // System.out.println("Page load timeout, refresh."); driver.navigate().refresh(); }
Essayez _driver.Navigate (). Refresh ()
;
Pour recharger la page Web au cas où le processus de chargement prend trop de temps, vous pouvez configurer pageLoadTimeout . pageLoadTimeout
définit la durée d'attente du chargement d'une page avant de générer une erreur. Si le délai d'expiration est négatif, les chargements de page peuvent être indéfinis.
Un exemple (en utilisant Selenium v3.141.59 et GeckoDriver v0.24.0):
Bloc de code:
1565680787633 mozrunner::runner INFO Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\Debanjan.B\\AppData\\Local\\Temp\\rust_mozprofile.3jw3aiyfNAiQ" 1565680826515 Marionette INFO Listening on port 56499 1565680827329 Marionette WARN TLS certificate errors will be ignored for this session Aug 13, 2019 12:50:28 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C Aug 13, 2019 12:50:31 PM org.openqa.selenium.remote.ErrorCodes toStatus WebDriverException occured
Sortie de la console:
public class pageLoadTimeout { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); WebDriver driver=new FirefoxDriver(); driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.SECONDS); try{ driver.get("https://www.booking.com/hotel/in/the-taj-mahal-palace-tower.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaGyIAQGYATG4AQbIAQzYAQHoAQH4AQKSAgF5qAID;sid=338ad58d8e83c71e6aa78c67a2996616;dest_id=-2092174;dest_type=city;dist=0;group_adults=2;hip_dst=1;hpos=1;room1=A%2CA;sb_price_type=total;srfid=ccd41231d2f37b82d695970f081412152a59586aX1;srpvid=c71751e539ea01ce;type=total;ucfs=1&#hotelTmpl"); // do your other work here }catch(WebDriverException e){ System.out.println("WebDriverException occured"); } driver.quit(); } }
Vous pouvez trouver une discussion pertinente dans pageLoadTimeout dans Selenium ne fonctionne pas
Vous pouvez trouver une discussion détaillée dans Avons-nous une fonction générique pour vérifier si la page est complètement chargée dans Selenium
il existe un PageLoadTimeout: seleniumhq.github .io / selenium / docs / api / java / org / openqa / selen ium /…
Juste pour clarifier, cette méthode WebDriverWait est pour les mises à jour de page côté client. Pour les chargements de page complète à partir du serveur, PageLoadTimeout entre en jeu.