Я специально спрашиваю, какие могут быть проблемы с моим try/catch
блоком, который не описан в проблемах, связанных с этим как "дубликаты".
У меня проблема с тем, что я пытаюсь поймать StaleElementReferenceException
, а затем снова искать элемент, но по какой-то причине исключение не перехватывается.У меня есть метод ниже, и когда я запускаю тест, я получаю StaleElementReferenceException
, когда эта строка выполняется, value = element.GetAttribute(attributeName);
.Я предположил (возможно, плохо), что добавление проверки в try/catch
и, в частности, поиск исключения, позволит мне продолжить попытки, пока селен не сможет снова найти элемент.По какой-то причине проблема не обнаруживается, и тест немедленно завершается.Как ни странно, если я изменю блок catch, чтобы просто поймать общий Exception
, он работает просто отлично.Я беспокоюсь об этом, хотя я мог бы войти в цикл, который никогда не закончится.Я использую объектную модель страницы для первоначальной инициализации элементов.
bool isStale = false;
string value = "";
do
{
try
{
value = element.GetAttribute(attributeName);
isStale = false;
}
catch (StaleElementReferenceException)
{
element = driver.FindElement(By.XPath(xPath));
isStale = true;
}
} while (isStale == true);
return value;
Это часть трассировки стека:
Сбой теста с ошибкой: System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова.---> OpenQA.Selenium.StaleElementReferenceException: ссылка на устаревший элемент: элемент не прикреплен к документу страницы (информация о сеансе: chrome = 71.0.3578.98) (информация о драйвере: chromedriver = 2.43.600210 (68dcf5eebde37173d4027fa8635e332711d2874a) Windows = платформа0,17134 x86_64) на OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError (Response errorResponse) в OpenQA.Selenium.Remote.RemoteWebDriver.Execute (String driverCommandToExecute, словарь 2 parameters) at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary
2 параметров) при OpenQA.Selenium.Remote.RemoteWebElement.GetAttribute (String attributeName)