Как расширить интерфейс IWebElement, чтобы добавить новый метод
Я пытаюсь расширить интерфейс IWebElement
в C# добавить новый метод защиты от StaleElementReferenceException
,
Метод, который я хочу добавить, является простым retryingClick
который попытается щелкнуть WebElement до трех раз, прежде чем отказаться:
public static void retryingClick(this IWebElement element)
{
int attempts = 0;
while (attempts <= 2)
{
try
{
element.Click();
}
catch (StaleElementReferenceException)
{
attempts++;
}
}
}
Причиной добавления метода является то, что наша веб-страница широко использует jQuery, и многие элементы динамически создаются / уничтожаются, поэтому добавление защиты для каждого WebElement становится огромным испытанием.
Поэтому возникает вопрос: как мне реализовать этот метод, чтобы интерфейс IWebElement всегда мог его использовать?
Спасибо! С уважением.
0 ответов
Для тех, кто достигает, имеет тот же вопрос, вот как я это исправил:
Создать новый static class
ExtensionMethods:
public static class ExtensionMethods
{
public static bool RetryingClick(this IWebElement element)
{
Stopwatch crono = Stopwatch.StartNew();
while (crono.Elapsed < TimeSpan.FromSeconds(60))
{
try
{
element.Click();
return true;
}
catch (ElementNotVisibleException)
{
Logger.LogMessage("El elemento no es visible. Reintentando...");
}
catch (StaleElementReferenceException)
{
Logger.LogMessage("El elemento ha desaparecido del DOM. Finalizando ejecución");
}
Thread.Sleep(250);
}
throw new WebDriverTimeoutException("El elemento no ha sido clicado en el tiempo límite. Finalizando ejecución");
}
}
Этого должно быть достаточно для метода RetryingClick
отображаться как метод для типа IWebElement
Если у вас есть какие-либо сомнения, обратитесь к руководству по программированию Microsoft C# для методов расширения
Надеюсь это поможет