Ich habe explizite Wartezeiten verwendet und ich habe die Warnung:
org.openqa.selenium.WebDriverException: Das Element kann an Punkt (36, 72) nicht angeklickt werden. Ein anderes Element würde den Klick erhalten: ... Befehlsdauer oder Zeitüberschreitung: 393 Millisekunden
Wenn ich benutze Thread.sleep(2000)
, erhalte ich keine Warnungen.
@Test(dataProvider = "menuData")
public void Main(String btnMenu, String TitleResultPage, String Text) throws InterruptedException {
WebDriverWait wait = new WebDriverWait(driver, 10);
driver.findElement(By.id("navigationPageButton")).click();
try {
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(btnMenu)));
} catch (Exception e) {
System.out.println("Oh");
}
driver.findElement(By.cssSelector(btnMenu)).click();
Assert.assertEquals(driver.findElement(By.cssSelector(TitleResultPage)).getText(), Text);
}
#navigationPageButton
bis sie sichtbar sind (oder auchelementToBeClickable()
für dieses Element anklickbar sind ) oder prüfen, ob alle Voraussetzungen erfüllt sind, damit die Schaltfläche anklickbar ist.Antworten:
WebDriverException: Das Element kann an Punkt (x, y) nicht angeklickt werden.
Dies ist eine typische org.openqa.selenium.WebDriverException, die die java.lang.RuntimeException erweitert .
Die Felder dieser Ausnahme sind:
protected static final java.lang.String BASE_SUPPORT_URL
public static final java.lang.String DRIVER_INFO
public static final java.lang.String SESSION_ID
Über Ihren individuellen Anwendungsfall sagt der Fehler alles:
Aus Ihrem Codeblock geht hervor, dass Sie das
wait
als definiert haben,WebDriverWait wait = new WebDriverWait(driver, 10);
aber dieclick()
Methode für das Element aufrufen, bevor dasExplicitWait
wie in ins Spiel kommtuntil(ExpectedConditions.elementToBeClickable)
.Lösung
Der Fehler
Element is not clickable at point (x, y)
kann aus verschiedenen Faktoren resultieren. Sie können sie mit einem der folgenden Verfahren beheben:1. Element, das aufgrund vorhandener JavaScript- oder AJAX-Aufrufe nicht angeklickt wird
Versuchen Sie,
Actions
Klasse zu verwenden :2. Das Element wird nicht angeklickt, da es sich nicht im Ansichtsfenster befindet
Versuchen Sie
JavascriptExecutor
, das Element in das Ansichtsfenster zu bringen:3. Die Seite wird aktualisiert, bevor das Element angeklickt werden kann.
In diesem Fall induzieren Sie ExplicitWait, dh WebDriverWait, wie in Punkt 4 erwähnt.
4. Das Element ist im DOM vorhanden, aber nicht anklickbar.
In diesem Fall induzieren Sie ExplicitWait mit
ExpectedConditions
set to,elementToBeClickable
damit das Element anklickbar ist:5. Element ist vorhanden, hat jedoch eine temporäre Überlagerung.
In diesem Fall induzieren Sie
ExplicitWait
mitExpectedConditions
set to,invisibilityOfElementLocated
dass die Überlagerung unsichtbar ist.6. Element ist vorhanden, hat aber eine permanente Überlagerung.
Verwenden Sie
JavascriptExecutor
diese Option , um den Klick direkt auf das Element zu senden.quelle
Falls Sie es mit Javascript verwenden müssen
Wir können Argumente [0] .click () verwenden, um die Klickoperation zu simulieren.
quelle
Ich bin auf diesen Fehler gestoßen, als ich versucht habe, auf ein Element zu klicken (oder auf dessen Überlagerung, das war mir egal), und die anderen Antworten haben bei mir nicht funktioniert. Ich habe es mithilfe der
elementFromPoint
DOM-API behoben , um das Element zu finden, auf das Selenium stattdessen klicken soll:Ich hatte auch Situationen, in denen sich ein Element bewegte , zum Beispiel, weil ein Element darüber auf der Seite eine animierte Erweiterung oder Reduzierung durchführte. In diesem Fall hat diese Klasse für erwartete Bedingungen geholfen. Sie geben ihm die Elemente, die animiert sind , nicht die, auf die Sie klicken möchten. Diese Version funktioniert nur für jQuery-Animationen.
quelle
Du kannst es versuchen
quelle
WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().perform();
Das Scrollen der Seite zu dem in der Ausnahme erwähnten Punkt in der Nähe hat den Trick für mich getan. Unten ist ein Code-Snippet:
HINWEIS: Ich benutze Facebook PHP Webdriver
quelle
Die beste Lösung besteht darin, die Klickfunktion zu überschreiben:
quelle
In C # hatte ich Probleme mit der Überprüfung
RadioButton
, und dies funktionierte für mich:quelle
Kann es mit dem folgenden Code versuchen
Ein anderes Element übergeben würde den Klick erhalten :
<a class="navbar-brand" href="#"></a>
Übergeben Sie die ID der anklickbaren Schaltfläche wie unten gezeigt
quelle