WebDriverException:要素はポイント(x、y)でクリックできません
これは、java.lang.RuntimeExceptionを拡張する典型的なorg.openqa.selenium.WebDriverExceptionです。
この例外のフィールドは次のとおりです。
- 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
個々のユースケースについては、エラーがすべてを物語っています。
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
あなたが定義されていることをあなたのコードブロックから明らかなwait
ようにWebDriverWait wait = new WebDriverWait(driver, 10);
しかし、あなたは呼びかけているclick()
前に、要素のメソッドをExplicitWait
のように場に出ますuntil(ExpectedConditions.elementToBeClickable)
。
解決
エラーElement is not clickable at point (x, y)
はさまざまな要因から発生する可能性があります。次のいずれかの手順で対処できます。
1. JavaScriptまたはAJAX呼び出しが存在するため、要素がクリックされない
Actions
クラスを使用してみてください:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2.ビューポート内にないため、要素がクリックされない
を使用JavascriptExecutor
して要素をビューポート内に移動してみてください。
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3.要素がクリック可能になる前に、ページが更新されます。
この場合、ポイント4で説明したように、ExplicitWait、つまりWebDriverWaitを誘導します。
4.要素はDOMに存在しますが、クリックできません。
この場合、要素がクリック可能になるようにを設定してExplicitWaitを 誘導します。ExpectedConditions
elementToBeClickable
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5.要素は存在しますが、一時的なオーバーレイがあります。
この場合、オーバーレイが非表示になるようにExplicitWait
をにExpectedConditions
設定しinvisibilityOfElementLocated
て誘導し ます。
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6.要素は存在しますが、永続的なオーバーレイがあります。
JavascriptExecutor
要素に直接クリックを送信するために使用します。
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);