Selenium实用程序等待元素

时间:2016-06-22 10:51:33

标签: java selenium-webdriver

我是selenium框架的新手,并为元素的存在编写了一个方法。以下是我写的方法:

public class WebUtlities {
    WebDriver driver;

    public void waitforanelement(WebElement element)
    {
        WebDriverWait wait = new WebDriverWait(driver,20);
         wait.until(ExpectedConditions.presenceOfElementLocated((By) element));
    }

当我为元素调用此方法时,我看到以下错误:

java.lang.ClassCastException: com.sun.proxy.$Proxy6 cannot be cast to org.openqa.selenium.By
    at Uilities.WebUtlities.waitforanelement(WebUtlities.java:16)
    at TestScripts.Testcases.Selfpay(Testcases.java:29)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

请纠正我如何让元素等待

4 个答案:

答案 0 :(得分:0)

试试这个

public class WebUtlities {
    WebDriver driver;

    public void waitforanelement(WebElement element)
    {
driver = new FirefoxDriver();
        WebDriverWait wait = new WebDriverWait(driver,20);
         wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("xpath of that element"))); //you can use any other By like id, cssselector, name, linktext etc
    }

希望这有帮助

答案 1 :(得分:0)

使用以下代码:

public void waitforanelement(By element)
{
    WebDriverWait wait = new WebDriverWait(driver,20);
     wait.until(ExpectedConditions.presenceOfElementLocated(element));
}

当你调用方法时,请执行以下操作:

By css = By.cssSelector("ur selector");

waitforanelement(css);
希望这会对你有所帮助。

答案 2 :(得分:0)

问题出在这一行:

wait.until(ExpectedConditions.presenceOfElementLocated((By) element));

首先,presenceOfElementLocated方法用于定位页面上的元素,而不是检查页面上是否存在先前找到的元素 - 因此您应该更改{{1}的参数}方法接受waitforanelement定位器而不是By,如此:

WebElement

然后,您应该随后更改传递给public void waitforanelement(By by)方法的参数,如下所示:

presenceOfElementLocated

The Javadoc for the By class lists the locators you can use.

答案 3 :(得分:0)

从错误中可以看出问题是

new WebDriverWait(driver,20);
         wait.until(ExpectedConditions.presenceOfElementLocated((By) element));

返回应分配给WebElement的WebElement实例。所以它无法将WebElement转换为任何内容。

请按照以下列表获取ExpectedConditions类的完整方法列表。 https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html

尝试以下方法,

public WebElement waitforanelement(WebElement element)
    {
        WebDriverWait wait= new WebDriverWait(driver,20);
         WebElement Element=wait.until(ExpectedConditions.presenceOfElementLocated((By) element));
   return Element1;
    }