如何解决ElementNotInteractableException:元素在Selenium网络驱动程序中不可见?
2022-09-01 08:16:41
ElementNotInteractableException是W3C异常,它被抛出以指示尽管HTML DOM上存在一个元素,但它不处于可以与之交互的状态。
ElementNotInteractableException发生的原因可能很多。
将其他 WebElement
临时覆盖在我们感兴趣的 WebElement
上:
在这种情况下,直接的解决方案是诱导显式Wait
,即WebDriverWait
与ExpectedCondition
作为隐形的Element定位
为follows:
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();
一个更好的解决方案是获得更精细的粒度,而不是使用EdualCondition
作为invisibilityOfElementLocated
,我们可以使用ExpecentCondition
作为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
实例转换为JavascriptExecutor
,并按如下方式执行单击操作:
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);
我得到这个是因为我想与之交互的元素被另一个元素覆盖了。在我的情况下,它是一个不透明的覆盖层,使一切都r / o。
当尝试单击另一个元素下的一个元素时,我们通常会得到“...其他元素将收到点击 “ 但并非总是 :。(