web-dev-qa-db-ja.com

ElementNotInteractableExceptionを解決する方法:要素はSelenium Webdriverに表示されませんか?

ここに、コードのイメージとエラーのイメージがあります。誰でもこの問題を解決するのに役立ちますか?

enter image description here

enter image description here

13
Aarthi

ElementNotInteractableException

ElementNotInteractableExceptionはW3C例外で、要素は HTML DOM に存在しますが、やり取りできる状態ではないことを示すためにスローされます。

理由と解決策:

ElementNotInteractableExceptionが発生する理由は数多くあります。

  1. 関心のあるWebElementに対する他のWebElementの一時的なオーバーレイ

    この場合、直接的な解決策は、ExplicitWaitを誘導することでした。つまり、WebDriverWaitExpectedConditionasinvisibilityOfElementLocatedas 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();
    

    より良い解決策は、もう少しきめ細かくなり、ExpectedConditioninvisibilityOfElementLocatedとして使用する代わりにExpectedConditionaselementToBeClickable次のように:

    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);
    
25
DebanjanB

実際、例外は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));
1
NarendraR