WebDriverException: l'elemento non è selezionabile nel punto (x, y)
Questa è una tipica org.openqa.selenium.WebDriverException che estende java.lang.RuntimeException .
I campi di questa eccezione sono:
- BASE_SUPPORT_URL :
protected static final java.lang.String BASE_SUPPORT_URL
- DRIVER_INFO :
public static final java.lang.String DRIVER_INFO
- SESSION_ID :
public static final java.lang.String SESSION_ID
Riguardo al tuo caso d'uso individuale, l'errore dice tutto:
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
È chiaro dal blocco di codice che hai definito waitas WebDriverWait wait = new WebDriverWait(driver, 10);ma stai chiamando il click()metodo sull'elemento prima che ExplicitWaitentri in gioco come in until(ExpectedConditions.elementToBeClickable).
Soluzione
L'errore Element is not clickable at point (x, y)può derivare da diversi fattori. Puoi risolverli con una delle seguenti procedure:
1. L'elemento non viene cliccato a causa della presenza di chiamate JavaScript o AJAX
Prova a usare ActionsClass:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. L'elemento non viene cliccato perché non è all'interno di Viewport
Prova a utilizzare JavascriptExecutorper portare l'elemento all'interno del Viewport:
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. La pagina viene aggiornata prima che l'elemento sia selezionabile.
In questo caso indurre ExplicitWait ovvero WebDriverWait come indicato al punto 4.
4. L'elemento è presente nel DOM ma non è cliccabile.
In questo caso indurre ExplicitWait con ExpectedConditionsimpostato su elementToBeClickableaffinché l'elemento sia cliccabile:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5. L'elemento è presente ma ha una sovrapposizione temporanea.
In questo caso, indurre ExplicitWaitcon ExpectedConditionsimpostato su invisibilityOfElementLocatedaffinché la sovrapposizione sia invisibile.
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6. L'elemento è presente ma ha una sovrapposizione permanente.
Utilizzare JavascriptExecutorper inviare il clic direttamente sull'elemento.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);