В соответствии с документацией findElements()
метод находит все элементы на текущей странице, используя предоставленный механизм. На этот метод влияет таймфрейм, настроенный через implicitlyWait или явноlyWait во время выполнения. Когда неявно или явно ожидает, этот метод вернется, как только в найденной коллекции будет больше элементов, или вернется пустой список , если достигнут таймаут .
Я провел небольшой тест с вашей строкой кода следующим образом:
driver.get("https://www.google.com/");
System.out.println(driver.findElements(By.id("automaticSoldier")).size());
driver.quit();
Правильно печатает в консоли следующее:
Starting ChromeDriver 2.38.551601 (edb21f07fc70e9027c746edd3201443e011a61ed) on port 7531
Only local connections are allowed.
May 04, 2018 1:32:28 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
0
Но, как вы обнаружите, что программа зависает, основное подозрение выглядит так:
- Вы настроили
implicitlyWait()
и WebDriver экземпляр ожидает.
Дополнительные соображения
Для лучшего Test Harness
выполните следующие шаги:
- Заменить экземпляр
implicitlyWait()
экземплярами explicitlyWait()
, т.е. WebDriverWait()
, где требуется.
- Не смешивайте
implicitlyWait()
и explicitlyWait()
. Это может привести к непредсказуемому времени ожидания.
- Обновление JDK до последних уровней JDK 8u162 .
- Обновление Селен до текущих уровней Версия 3.11.0 .
- Обновление WebDriver вариант до текущих уровней. ChromeDriver v2.38 / GeckoDriver v0.20.1
- Обновление WebClient вариант (например, Firefox , Chrome , IE , Edge , Safari ) до текущих уровней.
- Очистите ваше Рабочее пространство проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
- Используйте CCleaner инструмент, чтобы стереть все рутинные операции ОС до и после выполнения Test Suite .
- Если ваша базовая версия Web Client устарела, удалите ее через Revo Uninstaller и установите последнюю версию GA и выпущенную версию Web Клиент .
- Взять перезагрузку системы .
- Выполните свой
@Test
.
- Всегда вызывайте
driver.quit()
в методе tearDown(){}
для закрытия и уничтожения WebDriver и Веб-клиента экземпляров изящно.