答案 0 :(得分:19)
ElementNotInteractableException是W3C异常,抛出此异常表示尽管HTML DOM上存在一个元素,但它不处于可以与之交互的状态。
ElementNotInteractableException 发生的原因可能很多。
暂时覆盖其他WebElement
超过我们感兴趣的WebElement
:
在这种情况下,直接解决方案是将 ExplicitWait
,即 WebDriverWait
与 {{1}结合使用作为 ExpectedCondition
作为下列内容:
invisibilityOfElementLocated
更好的解决方案是更细致,而不是将 WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("xpath_of_element_to_be_invisible")));
driver.findElement(By.xpath("xpath_element_to_be_clicked")).click();
用作 ExpectedCondition
,我们可以使用 { {1}} 为 invisibilityOfElementLocated
,如下所示:
ExpectedCondition
永久覆盖其他elementToBeClickable
超过我们感兴趣的WebDriverWait wait1 = new WebDriverWait(driver, 10);
WebElement element1 = wait1.until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_of_element_to_be_clicked")));
element1.click();
:
如果在这种情况下叠加层是永久叠加层,我们必须将 WebElement
实例强制转换为 WebElement
并执行点击操作如下:
WebDriver
答案 1 :(得分:0)
实际上,例外是Element Not Visible
最佳做法是在驱动程序Instantiation下面的用户Implicit wait
,以便在通过异常之前获得足够的时间精细元素
driver.get("http://www.testsite.com");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
仍面临问题,因为某些元素需要更多时间,您必须使用ExplicitWait
个别元素来满足特定条件
在你的情况下,你面对的是元素not visible exception
,然后按照以下方式使用等待条件
WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.your_Elemetnt));
答案 2 :(得分:0)
当元素不处于可交互状态时,将获得此异常。因此,我们可以使用wait直到元素定位或可点击。
尝试使用隐式等待:
driver.manage().timeouts().implicitlyWait(Time, TimeUnit.SECONDS);
如果这不起作用,请使用显式等待:
WebDriverWait wait=new WebDriverWait(driver, 20);
WebElement input_userName;
input_userName = wait.until(ExpectedConditions.elementToBeClickable(By.tagName("input")));
input_userName.sendkeys("suryap");
您也可以使用ExpectedCondition.visibilityOfElementLocated()
。
您可以增加时间,例如
WebDriverWait wait=new WebDriverWait(driver, 90);
答案 3 :(得分:-1)
针对Javascript的解决方案如下所示。您将不得不修改时间以适合您的需求。
driver.manage().setTimeouts({ implicit: 30000 });
希望这对某人有帮助。 请参阅docs供参考
答案 4 :(得分:-1)
之所以得到这个,是因为我想与之交互的元素被另一个元素覆盖。就我而言,这是一个不透明的覆盖层,可以使所有内容都变为r / o。
当尝试单击另一个元素下的元素时,通常会得到“ ...其他元素会收到点击”,但并非总是:。(