У меня есть следующий метод, используемый, чтобы нажать несколько выпадающие на странице:Почему StaleElementReferenceException выбрасывается следующим методом?
protected void selectIthElementOffAllDropDowns(String selectElement, int entryOfDropdown) {
ICollection<IWebElement> allElements = driver.FindElements(By.CssSelector(selectElement));
foreach(IWebElement element in allElements) {
if(element.IsDisplayed) {
new SelectElement(element).SelectByIndex(entryOfDropdown);
}
}
}
Около 70% времени код выполняется, как ожидалось. Однако он иногда выбрасывает StaleElementReferenceException
. Когда это будет брошено кидаем на линии:
new SelectElement(element).SelectByIndex(entryOfDropdown);
То, что я не понимаю, как element.IsDisplayed
верно, но в соответствии с документацией Селен here Эта ошибка возникает, когда элемент был удален полностью или когда элемент больше не привязан к DOM. Кто-нибудь сможет объяснить, как эта ошибка была выбрана? Кроме того, почему условие в выражении if было истинным, если эта ошибка была выбрана правильно?
Примечание: Я использую chromedriver запустить эти тесты с OpenQA.Selenium