Поскольку в. net нет метода ожидания для элемента, я создал этот метод сам:
public void WaitForLoad(Func<bool> cond)
{
var timeout = 3;
// Time waiting for successful submission before we assume error
try
{
new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout)).Until(condition => cond());
}
catch
{
throw new TimeoutException($"Response took longer than {timeout}s.");
}
}
При ожидании загрузки страницы я использую следующий блок кода:
// Wait until form overlay loads and becomes clickable
WaitForLoad(() =>
{
var createGroupForm = $"{SelectorConstants.SidePanelOverlay} form";
return Driver.FindElements(By.CssSelector(createGroupForm)).Any() &&
Driver.FindElement(By.CssSelector(createGroupForm)).Enabled;
});
Затем я использую этот метод, чтобы дождаться включения элемента ввода, а затем очищать ввод и записывать в него.
var titleInput = Driver.FindElement(By.CssSelector(titleFieldSelector));
WaitForLoad(() => titleInput.Enabled);
titleInput.Clear();
titleInput.SendKeys("dsdsas");
Хотя иногда это срабатывает. Метод .Clear () иногда вызывает исключение:
OpenQA.Selenium.ElementNotInteractableException : element not interactable
Почему это происходит, когда я явно жду, пока элемент станет активным?