我有这个问题与硒;我找不到我的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")));
但没有运气。
答案 0 :(得分:7)
如果在Clear()
上抛出异常,
元素最有可能出现在页面上,输入处于readonly
状态。
答案 1 :(得分:3)
首先尝试验证XPath,因为可能会针对多个元素。 因此,元素目前无法互动,也可能无法被操纵。
我遇到了同样的问题并找到了上面的解决方案,因为我的XPath定位了多个元素,它存在于DOM而不是页面。
更正元素XPath,错误将通过添加webdriver等自动解决。
答案 2 :(得分:2)
当元素不可见时,有时会发生这种情况。即使元素也可见,它也会发生。 尝试使用不同的标签,如xpath等。
您可以使用以下脚本
检查元素状态driver.findElement(By.className("")).isEnabled()
答案 3 :(得分:2)
我遇到同样的错误,也有点困惑,但是使用下面的等待条件解决了它。 elementToBeClickable
条件检查元素是否可见并启用。也许能见度已经足够了,但是Selenium会抛出一个明确的ElementNotVisibleException
,所以我不确定为什么我不会那样......
无论如何,我选择使用更强大的等待条件,它对我来说效果很好。
wait.until(ExpectedConditions.elementToBeClickable(By.id("myElementId"))).clear();
答案 4 :(得分:1)
这是由于元素不可见所以在执行操作时应用更多等待,或者您可以使用硬编码睡眠,因为有时webdriver的等待不起作用。
答案 5 :(得分:0)
Waiting.Until(ExpectedConditions.ElementExists(By.Id("ctl00")));
应该有用。
在Waiting.Until()
行设置断点并在Chrome控制台中输入$$("#ctl00")
以检查该元素是否存在。
答案 6 :(得分:0)
让驱动程序等到元素可见。
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(ExpectedConditions.visibilityOf(element));
希望这有帮助!
答案 7 :(得分:0)
如果等待visibilityOf()
,elementToBeClickable()
,element.isEnabled()
不能解决问题,请尝试查看元素的属性。
它可能具有负责只读状态的某些属性,在我的情况下,这是 aria-readonly 和 aria-disabled ,因此,我创建了这样的自定义等待: / p>
webDriverWait.until(webDriver -> webElement.getAttribute("aria-readonly").equals("false") && webElement.getAttribute("aria-disabled").equals("false"));
答案 8 :(得分:0)
使用此方法您将不会收到此错误(可能是滚动在此处不起作用,因此请使用小键盘TAB继续操作,我的问题已得到解决)
Actions act = new Actions(driver);
act.sendKeys(Keys.TAB).build().perform();
act.sendKeys(Keys.RETURN).build().perform();