2017-03-22 4 views
0

Ich versuche, FluentWait anstelle von Schlaf zu verwenden, und dies ist meine erste Übung. Vor allem und am wichtigsten mache ich es überhaupt richtig? Zweitens bin ich durch zwei Elemente gekommen, also dachte ich, dass es irgendwie funktioniert (PaymentMethod Knopf und CheckOut Knopf). Bevor ich FluentWait implementiert habe, würde es sie nicht finden. Und schließlich wird das dritte Element (backToDesktop-Schaltfläche) nicht gefunden. Hält das Element nicht sichtbar, obwohl ich wait.ignore (ElementNotVisibleExcection.class) hinzugefügt habe.Selen FluentWait und Element nicht sichtbar Ausnahme

FluentWait<WebDriver> wait = new FluentWait<WebDriver>(login.getDriver()); 
    wait.withTimeout(5, TimeUnit.SECONDS); 
    wait.pollingEvery(250, TimeUnit.MILLISECONDS); 
    wait.ignoring(NoSuchElementException.class); 
    wait.ignoring(ElementNotVisibleException.class); 

    WebElement paymentMethod = wait.until(new Function<WebDriver, WebElement>() { 
     public WebElement apply(WebDriver driver) { 
      return login.getDriver().findElement(By.xpath("//*[@id='paymentMethodHolder']/div[1]/div[1]/button")); 
     } 
    }); 
    paymentMethod.click(); 
    System.out.println("FOUND PAYMENTMETHOD BUTTON"); 

    WebElement checkOut = wait.until(new Function<WebDriver, WebElement>() { 
     public WebElement apply(WebDriver driver) { 
      return login.getDriver().findElement(By.xpath("//*[@id='checout-footer-buttons']/button[2]")); 
     } 
    }); 
    checkOut .click(); 
    System.out.println("FOUND KINNITA BUTTON"); 

    WebElement backToDesktop= wait.until(new Function<WebDriver, WebElement>() { 
     public WebElement apply(WebDriver driver) { 
      return login.getDriver().findElement(By.className("modal-button-text")); 
     } 
    }); 
    backToDesktop.click(); 

    System.out.println("FOUND BACKTODESKTOP BUTTON"); 
+0

Ist das Element auf der Benutzeroberfläche sichtbar? – xyz

+0

@xyz Es schließt den Moment, wenn es zu diesem Teil kommt, aber ja, es sollte sichtbar sein. Kleiner Zusatz. Dies ist, was ich getan habe und es scheint zu arbeiten: wait.ignoring (NoSuchElementException.class, ElementNotVisibleException.class); \t \t wait.ignoring (WebDriverException.class); Bedeutet es, dass ich es richtig mache oder ist es nur ein glücklicher Zufall? Danke! –

+0

Ich denke, diese Art von Ansatz könnte überhaupt nicht funktionieren. Weil ich jetzt Element nicht sichtbare Ausnahme bekomme, obwohl ich wait.ignoring (ElementNotVisibleException.class) habe. –

Antwort

0

FluentWait ist eine benutzerdefinierte warten. Sie sollten es in den meisten Fällen nicht brauchen. Sie sollten immer mit einer WebDriverWait und ExpectedConditions beginnen und wenn das nicht funktioniert, dann untersuchen Sie vielleicht eine FluentWait. Ich schätze, dass etwas Einfaches wie das Folgende für Sie funktioniert. Dies ist nur ein Beispiel. Sie sollten sich die verschiedenen Bedingungen ansehen, auf die Sie warten können, die von ExpectedConditions zur Verfügung gestellt werden. Wahrscheinlich warten die meisten darauf, dass ein Element sichtbar oder anklickbar ist.

WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("someId"))); 
+0

vielen dank! Einfach und funktioniert perfekt. –

+0

Wenn Sie diese (oder irgendeine) Antwort nützlich fanden, bitte upvote. Wenn dies Ihre Frage beantwortet hat, akzeptieren Sie sie bitte als Antwort. Vielen Dank! – JeffC

+0

tat ich. Allerdings "Danke für die Rückmeldung! Stimmen von Personen mit weniger als 15 Ruf werden aufgezeichnet, aber nicht die öffentlich angezeigte Post-Punktzahl ändern". –

Verwandte Themen