Как создать ожидание в селене, который ждет веб-элемента, чтобы закончить обновление - PullRequest
0 голосов
/ 02 июля 2019

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

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

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

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

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

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

0 голосов
/ 02 июля 2019

Избегайте использования сна и замените его неявным ожиданием или используйте ожидаемое условие, если применимо.ниже приведен код 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));
...