Selenium.WebDriver 2.32.1 C# - 等到页面加载后隐藏LOADING DIV

时间:2013-04-28 19:02:37

标签: c# selenium-webdriver

如果已经询问/回答了这个问题,我真的很抱歉。但是我找不到它。

请原谅我的无知,因为我是WebDriver的新手。

当页面最初加载时,它会显示一个LOADING DIV,直到加载所有数据。在继续对页面元素执行其他操作之前,我怎么能等到这个div被隐藏?

我想知道如下:

    public static void waitForPageLoad(string ID, IWebDriver driver)
    {
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
        {
            return d.FindElement(By.Id(ID));
        });
    }

我将其他元素的ID传递给此函数,我将在LOADING DIV消失时使用该函数。它返回错误的结果,因为ID实际上存在/加载了元素,但是在灰色DIV后面显示“正在加载...请等待”消息。所以这不起作用。我想知道何时LOADING div消失了。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:7)

通过等待bool值而不是IWebElement,.NET WebDriverWait类将一直等到返回值true。鉴于此,如何尝试以下内容:

public static void WaitForElementToNotExist(string ID, IWebDriver driver)
{
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    wait.Until<bool>((d) =>
    {
        try
        {
            // If the find succeeds, the element exists, and
            // we want the element to *not* exist, so we want
            // to return true when the find throws an exception.
            IWebElement element = d.FindElement(By.Id(ID));
            return false;
        }
        catch (NoSuchElementException)
        {
            return true;
        }
    });
}

请注意,如果您要查找的元素实际上已从DOM中删除,则这是适当的模式。另一方面,如果“等待”元素始终存在于DOM中,但只是根据您的应用程序所使用的JavaScript框架的要求而变得可见/不可见,那么代码更简单,看起来像这样:

public static void WaitForElementInvisible(string ID, IWebDriver driver)
{
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    wait.Until<bool>((d) =>
    {
        try
        {
            IWebElement element = d.FindElement(By.Id(ID));
            return !element.Displayed;
        }
        catch (NoSuchElementException)
        {
            // If the find fails, the element exists, and
            // by definition, cannot then be visible.
            return true;
        }
    });
}