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
相关产品推荐
相关产品推荐

