我正在使用 Selenium 2.25 WebDriver
我在查找页面上的元素时遇到问题,有时我的测试用例能够找到元素,有时页面未加载,这是由于页面加载所致,如果我在下面添加此行,它似乎可以正常工作:
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));
我的问题是,我不想让我的代码分散在上面的代码行中,有没有办法让它集中在一个地方?
任何帮助将不胜感激,谢谢!
我正在使用 Selenium 2.25 WebDriver
我在查找页面上的元素时遇到问题,有时我的测试用例能够找到元素,有时页面未加载,这是由于页面加载所致,如果我在下面添加此行,它似乎可以正常工作:
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));
我的问题是,我不想让我的代码分散在上面的代码行中,有没有办法让它集中在一个地方?
任何帮助将不胜感激,谢谢!
如果您设置一次超时,它会设置为驱动程序实例的生命周期。你不需要一直重置它。您可以在创建驱动程序后立即进行设置。
IWebDriver driver = new FirefoxDriver();
driver.Manage().Timeouts.SetPageLoadTimeout(TimeSpan.FromSeconds(2));
使用此超时的唯一警告是,并非每个浏览器都可以完全支持它(IE 确实支持,我认为 Firefox 也支持,但我认为 Chrome 不支持)。
您可以尝试这样的解决方法:
观察页面中最后加载的元素并找到它的 id(或任何其他标识符)。然后做这样的事情:
while (true)
{
try
{
IWebElement element = driver.FindElement(By.Id(...));
if (element.Displayed)
{
break;
}
}
catch (Exception)
{
continue;
}
}
这将继续循环,直到显示最后加载的元素并随后中断。捕获元素未找到异常并继续循环,直到元素不显示。