Как создать ожидание в селене, который ждет веб-элемента, чтобы закончить обновление

Я довольно новичок в Selenium и пишу тест для веб-приложения, использующего его. При этом я использую утверждения, чтобы убедиться, что веб-приложение работает правильно. Для некоторых из этих утверждений я утверждаю веб-элемент с числовым значением, в котором известно ожидаемое число. Проблема заключается в том, что когда вносится изменение, которое изменяет это числовое значение, изменение происходит постепенно в зависимости от скорости интернет-соединения. До этого момента я прибегал к использованию sleep для ожидания завершения обновления элемента, прежде чем я использую утверждения, но я хотел бы сделать так, чтобы это ожидание не превышало времени, которое требуется элементу для прекращения обновления и, следовательно, не требуется включите сон слишком короткий или слишком длинный.

2 ответа

Вы должны попробовать это:

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(<specific locator of element>));

Сон не является хорошим вариантом, потому что вы ждете всегда ожидаемое количество времени.

В представленном выше подходе вы всегда ждете видимости конкретного элемента. Когда элемент виден, ваши тестовые шаги будут идти вперед. Там нет дополнительного времени ожидания, которое вы получили с неявным сном

Избегайте использования sleep и замените его неявным ожиданием или используйте ожидаемое условие, если применимо. ниже код C# для него

int time =10; // set maximum time required for operation
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(time));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath(""))); //replace "" with your desired xpath

Приведенный выше код будет ждать не более 10 секунд, пока элемент не будет виден. но если он появится раньше, он перейдет к следующему процессу, поэтому вам не нужно ждать определенного времени. Кроме того, существуют другие ожидаемые условия, такие как ElementExists, ElementToBeClickable и т. Д. Я оставляю вам самим изучить подходящий вариант для себя.

если вы хотите использовать неявное ожидание, используйте код ниже

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(50));
Другие вопросы по тегам