c#中的Selenium WaitForElement抛出ElementNotVisibleException

时间:2016-02-17 12:57:20

标签: c# selenium

IWebDriver driver = Browser.Instance.Driver;

            if (timeout > 0)
            {
                WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
                try
                {
                    wait.Until(ExpectedConditions.ElementExists(selector));
                    return driver.FindElement(selector);
                }catch(NoSuchElementException)
                {
                    throw new NoSuchElementException();
                }
            }
            else
            {
                // Search for element without timeout 
                return driver.FindElement(selector);
            }

这是我的代码,我真的不知道为什么它会抛出异常。我的时间设置为30秒,但他已经在几秒钟之后抛出了Exception。当我在Debug Modus中运行Test并自己等待Element时,它可以正常工作。

起初我用过这个,但是没有用到

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)); return wait.Until(drv => drv.FindElement(by));

1 个答案:

答案 0 :(得分:3)

ExpectedConditions.ElementExists();正在等待DOM中 exists 的元素。要确保网站中的元素可见,请使用ExpectedConditions.ElementIsVisible()

wait.Until(ExpectedConditions.ElementIsVisible(selector));

另一方面,如果wait.Until条件未达到,则会引发WebDriverTimeoutException,而不是NoSuchElementException