首页 > 解决方案 > 将 WebElement 作为参数传递给隐式等待方法

问题描述

我在 Page.class 中编写了以下方法来重用隐式等待。

public WebDriver waitForElementToLoad(WebElement element)
{
        WebDriverWait wait = new WebDriverWait(driver, 60);
        wait.until(ExpectedConditions.presenceOfElementLocated((By) element));
        return (driver);
}

在我的 test.class 中,我使用了页面工厂元素,例如:

//Save button
@FindBy(xpath = "//*[@*='Save']")
private WebElement saveButton;

现在我正在尝试调用: waitForElementToLoad(saveButton); from test.Class 但我遇到了错误。

“java.lang.ClassCastException:com.sun.proxy.$Proxy12 类无法转换为 org.openqa.selenium.By 类(com.sun.proxy.$Proxy12 和 org.openqa.selenium.By 位于未命名的模块中加载程序'应用程序')“

我也试过

WebElement saveButton = driver.findElement(By.xpath("//*[@*='Save']"));
waitForElementToLoad(saveButton);

但没有运气。

我怎样才能使这项工作?

标签: javaseleniumselenium-webdriverpageobjectspage-factory

解决方案


WebDriverWait是显式等待,而不是隐式等待。而且你不能WebElement投到By.

如果saveButton不是null页面工厂已经找到它,等待它的存在是没有意义的,这就是为什么你没有重载WebElement. 而是等待可见性

wait.until(ExpectedConditions.visibilityOf(element));

推荐阅读