Root причина: Всякий раз, когда вы загружаете какую-либо страницу с помощью драйвера селена, сценарий driver
ожидает, пока страница полностью не загрузится. Но иногда веб-драйверу требуется больше времени для загрузки страницы, в этом случае вы увидите TimeoutException
исключение в вашей консоли.
Решение: Когда загрузка страницы занимает слишком много времени и вам нужно остановить загрузка дополнительных субресурсов (изображений, css, js и c) Вы можете изменить pageLoadStrategy через веб-драйвер.
Ниже кода просто загрузите html содержание со страницы. Вы можете установить стратегию загрузки страницы из chromeoptions
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
Обновленное решение -2: Я согласен с DebanjanB, стратегия PageLoad с None, без загрузки дополнительных файлов ( images, css, js et c) не очень хорошая идея при выполнении тестирования. Я обыскал все проблемы и попытался найти правильное решение. Я попробовал описанные ниже варианты, так как когда-нибудь когда-нибудь удалось решить эту проблему.
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");
Ни один из них не помог, но я снова нашел одно решение с помощью стратегии загрузки страницы. На этот раз мы загружаем все подресурсы, но ждем события DOMContentLoaded . Эта стратегия называется Eager . Небольшое определение доступно для всех 3 стратегий загрузки страниц
1. normal: Эта стратегия заставляет Selenium ждать полной загрузки страницы (html загруженные и проанализированные материалы и субресурсы).
2. eager: Эта стратегия заставляет Selenium ожидать события DOMContentLoaded (html контент загружен и только проанализирован).
3. none: Эта стратегия заставляет Selenium возвращаться сразу после того, как исходное содержимое страницы полностью получено (html содержимое загружено).
ПРИМЕЧАНИЕ: По умолчанию, когда Selenium загружает страницу , он соответствует обычному pageLoadStrategy.
Фрагмент кода без использования стратегии загрузки страниц (или Нормальный, используемый по умолчанию для selenium)
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();
Вывод на консоль:
Запуск ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch -head / 3987 @ {# 185}) через порт 41540 Разрешены только локальные подключения. Пожалуйста, защитите порты, используемые ChromeDriver и соответствующими тестовыми средами, чтобы предотвратить доступ вредоносного кода. 11 февраля 2020 10:22:12 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Обнаруженный диалект: W3C [1581412933.937] [SEVERE]: истекло время ожидания получения сообщения от средства визуализации: 0,100 [1581412934.066] [SEVERE]: время истекло получение сообщения от средства визуализации: 0,100 [1581412934.168] [SEVERE]: истекло время получения сообщения от средства визуализации: 0,100 [1581412934.360] [SEVERE]: время ожидания получения сообщения от средства визуализации: 0,100 [1581412934.461] [SEVERE]: время ожидания приема сообщения от средства визуализации: 0.100 [1581412934.618] [SEVERE]: истекло время получения сообщения от средства визуализации: 0.100 [1581412934.719] [SEVERE]: истекло время получения сообщения от средства рендеринга: 0.100 [1581412934.820] [SEVERE]: время ожидания полученного сообщения от средства рендеринга: 0.100 [1581412934.922] SEVERE]: Превышено время ожидания получения сообщения от средства визуализации: 0,100 [1581412935.097] [SEVERE]: Превышено время ожидания получения сообщения от средства визуализации: 0,100 21
При использовании стратегии PageLoad - Eager:
Фрагмент кода:
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();
Консоль Вывод:
Запуск ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch -head / 3987 @ {# 185}) через порт 1175 Разрешены только локальные подключения. Пожалуйста, защитите порты, используемые ChromeDriver и соответствующими тестовыми средами, чтобы предотвратить доступ вредоносного кода. 11 февраля 2020 10:29:05 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: обнаруженный диалект: W3 C
21