У меня недавно была похожая проблема:
Мне удалось включить в нее стратегию / политику повторов, поэтому я жду, пока элемент будет существовать в DOM.
public static void WaitForElementToExistInDom(Func<IWebElement> action)
{
RetryPolicy.Do(() =>
{
if (!DoesElementExistInDom(action))
throw new RetryPolicyException();
}, TimeSpan.FromMilliseconds(Timeouts.DefaultTimeSpanInMilliseconds), TestConstants.DefaultRetryCount);
}
public static bool DoesElementExistInDom(Func<IWebElement> action)
{
var doesExist = false;
try
{
var element = action.Invoke();
if (element != null)
doesExist = true;
}
catch (StaleElementReferenceException)
{
}
catch (NullReferenceException)
{
}
catch (NoSuchElementException)
{
}
return doesExist;
}
И вы можете назвать это так:
WebDriverExtensionMethods.WaitForElementToExistInDom(() => Map.YourElement);
Если элемент остановлен или не существует, внутренне мы собираемся обработать исключения и повторить попытку.
И посколькуоценка «если элемент существует в DOM» выполняется при получении вызова элемента из MAP, мы заключаем его в Action / Func, таким образом, оценка выполняется в методе (и, таким образом, перехватисключения), вам не нужно использовать селектор поиска вне самой карты элемента.