Selenium FluentWait和元素不可见异常

时间:2017-03-22 13:02:50

标签: java selenium testing

我试图使用FluentWait而不是睡觉,这是我的第一次练习。首先,最重要的是,我是否正确行事?其次,我通过两个元素,所以我觉得它有点工作(PaymentMethod按钮和CheckOut按钮)。在我实施FluentWait之前,它无法找到它们。最后它找不到第三个(backToDesktop按钮)元素。虽然我添加了wait.ignore(ElementNotVisibleExcecption.class),但保持抛出元素不可见。

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");

1 个答案:

答案 0 :(得分:0)

Intent intent = new Intent(MapsActivity.this, RestaurantDetailsActivity.class); 是自定义等待。在大多数情况下你不应该需要它。您应该始终使用FluentWaitWebDriverWait,如果这不起作用,则可以调查ExpectedConditions。我的猜测是,像下面这样简单的东西对你有用。这只是一个例子。您应该查看ExpectedConditions提供的所有可以等待的条件。可能最常见的是等待元素可见或可点击。

FluentWait