Здравствуйте.
У меня такая же проблема, и почему-то решение отлавливания этой ошибки не срабатывает.
Есть два метода: метод ожидания элемента и метод проверки видимости элемента с отлавливанием ошибок.
public IWebElement WaitForElement(IWebElement webElement) { bool isFound = false; for (int i = 0; i < 30; i++) { if (IsElementPresentAndVisible(webElement)) { isFound = true; break; } else { System.Threading.Thread.Sleep(1000); } } if (isFound) { return webElement; } else { Assert.Fail("ERROR! It's impossible to detect web-element" + webElement.ToString() + "."); return null; } } public bool IsElementPresentAndVisible(IWebElement webElement) { try { if (webElement.Displayed) { return true; } else { return false; } } catch (NoSuchElementException) { return false; } catch (ElementNotVisibleException) { return false; } catch (StaleElementReferenceException) { return false; } }Т.е. я тут пытаюсь отлавливать ошибку "StaleElementReferenceException".
Но, тем не менее, мои тесты периодически падают в этом месте с сообщением
"System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.----> OpenQA.Selenium.StaleElementReferenceException : The element reference is stale. Either the element is no longer attached to the DOM or the page has been refreshed."
Что не так у меня с кодом?Вообще, конкретно по Select, похоже, что у вас при попытке выбрать что-либо в списке, этот список обновляется или вообще используется другой (на одном проекте встречал подобное). Вам нужно детальнее посмотреть, что у вас происходит в DOM при работе с этим select. И решить каких именно событий ожидать, чтобы гарантированно дождаться обновления списка. Это может быть также наличие тех или иных опций в списке.
Эмм... у меня тут вопрос не связан с select.
В моих тестах во многих местах используюется ожидание элемента (код выше), и на разных элементах тест падает с "StaleElementReferenceException".
Например, после логина я жду появление навигационного меню... и в этом ожидании тест часто падает.