Ответ 1
Если исключение попадает на Clear()
,
элемент, скорее всего, присутствует на странице и в входе в состоянии readonly
.
У меня эта проблема с селеном; Я не могу найти я textinput: он всегда поднимает эту уловку:
Element is not currently interactable and may not be manipulated
в этой строке:
Driver.FindElement(By.Id("ctl00")).Clear();
Я пытаюсь сделать так:
Waiting.Until(driver =>(By.Id("ctl00")));
и
Waiting.Until(ExpectedConditions.ElementExists(By.Id("ctl00")));
но не повезло.
Если исключение попадает на Clear()
,
элемент, скорее всего, присутствует на странице и в входе в состоянии readonly
.
Попробуйте сначала проверить XPath, так как он может быть нацелен на несколько элементов. Из-за этого элемент в настоящее время не взаимодействует и не может быть изменен.
Я столкнулся с той же проблемой и нашел решение выше, так как мой XPath находил несколько элементов, которые существуют на DOM, но не на странице.
Исправьте элемент XPath, ошибка разрешится автоматически с добавлением ожидания webdriver.
Это происходит иногда, когда элемент не отображается. Это произойдет, даже когда элемент будет виден. Попробуйте использовать различные теги, такие как xpath или т.д.
Вы можете проверить статус элемента, используя script
driver.findElement(By.className("")).isEnabled()
Я столкнулся с той же ошибкой, также был немного смущен, но решил ее, используя приведенное ниже условие ожидания. elementToBeClickable
проверяет, что элемент является видимым и elementToBeClickable
. Возможно, видимости достаточно, но Selenium генерирует явное ElementNotVisibleException
, поэтому я не уверен, почему я не получил бы это... В любом случае, я решил использовать более устойчивое условие ожидания, и оно хорошо сработало для меня.
wait.until(ExpectedConditions.elementToBeClickable(By.id("myElementId"))).clear();
Это связано с тем, что элемент не отображается, поэтому примените большее количество ожиданий во время выполнения действия или вы можете использовать жестко запрограммированную причину сна, иногда ожидания webdriver не работают.
Waiting.Until(ExpectedConditions.ElementExists(By.Id("ctl00")));
должен работать.
Установите точку прерывания в строке Waiting.Until()
и введите $$("#ctl00")
в консоли Chrome, чтобы проверить, существует ли этот элемент.
Заставьте драйвер ждать, пока элемент не будет виден.
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(ExpectedConditions.visibilityOf(element));
Надеюсь, это поможет!
Если ожидание visibilityOf()
, elementToBeClickable()
, element.isEnabled()
не помогает, попробуйте взглянуть на атрибуты вашего элемента.
У него могут быть некоторые атрибуты, отвечающие за состояние только для чтения, в моем случае это было aria-readonly и aria-disabled, поэтому я создал пользовательское ожидание так:
webDriverWait.until(webDriver -> webElement.getAttribute("aria-readonly").equals("false") && webElement.getAttribute("aria-disabled").equals("false"));
Используйте это, вы не получите эту ошибку (может быть, прокрутка здесь не работает, поэтому используйте клавиатуру TAB для продолжения, моя проблема была решена этим)
Actions act = new Actions(driver);
act.sendKeys(Keys.TAB).build().perform();
act.sendKeys(Keys.RETURN).build().perform();