Я пытаюсь запустить тест Selenium, где он ожидает, пока определенный атрибут не получит значение для продолжения, и при проверке в браузере (Проверка кода Ctrl + shift + I , ctrl + F ), он находит элемент с помощью локатора css, но я при запуске теста всегда получаю тайм-аут - и элемент получает желаемое значение до этого времени
- Проверено, что локатор css действителен в "проверке кода" и поиска
- Попробовал более простые локаторы - он находит идентификатор, но не может найти атрибут и его значение
- Погуглил как сумасшедший, чтобы найти решение
Мой код (CMExtensionMethods.IsElementVisible == Ожидаемые условия, делает то же самое):
public static WebDriverWait waitForElement = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
waitForElement.Until(CMExtensionMethods.IsElementVisible(By.CssSelector("#page_progress[style~='display:']")));
public static Func<IWebDriver, IWebElement> IsElementVisible(By identifier) {
return (driver) =>
{
try {
return IfElementVisible(driver.FindElement(identifier));
}
catch(NoSuchElementException) {
return null;
}
};
}
// Part of the method above
private static IWebElement IfElementVisible(IWebElement element) {
return element.Displayed ? element : null;
}
HTML-код на странице (стиль page_progress изменяется в зависимости от состояния сайта - стиль может быть таким или пустым):
<div id="page_progress" class="loading-progress" style="display: none;">
</div>
<div id="page_saveindicator" class="unsaved-changes" style="display:
none;"></div>
Ожидание: Код для продолжения сразу после того, как стиль получает значение
Результат: Ничего не найдено, и я получаю ошибку тайм-аута через 5 секунд (как установлено), несмотря на то, что элемент имеет атрибут и значение, которое он должен
Стоит упомянуть - метод IsElementVisible работает - проверено на идентификаторах, а CSS-селекторы используют Class и Id (только)