Grundursache: Wenn Sie eine Seite mit Hilfe des Selentreibers laden, driver
warten Sie mit dem Skript, bis die Seite vollständig geladen ist. Manchmal benötigt der Webtreiber jedoch mehr Zeit zum Laden der Seite. In diesem Fall wird TimeoutException
in Ihrer Konsole eine Ausnahme angezeigt .
Lösung: Wenn das Laden von Seiten zu lange dauert und Sie das Herunterladen zusätzlicher Unterressourcen (Bilder, CSS, JS usw.) beenden müssen , können Sie die pageLoadStrategy über den Webdriver ändern.
Unter dem Code laden Sie einfach den HTML-Inhalt von der Seite. Sie können die Strategie zum Laden von Seiten über Chrome-Optionen festlegen
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
Aktualisierte Lösung -2: Ich bin mit DebanjanB einverstanden, PageLoad-Strategie mit None, ohne zusätzliche Dateien (Bilder, CSS, JS usw.) herunterzuladen, ist beim Durchführen von Tests keine gute Idee. Ich habe alle Probleme damit durchsucht und versucht, eine gültige Lösung zu finden. Ich habe die folgenden Optionen ausprobiert, da es irgendwann möglich war, dieses Problem zu beheben.
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");
Keiner von ihnen half. Aber ich fand wieder eine Lösung mit der Strategie zum Laden von Seiten. Dieses Mal laden wir alle Unterressourcen herunter, warten aber auf das DOMContentLoaded- Ereignis. Diese Strategie heißt Eager . Eine kleine Definition aller 3 verfügbaren Seitenladestrategien
1. normal:
Diese Strategie bewirkt, dass Selenium auf das Laden der gesamten Seite wartet (heruntergeladene und analysierte HTML-Inhalte und Unterressourcen).
2. eifrig:
Diese Strategie veranlasst Selenium, auf das DOMContentLoaded-Ereignis zu warten (nur heruntergeladene und analysierte HTML-Inhalte).
3. keine:
Diese Strategie bewirkt, dass Selen sofort zurückkehrt, nachdem der ursprüngliche Seiteninhalt vollständig empfangen wurde (heruntergeladener HTML-Inhalt).
HINWEIS: Wenn Selenium eine Seite lädt, folgt es standardmäßig der normalen pageLoadStrategy.
Code-Snippet ohne Pageload-Strategie (oder Normal, wie standardmäßig von Selen verwendet)
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();
Konsolenausgabe:
Starten von ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-Heads / 3987 @ {# 185}) an Port 41540 Nur lokale Verbindungen sind zulässig. Bitte schützen Sie die von ChromeDriver und verwandten Testframeworks verwendeten Ports, um den Zugriff durch schädlichen Code zu verhindern. 11. Februar 2020, 10:22:12 Uhr org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Erkannter Dialekt: W3C [1581412933.937] [SEVERE]: Zeitüberschreitung beim Empfang der Nachricht vom Renderer: 0.100 [1581412934.066] [SEVERE]: Zeitüberschreitung Empfangen einer Nachricht vom Renderer: 0.100 [1581412934.168] [SEVERE]: Zeitüberschreitung beim Empfang der Nachricht vom Renderer: 0.100 [1581412934.360] [SEVERE]: Zeitüberschreitung beim Empfang der Nachricht vom Renderer: 0.100 [1581412934.461] [SEVERE]: Zeitüberschreitung beim Empfang der Nachricht vom Renderer: 0,100 [1581412934.618] [SEVERE]:
Mit PageLoad-Strategie - Eifrig:
Code-Auszug:
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();
Konsolenausgabe:
Starten von ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-Heads / 3987 @ {# 185}) auf Port 1175 Nur lokale Verbindungen sind zulässig. Bitte schützen Sie die von ChromeDriver und verwandten Testframeworks verwendeten Ports, um den Zugriff durch schädlichen Code zu verhindern. 11. Februar 2020, 10:29:05 Uhr org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Erkannter Dialekt: W3C
21