如何等到元素不可见

How to wait until an element is invisible

我需要等待元素不可见 并为此找到了几个解决方案,但其中 none 似乎对我有用。

我认为问题出在我使用的是 PageObject 模型。但我不完全确定。

 public static void WaitForElementToBeInvisible(this Browser browser, IWebElement element, int seconds = 30)
        {
            var wait = new WebDriverWait(browser.Driver, new TimeSpan(0, 0, seconds));
            wait.Until(ExpectedConditions.InvisibilityOfElementLocated(element));
        }

但是returns错误cannot convert from IWebElement to Selenium.By

提前致谢

简答,这是不可能的。 Selenium 的开发人员已决定对此没有有用的用例。

如果可以使用 By 定位器,您可以使用:

  public static void WaitUntilInvisible(this By locator)
        {
            try
            {
                if (Driver.FindElement(locator).Displayed)
                {
                    wait.Until(ExpectedConditions.ElementIsVisible(locator));
                }
        }

另请参阅:

您的代码不正确。它调用 InvisibilityOfElementLocated 不接收 IWebElement 作为参数。请参阅下面的示例。

public static bool WaitForElementToBeInvisible(this IWebElement element, int timeoutSecond = 10)
{
    IWait<IWebElement> wait = new DefaultWait<IWebElement>(element);
    wait.Timeout = TimeSpan.FromSeconds(timeoutSecond);
    wait.PollingInterval = TimeSpan.FromMilliseconds(300);
    try
    {
        wait.Until(!element.Displayed);
    }
    catch (WebDriverTimeoutException)
    {
        return false;
    }

    return true;
}

IWebElement div = driver.FindElement(By.Id("id"));
var result = div.WaitForElementToBeInvisible(5);

感谢大家的回答,不过是这样解决的。

public static void WaitUntilInvisible(this Browser browser, By element, int seconds = 30)
        {
            var wait = new WebDriverWait(browser.Driver, new TimeSpan(0, 0, seconds));
            wait.Until(ExpectedConditions.InvisibilityOfElementLocated(element));
        }

然后用作按定位器

By LoadingIcon = By.XPath(".//*[contains(@class, 'loading')]");

很有魅力:)

do { Playback.Wait(100); } while (_driver.FindElements(By.Id("elementId")).Count() > 0);