WebDriverWait не срабатывает или как его правильно задать

java
webdriver
Теги: #<Tag:0x00007fedb9539608> #<Tag:0x00007fedb95394c8>

(Andy Soloman) #1

Получаю ошибку “org.openqa.selenium.TimeoutException: Timeout loading page after 5000ms” на следующей строке. Что тут неправильно? Я задал время ожидания для видимости конкретного элемента на той странице, но что упустил? Полученный TimeoutException явно не тот, который задан в WebDriverWait – что тут не так?
Неявные ожидания ранее не устанавливались.

wd.get("https://www.thehost.com/profile.php"); // ошибка на этой строке
WebDriverWait wait = new WebDriverWait(wd, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[value='...']")));

(Богдан Ткаченко) #2

Какую версию селениума используешь?

Попробуй поставить
driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);


(Andy Soloman) #3

использую селениум 3.7.1

не понятно, почему срабатывает меньший таймаут, который к тому же не был нигде задан, если был явно задан больший тайтмаут?


(Andy Soloman) #4

даже после того как я выставил pageLoadTimeout = 20 и неявные ожидания на 10 сек, замечаю, что есть ошибки даже на строках

wd.get("https://...");

ошибка:

Timeout loading page after 5000ms

Откуда берется 5000ms ?


(Oleg V) #5

а если wd.get поместить под wait?
Но лучше показать весь код как инициализируется wd, какие еще установлены ожидания и т.д.


(Andy Soloman) #6

а как можно ожидать какого-то условия на странице, если страница еще не запрошена?
тем более что WebDriverWait везде инициализируется именно так


(Oleg V) #7

У вас же ошибка в 1й строке. wd.get - следовательно ожидания срабатывают у wd. Чтобы с уверенностью утверждать, что это (5000 ms) явные или неявные ожидания работают или еще в чем-то проблема, то лучше видеть код и т.д. (т.к. я не гуру, то поэтому и попросил код, чтобы возможно помочь)
Три строчки кода:

  1. Запрос страницы через wd (как он объявлен знаете только вы).
  2. Объявление явных ожиданий.
  3. Явное ожидание элемента.

Или я чего-то не понял.


(Andy Soloman) #8

WebDriverWait - это есть явное ожидание элемента


(Yaroslav Pernerovskyy) #9

Судя по ошибке, у вас страничка не успевает догрузиться. И до вашего явного ожидания дело даже не доходит.

даже после того как я выставил pageLoadTimeout = 20

А можно код посмотреть, как и где вы это выставляете?
И вы точно уверены, что ваши установки не оверрайдятся кем то еще?
У селениума по умолчанию пейдж лоад таймаут 5 минут. Если у вас 5 сек, значит где-то в коде оно переопределяется.