selenium invalid element state:元素当前不可交互,可能无法操作

时间:2014-08-07 08:06:03

标签: selenium

我有这个问题与硒;我找不到我的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"))); 

但没有运气。

9 个答案:

答案 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();