Cause principale: chaque fois que vous chargez une page à l'aide du pilote sélénium, le driver
script attend que la page soit complètement chargée. Mais parfois, le pilote Web prend plus de temps pour charger la page, dans ce cas, vous verrez une TimeoutException
exception dans votre console.
Solution: lorsque le chargement de la page prend trop de temps et que vous devez arrêter de télécharger des sous-ressources supplémentaires (images, css, js, etc.), vous pouvez modifier la pageLoadStrategy via le pilote Web.
Sous le code, chargez simplement le contenu html de la page. Vous pouvez définir une stratégie de chargement de page à partir de chromeoptions
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
Solution mise à jour -2: Je suis d'accord avec DebanjanB, la stratégie PageLoad avec None, sans télécharger des fichiers supplémentaires (images, css, js, etc.) n'est pas une bonne idée lors des tests. J'ai cherché tous les problèmes à ce sujet et j'ai essayé de trouver une solution valide. J'ai essayé les options ci-dessous car à un moment donné, il a pu résoudre ce problème.
options.addArguments("start-maximized");
options.addArguments("enable-automation");
options.addArguments("--no-sandbox");
options.addArguments("--disable-infobars");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-browser-side-navigation");
options.addArguments("--disable-gpu");
Aucun d'eux n'a aidé Mais j'ai trouvé une solution avec la stratégie de chargement de page. Cette fois, nous téléchargeons toutes les sous-ressources, mais nous attendons l' événement DOMContentLoaded . Cette stratégie appelée Eager . Une petite définition des 3 stratégies de chargement de page disponibles
1. normal:
cette stratégie oblige Selenium à attendre le chargement complet de la page (contenu html et sous-ressources téléchargées et analysées).
2. impatient:
cette stratégie oblige Selenium à attendre l'événement DOMContentLoaded (contenu html téléchargé et analysé uniquement).
3. aucun:
cette stratégie entraîne le retour de Selenium immédiatement après la réception complète du contenu de la page initiale (contenu html téléchargé).
REMARQUE: Par défaut, lorsque Selenium charge une page, il suit la pageLoadStrategy normale.
Extrait de code sans utiliser la stratégie Pageload (Ou Normal tel qu'utilisé par sélénium par défaut)
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
Sortie console:
Démarrage de ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) sur le port 41540 Seules les connexions locales sont autorisées. Veuillez protéger les ports utilisés par ChromeDriver et les cadres de test associés pour empêcher l'accès par du code malveillant. 11 février 2020 10:22:12 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: dialecte détecté: W3C [1581412933.937] [SEVERE]: délai dépassé pour la réception du message du moteur de rendu: 0.100 [1581412934.066] [SEVERE]: délai dépassé réception d'un message du rendu: 0,100 [1581412934.168] [SÉVÈRE]: Délai de réception du message du rendu: 0,100 [1581412934.360] [SÉVÈRE]: Délai de réception du message du rendu: 0,100 [1581412934.461] [SÉVÈRE]: Délai de réception du message du rendu: 0,100 [1581412934.618] [GRAVE]:
Avec la stratégie PageLoad - Désireux:
Extrait de code:
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
Sortie console:
Démarrage de ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) sur le port 1175 Seules les connexions locales sont autorisées. Veuillez protéger les ports utilisés par ChromeDriver et les cadres de test associés pour empêcher l'accès par du code malveillant. 11 février 2020 10:29:05 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: dialecte détecté: W3C
21