web-dev-qa-db-fra.com

Comment résoudre ElementNotInteractableException: L'élément n'est pas visible dans WebDriver Selenium?

Ici, j'ai l'image de mon code et l'image de mon erreur. Quelqu'un peut-il m'aider à résoudre ce problème?

 enter image description here

 enter image description here

4
Aarthi

ElementNotInteractableException

ElementNotInteractableException est l'exception du W3C qui indique que, bien qu'un élément soit présent sur le HTML DOM , il ne se trouve pas dans un état avec lequel il est possible d'interagir.

Raisons et solutions:

La raison pour que ElementNotInteractableException se produise peut être nombreuse.

  1. Superposition temporaire d'une autre WebElement sur la WebElement de notre intérêt:

    Dans ce cas, la solution directe aurait consisté à induire ExplicitWait c'est-à-dire WebDriverWait en combinaison avec ExpectedCondition en tant que invisibilityOfElementLocated de la manière suivante:

    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();
    

    Une meilleure solution serait d’obtenir un peu plus de précision et au lieu d’utiliser ExpectedCondition comme invisibilityOfElementLocated, nous pouvons utiliser ExpectedCondition comme elementToBeClickable comme suit:

    WebDriverWait wait1 = new WebDriverWait(driver, 10);
    WebElement element1 = wait1.until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_of_element_to_be_clicked")));
    element1.click();
    
  2. Superposition permanente d'autres WebElement sur la WebElement de notre intérêt:

    Si la superposition est permanente dans ce cas, nous devons convertir l'instance WebDriver en JavascriptExecutor et effectuer l'opération de clic de la manière suivante:

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

En réalité, l'exception est Element Not Visible

La meilleure pratique consiste à utiliser Implicit wait sous l'instanciation du pilote afin qu'il reçoive suffisamment d'élément de temps avant d'exception.

driver.get("http://www.testsite.com");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

Toujours confronté à un problème car certains éléments nécessitent plus de temps, vous devez disposer de ExplicitWait pour que chaque élément satisfasse certaines conditions

Dans votre cas, vous faites face à l'élément not visible exception, puis utilisez la condition d'attente de la manière suivante.

WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.your_Elemetnt));
0
NarendraR