Как расширить интерфейс IWebElement, чтобы добавить новый метод - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь расширить интерфейс 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 всегда мог его использовать?

Спасибо, Привет.

1 Ответ

0 голосов
/ 08 апреля 2019

Для тех, кто достигает, имеет тот же вопрос, вот как я это исправил:

Создайте новый static class Методы расширения:


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 # для методов расширения

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...