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?
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.
La raison pour que ElementNotInteractableException se produise peut être nombreuse.
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();
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);
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));