Я автоматизирую веб-приложение с помощью селена c#.
После входа в систему мне нужно обработать счетчик, который появляется на домашней странице.
Я дал явное ожидание
wait.Until (SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible (LocatorSelect (locator, locatorvalue)));
Результат передается, и сценарий ждет, пока элемент станет видимым.
Но после проверки видимости счетчика я проверяю невидимость того же элемента.
Но элемент все равно ждет больше 30-40 секунд, даже если я дал 10 секунд. Затем примерно через 40 секунд он не выдает никаких ошибок и продолжает выполнять скрипт без каких-либо исключений.
public void Spinner_Check(string locator, string locatorvalue)
{
int count = 1;
WebDriverWait waits = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
waits.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(LocatorSelect(locator, locatorvalue)));
while (count > 0)
{
waits.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.InvisibilityOfElementLocated(By.XPath(locatorvalue)));
IList<IWebElement> spinner_element = driver.FindElements(By.XPath(locatorvalue));
int size = spinner_element.Count;
if (size != 1)
{
count = 0;
WriteLine("pass", "Spinner is dismissed for the page");
break;
}
}
}
Итак, как я могу избежать такого длительного времени ожидания и выполнить скрипт вскоре после того, как счетчик будет удален из page.
Несколько наблюдений в скрипте:
Когда я проверяю html, когда элемент виден, я мог видеть стиль атрибута отображения ' Block'.Но после того, как счетчик был удален из пользовательского интерфейса, я мог видеть, что xpath не показывает никаких элементов в области поиска: //iframe/parent::body//div[text()='Loading..'pting
В целях отладки я установил ожидание появления элемента, видимого после того, как счетчик отклонен со страницы. Затем я мог видеть исключение тайм-аута и исключение NoSuchElement.