尝试在页面上运行以下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个元素。不只是超时而且抛出异常。
是否有其他人遇到过这个问题,或者有什么想法可能导致它?
答案 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));
}
}
解决了问题。