Selenium FluentWait未按预期工作问题排查
Selenium中FluentWait与WebDriverWait等待元素行为不一致问题
问题场景
需要等待页面上id为MX的元素,采用FluentWait实现时出现报错,但改用WebDriverWait却能正常运行,希望找到适配PageObject模式的简洁写法,并明确两种等待方式的差异原因。
FluentWait报错代码
FluentWait<WebDriver> fluentWait = new FluentWait<>(driver) .withTimeout(Duration.ofSeconds(30)) .pollingEvery(Duration.ofMillis(200)) .ignoring(NoSuchElementException.class); WebElement countryMx = initCountry.getMx(); fluentWait.until(d -> ExpectedConditions.visibilityOf(countryMx)); System.out.println("Element MX should be visible by now"); fluentWait.until(d -> ExpectedConditions.elementToBeClickable(countryMx)); System.out.println("Element MX should be clickable by now"); do { executor.executeScript("arguments[0].scrollIntoView(true);", countryMx); } while (!countryMx.isDisplayed()); countryMx.click();
报错信息
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"#MX"}
WebDriverWait正常运行代码
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(1)); wait.until(ExpectedConditions.presenceOfElementLocated(By.id("MX"))); WebElement countryMx = initCountry.getMx(); do { executor.executeScript("arguments[0].scrollIntoView(true);", countryMx); } while (!countryMx.isDisplayed()); countryMx.click();
额外尝试的错误写法
即使直接在FluentWait中等待元素存在,依然在executeScript()处失败:
fluentWait.until(d -> ExpectedConditions.presenceOfElementLocated(By.id("MX")));
疑问与需求
认为FluentWait与WebDriverWait的行为应该等价,希望找到适配PageObject模式的简洁写法,解决当前FluentWait的报错问题。
内容的提问来源于stack exchange,提问作者Greco
相关产品推荐
相关产品推荐

