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

Selenium.WebDriver 2.32.1 C#-等待直到页面加载后加载DIV被隐藏,c#,selenium-webdriver,C#,Selenium Webdriver,如果这个问题已经被问到/回答了,我真的很抱歉。但是我找不到它 请原谅我的无知,因为我是新手 最初加载页面时,它会显示一个加载DIV,直到加载所有数据。在继续对页面元素执行其他操作之前,如何等待此div被隐藏 我想知道的情况如下: public static void waitForPageLoad(string ID, IWebDriver driver) { WebDriverWait wait = new WebDriverWait(driver, TimeS

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

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

最初加载页面时,它会显示一个加载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));
        });
    }
publicstaticvoidwaitforpageload(字符串ID,IWebDriver驱动程序)
{
WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.FromSeconds(10));
IWebElement myDynamicElement=等待直到((d)=>
{
返回d.FindElement(By.Id(Id));
});
}
我将其他元素的Id传递给这个函数,当加载DIV消失时,我将使用这个函数。它返回错误的结果,因为按ID显示的元素实际存在/加载,但位于显示“正在加载…请稍候”消息的灰色DIV后面。所以这是行不通的。我想知道装货舱什么时候消失


非常感谢您的帮助。

通过等待
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;
        }
    });
}
公共静态void WaitForElementToNotExist(字符串ID,IWebDriver)
{
WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.FromSeconds(10));
等待。直到((d)=>
{
尝试
{
//如果查找成功,则元素存在,并且
//我们希望元素*不*存在,所以我们希望
//在查找引发异常时返回true。
IWebElement元素=d.FindElement(By.Id(Id));
返回false;
}
捕获(无接触元素异常)
{
返回true;
}
});
}
请注意,如果要查找的元素实际上已从DOM中删除,则这是合适的模式。另一方面,如果DOM中始终存在“waiting”元素,但只是按照应用程序使用的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;
        }
    });
}
公共静态无效WaitForElementInvisible(字符串ID,IWebDriver)
{
WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.FromSeconds(10));
等待。直到((d)=>
{
尝试
{
IWebElement元素=d.FindElement(By.Id(Id));
返回!元素。已显示;
}
捕获(无接触元素异常)
{
//如果查找失败,则元素存在,并且
//根据定义,这样就不可见了。
返回true;
}
});
}

谢谢。我要试一试。。但这不会总是返回错误吗?因为加载Div只是隐藏在页面上,所以您完全正确。您最初的问题不清楚加载div“消失”是否意味着它已从DOM中删除,或者只是变得不可见。我已经编辑了我的回复,以显示可见/不可见案例的示例。谢谢!这帮助我解决了我在尝试这个解决方案时遇到的无接触异常问题。我有一个不同之处,我将等待的结果作为布尔值返回。因此,只需在wait.Until命令前面添加一个返回。公共静态bool WaitForElementNotVisible(…){…返回wait.Until(…);}