t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007f9b02a99d00> #<Tag:0x00007f9b02a99850>

Получаю ошибку “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='...']")));

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

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

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

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

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

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

ошибка:

Timeout loading page after 5000ms

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

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

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

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

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

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

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

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

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

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