如何解决ElementNotInteractableException:元素在Selenium网络驱动程序中不可见?

在这里,我有我的代码的图像和我的错误的图像。任何人都可以帮助我解决这个问题吗?

enter image description here

enter image description here


答案 1

元素NotInteractableException

ElementNotInteractableException是W3C异常,它被抛出以指示尽管HTML DOM上存在一个元素,但它不处于可以与之交互的状态。

原因和解决方案:

ElementNotInteractableException发生的原因可能很多。

  1. 将其他 WebElement 临时覆盖在我们感兴趣的 WebElement

    在这种情况下,直接的解决方案是诱导显式Wait,即WebDriverWaitExpectedCondition作为隐形的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();
    
  2. 将其他WebElement永久覆盖在我们感兴趣的WebElement

    如果在这种情况下,覆盖层是永久性的,我们必须将WebDriver实例转换为JavascriptExecutor,并按如下方式执行单击操作:

    WebElement ele = driver.findElement(By.xpath("element_xpath"));
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript("arguments[0].click();", ele);
    

答案 2

我得到这个是因为我想与之交互的元素被另一个元素覆盖了。在我的情况下,它是一个不透明的覆盖层,使一切都r / o。

当尝试单击另一个元素下的一个元素时,我们通常会得到“...其他元素将收到点击 “ 但并非总是 :。(


推荐