未找到FindElements会导致WebDriverException

时间:2014-12-17 11:43:58

标签: c# firefox selenium selenium-webdriver

尝试在页面上运行以下FindElements方法时:

var match = Driver.Instance.FindElements(By.LinkText("Click here"));

我收到错误:

An exception of type 'OpenQA.Selenium.WebDriverException' occurred in WebDriver.dll but was not handled in user code.
OpenQA.Selenium.WebDriverException was unhandled by user code
HResult=-2146233088
Message=The HTTP request to the remote WebDriver server for URL http://localhost:7057/hub/session/a90c4828-3fb3-46d1-923d-8c5cbb65c4fe/elements timed out after 60 seconds.
Source=WebDriver

链接文本“单击此处”实际上并不存在于页面中,因此我不期望FindElements(By)实际找到任何内容(我稍后会在If语句中使用它)。该方法超时导致上述异常。

根据我的理解,如果FindElements超时,并且实际上没有找到任何内容,它应该返回0个元素。不只是超时而且抛出异常。

是否有其他人遇到过这个问题,或者有什么想法可能导致它?

1 个答案:

答案 0 :(得分:1)

FindElements()会抛出WebDriverExepction,因为我是如何创建驱动程序的。

我在其自己的班级中创建了驱动程序:

public class Driver
{
    public static IWebDriver Instance { get; private set; }

    public static void Initialise()
    {
        Instance = new FirefoxDriver();
        Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
    }
}

这意味着在测试用例开始时我会调用Driver.Initialise()然后像这样使用Driver:

Driver.Instance.FindElements(By.Id("ABC"));

由于某种原因(我仍然不知道真正的答案),Driver类不是静态的并且调用FindElements方法将返回WebDriverException而不是List of 0元素。

只需将课程更改为:

public static class Driver
{
    public static IWebDriver Instance { get; private set; }

    public static void Initialise()
    {
        Instance = new FirefoxDriver();
        Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
    }
}

解决了问题。