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(".//*[contains(@class, 'block-ui-wrapper')]").Length == 0);
У меня есть класс расширений, где я выполняю несколько пользовательских операций Selenium.Я обнаружил, что неявное ожидание доставляет мне больше хлопот, чем оно того стоит.И я нахожу, что явное ожидание селена может стать немного многословным, и это не все, что я хочу в моей структуре, поэтому я сделал большое количество расширений.Вот один из них.Обратите внимание, я использую FindElements для приведенного выше примера, потому что я не хочу, чтобы исключение выдавалось, если ничего не найдено.Это должно работать для вас.
Примечание. Вам нужно поместить это в статический класс, чтобы он работал.Будьте осторожны при расширении существующих классов, как это в логике, так как это может сбить с толку других, когда они пытаются определить, где определены методы.
Вот мой полный файл расширений через Github-гист.Я обертываю почти все функции Selenium.Я хорошо разбираюсь в Javascript, потому что JQuery на 100% надежен в поиске элементов, тогда как функция поиска Selenium имеет некоторые проблемы внутри таких вещей, как IFrames.Кроме того, JQuery имеет чрезвычайно надежный и супер-читабельный способ запроса элементов в DOM с использованием любого количества локаторов, будь то ID, класс, текст, псевдо-селекторы и т. Д .;все в одной строке запроса!(Отсутствие поддержки псевдо-селектора в Selenium css-селекторе может быть ограничением). Вот почему я использую его.Он гораздо более читабелен, чем xpath, проще в написании и на 100% надежен при правильном написании.Если у вас нет JQuery на тестируемых страницах, вы можете просто вставлять скрипт JQuery при каждой загрузке новой страницы.
Итак, я использую JQuery, чтобы найти и сгенерировать явный XPath для точного элементаЯ хочу на странице, и затем я передаю точный XPath логике Selenium "Find".Когда вы держите руку Selenium, нет проблем с поиском элементов.
https://gist.github.com/tsibiski/04410e9646ee9ced9f3794266d6c5a82