Wie kann man warten, bis ein Element in Selen vorhanden ist?

Lesezeit: 2 Minuten

Wie kann man warten bis ein Element in Selen vorhanden
Steve Kammern

Ich versuche, Selen dazu zu bringen, auf ein Element zu warten, das nach dem Laden der Seite dynamisch zum DOM hinzugefügt wird. Versucht dies:

fluentWait.until(ExpectedConditions.presenceOfElement(By.id("elementId"));

Falls es hilft, hier ist es fluentWait:

FluentWait fluentWait = new FluentWait<>(webDriver) {
    .withTimeout(30, TimeUnit.SECONDS)
    .pollingEvery(200, TimeUnit.MILLISECONDS);
}

Aber es wirft ein NoSuchElementException – sieht aus wie presenceOfElement erwartet, dass das Element vorhanden ist, also ist dies fehlerhaft. Dies muss Brot und Butter für Selen sein und ich möchte das Rad nicht neu erfinden … könnte jemand eine Alternative vorschlagen, idealerweise ohne mein eigenes zu rollen Predicate?

Wie kann man warten bis ein Element in Selen vorhanden
Peter Mensik

Sie müssen anrufen ignoring mit Ausnahme zu ignorieren, während die WebDriver Ich werde warten.

FluentWait<WebDriver> fluentWait = new FluentWait<>(driver)
        .withTimeout(30, TimeUnit.SECONDS)
        .pollingEvery(200, TimeUnit.MILLISECONDS)
        .ignoring(NoSuchElementException.class);

Siehe die Dokumentation von FließendWarte Für mehr Information. Beachten Sie jedoch, dass diese Bedingung bereits implementiert ist Erwartete Bedingungen also solltest du verwenden

WebElement element = (new WebDriverWait(driver, 10))
   .until(ExpectedConditions.elementToBeClickable(By.id("someid")));

*Update für neuere Versionen von Selenium:

withTimeout(long, TimeUnit) has become withTimeout(Duration)
pollingEvery(long, TimeUnit) has become pollingEvery(Duration)

Der Code sieht also so aus:

FluentWait<WebDriver> fluentWait = new FluentWait<>(driver)
        .withTimeout(Duration.ofSeconds(30)
        .pollingEvery(Duration.ofMillis(200)
        .ignoring(NoSuchElementException.class);

Grundlegende Anleitung zum Warten finden Sie hier Hier.

  • entweder sollte es sein oder es sollte <> sein, wenn Sie Java 8 verwenden würde Ihnen einen Kompilierungsfehler geben.

    – Schek

    5. Mai 17 um 3:44 Uhr

  • Es ist NICHT in ExpectedCondition implementiert … es ist in WebDriverWait. public WebDriverWait (WebDriver-Treiber, Uhr, Schläfer, langes timeOutInSeconds, langes sleepTimeOut) { super (Treiber, Uhr, Schläfer); this.withTimeout (timeOutInSeconds, TimeUnit.SECONDS); this.pollingEvery(sleepTimeOut, TimeUnit.MILLISECONDS); this.ignoring (NotFoundException.class); this.driver = Fahrer; }

    – Sugat Mankar

    17. Juni 17 um 3:57 Uhr


WebDriverWait wait = new WebDriverWait(driver,5)
wait.until(ExpectedConditions.visibilityOf(element));

Sie können dies verwenden, da einige Zeit vor dem Laden des gesamten Seitencodes ausgeführt wird und einen Fehler auslöst. Zeit ist in Sekunden

Lassen Sie mich Ihnen die Verwendung empfehlen Selenid Bücherei. Es ermöglicht das Schreiben von viel prägnanteren und lesbareren Tests. Es kann auf das Vorhandensein von Elementen mit viel kürzerer Syntax warten:

$("#elementId").shouldBe(visible);

Hier ist ein Beispielprojekt zum Testen der Google-Suche:
https://github.com/selenide-examples/google

  • Keine Chance, dass dies auf Python portiert wird?

    – franklin

    13. Februar ’16 um 18:00 Uhr

  • Es ist nach Python portiert. Siehe „Selene“-Python-Bibliothek.

    – Andrei Solntsev

    21. Februar 17 um 21:42 Uhr

FluentWait löst im Falle der Verwirrung eine NoSuchElementException aus

org.openqa.selenium.NoSuchElementException;     

mit

java.util.NoSuchElementException

in

.ignoring(NoSuchElementException.class)

.

491950cookie-checkWie kann man warten, bis ein Element in Selen vorhanden ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy