在webdriver中等待元素

时间:2011-10-07 13:17:04

标签: webdriver selenium-webdriver

我按照这里写的: WebDriver Selenium API: ElementNotFoundErrorException when Element is clearly there !

我的代码如下:

    Function<WebDriver, WebElement> presenceOfElementLocated(final By locator) {
    return new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return driver.findElement(locator);
          }
       };
    }

   ....... 

   driver.get(baseUrl);

   WebDriverWait wait = new WebDriverWait(driver, 10);
   wait.until(presenceOfElementLocated(By.className("classname")));
   findByClassAndName(driver, "x-tree3-node-text", "Name1").click();

问题是,这似乎没有做任何事情。它不起作用,我甚至看不到任何等待网页gui的痕迹。我通过超时隐含等待得到同样的...任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

按如下方式创建功能:

public void Wait (string element)          // Wait function to wait for element
        { 
            for (int second = 0; ; second++)
                {
                    if (second >= 60) Assert.Fail("timeout");
                    try
                    {
                        if (IsElementPresent(By.LinkText(element))) break;
                    }
                    catch (Exception)
                    { }
                    Thread.Sleep(1000);
                 }  
        }

现在调用此函数,您要等待元素,如下所示:

string element="<element name>";
        Wait(element);

答案 1 :(得分:1)

你必须抓住Throwables 从ExpectedCondition或你的函数抛出(apply()方法适合那个)并且返回null所以Wait.until()继续要运行 - 请参阅http://rostislav-matl.blogspot.com/2011/05/moving-to-selenium-2-on-webdriver-part.html了解详细示例。