Основная причина: всякий раз, когда вы загружаете какую-либо страницу с помощью драйвера селена, driver
сценарий ожидает, пока страница полностью загрузится. Но иногда веб-драйверу требуется больше времени для загрузки страницы, в этом случае вы увидите TimeoutException
исключение в своей консоли.
Решение: если загрузка страницы занимает слишком много времени и вам нужно прекратить загрузку дополнительных подресурсов (изображений, CSS, JS и т. Д.), Вы можете изменить pageLoadStrategy через веб-драйвер.
Ниже код просто загрузите html контент со страницы. Вы можете установить стратегию загрузки страницы из chromeoptions
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
Обновленное решение -2: я согласен с DebanjanB, стратегия PageLoad с None, без загрузки дополнительных файлов (изображений, CSS, JS и т. Д.) Не является хорошей идеей при выполнении тестирования. Я обыскал все проблемы и попытался найти правильное решение. Я попробовал ниже варианты, так как когда-то в какой-то момент он смог решить эту проблему.
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. Стремление:
эта стратегия заставляет 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] [СЕРЬЕЗНЫЙ]:
Со Стратегией 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: Обнаруженный диалект: W3C
21