【发布时间】:2017-03-22 13:02:50
【问题描述】:
我正在尝试使用 FluentWait 而不是 sleep,这是我的第一次练习。首先,最重要的是,我做得对吗?其次,我通过了两个元素,所以我认为它有点工作(PaymentMethod 按钮和 CheckOut 按钮)。在我实施 FluentWait 之前,它找不到它们。最后它找不到第三个(backToDesktop 按钮)元素。尽管我添加了 wait.ignore(ElementNotVisibleExcecption.class),但始终抛出 Element 不可见。
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");
【问题讨论】:
-
元素在 UI 上是否可见?
-
@xyz 它在到达那部分的那一刻就关闭了,但是是的,它应该是可见的。一点补充。这就是我所做的,它似乎正在工作:wait.ignoring(NoSuchElementException.class, ElementNotVisibleException.class); wait.ignoring(WebDriverException.class);这是否意味着我正在以正确的方式做这件事,还是只是一个幸运的巧合?谢谢!
-
我认为这种方法可能根本行不通。因为现在我得到元素不可见异常,虽然我有 wait.ignoring(ElementNotVisibleException.class)。
-
wait.ignoring(ElementNotVisibleException.class)表示即使抛出 ElementNotVisibleException,selenium 也会继续寻找元素。如果元素不可见,它将无法获取元素,无论您添加什么异常到忽略列表。 -
@xyz 是的,我知道,但是它在通过它找到的第二个按钮的第一刻抛出这个异常。它不会等待 5 秒 wait.withTimeout(5, TimeUnit.SECONDS);立即抛出此异常。