Как создать ожидание в селене, который ждет веб-элемента, чтобы закончить обновление
Я довольно новичок в 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));