You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium自动化:显式等待方法报错问题求助

解决Selenium WebDriverWait超时参数类型不匹配问题

修改要点

  • 新版Selenium(4.x+)的WebDriverWait构造器不再支持int类型超时参数,必须传入Duration对象,因此在sendKeys方法内部将int类型的超时值转换为Duration对象即可
  • 替换过时的implicitlyWait(int, TimeUnit)方法,改用支持Duration类型的重载版本,避免API过时警告

修改后的完整代码

import java.time.Duration;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Syncrnization {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver_win32 (2)\\chromedriver_win32 (3)\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        
        // 替换过时的隐式等待方法,使用Duration参数
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));
        driver.manage().window().maximize();
        driver.get("https://compelapps.in/eFacilito_Control_Center/Login");
        
        WebElement username = driver.findElement(By.id("txtUserName"));
        WebElement password = driver.findElement(By.id("txtPassword"));

        // 调用方式保持不变,仍传入int类型的超时秒数
        sendKeys(driver, username, 10, "mansoor.a");
    }

    public static void sendKeys(WebDriver driver, WebElement element, int timeout, String value) {
        // 将int超时值转换为Duration对象(按秒处理)
        new WebDriverWait(driver, Duration.ofSeconds(timeout))
                .until(ExpectedConditions.visibilityOf(element));
        element.sendKeys(value);
    }
}

说明

核心修改在于sendKeys方法内的WebDriverWait初始化逻辑,通过Duration.ofSeconds(timeout)将传入的int秒数转换为API要求的Duration类型,同时保留了原有的调用方式,无需修改外部传参逻辑。另外更新了隐式等待的调用方式,适配新版Selenium的API规范。

内容的提问来源于stack exchange,提问作者Anjali Kori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:05:14