我在html的section标签中有一些控件,当ajax
请求完成时,这些控件会加载。现在有一个场景,ajax
已加载,但控件没有出现在页面上,我想停止代码执行,直到所有控件都被加载并在页面上可见。
如何识别页面上是否已加载所有控件。
我不想使用以下解决方案:
1)在代码中显式等待(因为我不知道何时加载控件)。
2)我不想使用wait.Until(ExpectedConditions.ElementIsVisible(By.Id(id)));
(因为如果页面上没有特定控件,那么它将无限期地等待)
任何帮助都将不胜感激。
答案 0 :(得分:-1)
将以下方法添加到此类
public static void WaitForPageToLoad(this IWebDriver driver) { TimeSpan timeout = new TimeSpan(0,0,30); WebDriverWait wait = new WebDriverWait(driver,timeout);
IJavaScriptExecutor javascript = driver as IJavaScriptExecutor;
if (javascript == null)
throw new ArgumentException("driver", "Driver must support javascript execution");
wait.Until((d) =>
{
try
{
string readyState = javascript.ExecuteScript(
"if (document.readyState) return document.readyState;").ToString();
return readyState.ToLower() == "complete";
}
catch (InvalidOperationException e)
{
//Window is no longer available
return e.Message.ToLower().Contains("unable to get browser");
}
catch (WebDriverException e)
{
//Browser is no longer available
return e.Message.ToLower().Contains("unable to connect");
}
catch (Exception)
{
return false;
}
});
}
此代码将等待所有JavaScript加载。