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