Я использую следующий c #, чтобы запросить у dom идентификаторы и классы с известными значениями загрузки и жду, пока их не будет.Использование driver.FindElement (By *) пытается объявить, что элемент присутствует в данном идентификаторе, а не его поиск, что приведет к ошибкам, а не к поведению, которое мы ищем.
public IWebDriver WaitForPage()
{// Query document for loading elements until none found
var wait = new WebDriverWait(driver,MyDefaultTimeout)
.Until(
e => ((IJavaScriptExecutor)e)
.ExecuteScript(@"
var MyDefaultTimeout = 500;
var loaded = false;
do {
var elementClasses = document.getElementsByClassName('//*[contains(@class=\'is-loading\') or contains(@class=\'fa-gear\') or contains(@class=\'loading\') and not(@class=\'displayed\')]');
var elementIds = document.getElementById('//*[contains(@id=\'hover-gear\') or contains(@id=\loading-gear\')]');
if((!elementClasses === null) || (!elementIds === null)){
setTimeout(function() { loaded = false }, MyDefaultTimeout);
}
else{
if(!document.readyState === 'complete'){
setTimeout(function() { loaded = false }, MyDefaultTimeout);
}
else{
loaded = true;
return document.readyState;
}
}
}
while(loaded === false);", null))
.Equals("complete");
return driver;
}