如何解决ElementNotInteractableException:在Selenium webdriver中看不到元素?

时间:2017-05-09 10:59:19

标签: java selenium selenium-webdriver webdriver webdriverwait

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

enter image description here

enter image description here

5 个答案:

答案 0 :(得分:19)

ElementNotInteractableException

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

原因&解决方案:

ElementNotInteractableException 发生的原因可能很多。

  1. 暂时覆盖其他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
  2. 永久覆盖其他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直到元素定位或可点击。

  1. 尝试使用隐式等待:

    driver.manage().timeouts().implicitlyWait(Time, TimeUnit.SECONDS);
    
  2. 如果这不起作用,请使用显式等待:

    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。

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