[FIXED] Wie man wartet, bis ein Element in Selen nicht mehr existiert

Ausgabe

Ich teste eine Benutzeroberfläche, in der der Benutzer auf eine Schaltfläche zum Löschen klickt und ein Tabelleneintrag verschwindet. Daher möchte ich überprüfen können, ob der Tabelleneintrag nicht mehr vorhanden ist.

Ich habe versucht, mit ExpectedConditions.not()to invert zu verwenden ExpectedConditions.presenceOfElementLocated(), in der Hoffnung, dass dies bedeuten würde, “erwarte, dass das angegebene Element nicht vorhanden ist”. Mein Code ist so:

browser.navigate().to("http://stackoverflow.com");
new WebDriverWait(browser, 1).until(
        ExpectedConditions.not(
                ExpectedConditions.presenceOfElementLocated(By.id("foo"))));

Ich habe jedoch festgestellt, dass ich selbst dabei TimeoutExpcetionein NoSuchElementExceptionSprichwort bekomme, das besagt, dass das Element “foo” nicht existiert. Natürlich möchte ich kein solches Element haben, aber ich möchte nicht, dass eine Ausnahme ausgelöst wird.

Wie kann ich also warten, bis ein Element nicht mehr existiert? Ich würde ein Beispiel bevorzugen, das möglichst nicht auf das Abfangen einer Ausnahme angewiesen ist (so wie ich es verstehe, sollten Ausnahmen für außergewöhnliches Verhalten ausgelöst werden).

Lösung

Sie können auch verwenden –

new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(locator));

Wenn Sie die Quelle durchgehen , können Sie sehen, dass sowohl NoSuchElementExceptionals staleElementReferenceExceptionauch behandelt werden.

/**
   * An expectation for checking that an element is either invisible or not
   * present on the DOM.
   *
   * @param locator used to find the element
   */
  public static ExpectedCondition<Boolean> invisibilityOfElementLocated(
      final By locator) {
    return new ExpectedCondition<Boolean>() {
      @Override
      public Boolean apply(WebDriver driver) {
        try {
          return !(findElement(locator, driver).isDisplayed());
        } catch (NoSuchElementException e) {
          // Returns true because the element is not present in DOM. The
          // try block checks if the element is present but is invisible.
          return true;
        } catch (StaleElementReferenceException e) {
          // Returns true because stale element reference implies that element
          // is no longer visible.
          return true;
        }
      }


Beantwortet von –
Vivek Singh


Antwort geprüft von –
Timothy Miller (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like