Я предпочитаю это, так как буквально любое логическое условие "ждать до".
public static void WaitUntil(this IWebDriver driver, Func<bool> Condition, float timeout = 10f)
{
float timer = timeout;
while (!Condition.Invoke() && timer > 0f) {
System.Threading.Thread.Sleep(500);
timer -= 0.5f;
}
System.Threading.Thread.Sleep(500);
}
driver.WaitUntil(() => driver.FindElements(By.XPath("some xpath...").Length == 0);
//Here is the particular benefit over normal Selenium waits. Being able to wait for things that have utterly nothing to do with Selenium, but are still sometimes valid things to wait for.
driver.WaitUntil(() => "Something exists in the database");
Я обнаружил, что неявное ожидание доставляет мне больше хлопот, чем оно того стоит. И я нахожу, что явное ожидание селена может стать немного многословным, и оно не охватывает все, что мне нужно от него в моей среде, поэтому я сделал большое количество расширений. Вот один из них. Обратите внимание, я использую FindElements для приведенного выше примера, потому что я не хочу, чтобы исключение выдавалось, если ничего не найдено. Это должно работать для вас.
Примечание: это C #, но это не должно быть сложно изменить для любого языка (особенно Java). Если ваш язык не допускает таких расширений, просто вызовите метод непосредственно в классе. Вам нужно будет поместить это в статический класс, чтобы он был функциональным. Будьте осторожны при расширении существующих классов, подобных этому, в логике, так как это может запутать других, когда они пытаются определить, где определены методы.