ElementNotInteractableExceptionはW3C例外で、要素は HTML DOM に存在しますが、やり取りできる状態ではないことを示すためにスローされます。
ElementNotInteractableExceptionが発生する理由は数多くあります。
関心のあるWebElement
に対する他のWebElement
の一時的なオーバーレイ:
この場合、直接的な解決策は、ExplicitWait
を誘導することでした。つまり、WebDriverWait
とExpectedCondition
asinvisibilityOfElementLocated
as as following:
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
をinvisibilityOfElementLocated
として使用する代わりにExpectedCondition
aselementToBeClickable
次のように:
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);
実際、例外はElement Not Visible
です
ベストプラクティスは、ドライバーのインスタンス化の下の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));